@@ -37,157 +37,140 @@ public CreateEventHandler(IEventRepository eventRepository, IMessageBroker messa
37
37
38
38
public async Task HandleAsync ( CreateEvent command , CancellationToken cancellationToken )
39
39
{
40
- try
41
- {
42
- var options = new JsonSerializerOptions { WriteIndented = true } ;
43
- var commandJson = JsonSerializer . Serialize ( command , options ) ;
44
- Console . WriteLine ( "Received CreateEvent command: " ) ;
45
- Console . WriteLine ( commandJson ) ;
40
+ var options = new JsonSerializerOptions { WriteIndented = true } ;
41
+ var commandJson = JsonSerializer . Serialize ( command , options ) ;
42
+ var identity = _appContext . Identity ;
46
43
47
- var identity = _appContext . Identity ;
44
+ // Validate Event ID
45
+ if ( command . EventId == Guid . Empty || await _eventRepository . ExistsAsync ( command . EventId ) )
46
+ {
47
+ throw new InvalidEventIdException ( command . EventId ) ;
48
+ }
48
49
49
- // Validate Event ID
50
- if ( command . EventId == Guid . Empty || await _eventRepository . ExistsAsync ( command . EventId ) )
51
- {
52
- throw new InvalidEventIdException ( command . EventId ) ;
53
- }
50
+ // Validate Organizer Type
51
+ if ( ! Enum . TryParse < OrganizerType > ( command . OrganizerType , true , out var organizerType ) )
52
+ {
53
+ throw new ArgumentException ( $ "Invalid OrganizerType value: { command . OrganizerType } " ) ;
54
+ }
54
55
55
- // Validate Organizer Type
56
- if ( ! Enum . TryParse < OrganizerType > ( command . OrganizerType , true , out var organizerType ) )
57
- {
58
- throw new ArgumentException ( $ "Invalid OrganizerType value: { command . OrganizerType } ") ;
59
- }
56
+ // Validate Visibility
57
+ if ( ! Enum . TryParse < Visibility > ( command . Visibility , true , out var visibility ) )
58
+ {
59
+ throw new ArgumentException ( $ "Invalid Visibility value: { command . Visibility } ") ;
60
+ }
60
61
61
- // Validate Visibility
62
- if ( ! Enum . TryParse < Visibility > ( command . Visibility , true , out var visibility ) )
62
+ PaymentMethod ? paymentMethod = null ;
63
+ if ( command . Settings != null && command . Settings . RequiresPayment && ! string . IsNullOrWhiteSpace ( command . Settings . PaymentMethod ) )
64
+ {
65
+ if ( ! Enum . TryParse < PaymentMethod > ( command . Settings . PaymentMethod , true , out var parsedPaymentMethod ) )
63
66
{
64
- throw new ArgumentException ( $ "Invalid Visibility value: { command . Visibility } ") ;
67
+ throw new ArgumentException ( $ "Invalid PaymentMethod value: { command . Settings . PaymentMethod } ") ;
65
68
}
69
+ paymentMethod = parsedPaymentMethod ;
70
+ }
66
71
67
- PaymentMethod ? paymentMethod = null ;
68
- if ( command . Settings != null && command . Settings . RequiresPayment && ! string . IsNullOrWhiteSpace ( command . Settings . PaymentMethod ) )
69
- {
70
- if ( ! Enum . TryParse < PaymentMethod > ( command . Settings . PaymentMethod , true , out var parsedPaymentMethod ) )
71
- {
72
- throw new ArgumentException ( $ "Invalid PaymentMethod value: { command . Settings . PaymentMethod } ") ;
73
- }
74
- paymentMethod = parsedPaymentMethod ;
75
- }
72
+ _eventValidator . ValidateName ( command . Name ) ;
73
+ _eventValidator . ValidateDescription ( command . Description ) ;
74
+ var startDate = _eventValidator . ParseDate ( command . StartDate , "event_start_date" ) ;
75
+ var endDate = _eventValidator . ParseDate ( command . EndDate , "event_end_date" ) ;
76
+ var now = _dateTimeProvider . Now ;
77
+ _eventValidator . ValidateDates ( now , startDate , "now" , "event_start_date" ) ;
78
+ _eventValidator . ValidateDates ( startDate , endDate , "event_start_date" , "event_end_date" ) ;
79
+
80
+ // Create Address object
81
+ var address = new Address ( command . BuildingName , command . Street , command . BuildingNumber , command . ApartmentNumber , command . City , command . ZipCode , command . Country ) ;
82
+
83
+ // Validate Capacity and Fee
84
+ _eventValidator . ValidateCapacity ( command . Capacity ) ;
85
+ _eventValidator . ValidateFee ( command . Fee ) ;
86
+
87
+ // Parse and Validate Category
88
+ var category = _eventValidator . ParseCategory ( command . Category ) ;
89
+
90
+ // Determine Publish Date and State
91
+ var publishDate = now ;
92
+ var state = State . Published ;
93
+ if ( ! string . IsNullOrEmpty ( command . PublishDate ) )
94
+ {
95
+ publishDate = _eventValidator . ParseDate ( command . PublishDate , "event_publish_date" ) ;
96
+ _eventValidator . ValidateDates ( now , publishDate , "now" , "event_publish_date" ) ;
97
+ _eventValidator . ValidateDates ( publishDate , startDate , "event_publish_date" , "event_start_date" ) ;
98
+ state = State . ToBePublished ;
99
+ }
76
100
77
- _eventValidator . ValidateName ( command . Name ) ;
78
- _eventValidator . ValidateDescription ( command . Description ) ;
79
- var startDate = _eventValidator . ParseDate ( command . StartDate , "event_start_date" ) ;
80
- var endDate = _eventValidator . ParseDate ( command . EndDate , "event_end_date" ) ;
81
- var now = _dateTimeProvider . Now ;
82
- _eventValidator . ValidateDates ( now , startDate , "now" , "event_start_date" ) ;
83
- _eventValidator . ValidateDates ( startDate , endDate , "event_start_date" , "event_end_date" ) ;
84
-
85
- // Create Address object
86
- var address = new Address ( command . BuildingName , command . Street , command . BuildingNumber , command . ApartmentNumber , command . City , command . ZipCode , command . Country ) ;
87
-
88
- // Validate Capacity and Fee
89
- _eventValidator . ValidateCapacity ( command . Capacity ) ;
90
- _eventValidator . ValidateFee ( command . Fee ) ;
91
-
92
- // Parse and Validate Category
93
- var category = _eventValidator . ParseCategory ( command . Category ) ;
94
-
95
- // Determine Publish Date and State
96
- var publishDate = now ;
97
- var state = State . Published ;
98
- if ( ! string . IsNullOrEmpty ( command . PublishDate ) )
101
+ // Determine Organizer
102
+ Organizer organizer ;
103
+ if ( organizerType == OrganizerType . Organization )
104
+ {
105
+ if ( command . OrganizationId == null )
99
106
{
100
- publishDate = _eventValidator . ParseDate ( command . PublishDate , "event_publish_date" ) ;
101
- _eventValidator . ValidateDates ( now , publishDate , "now" , "event_publish_date" ) ;
102
- _eventValidator . ValidateDates ( publishDate , startDate , "event_publish_date" , "event_start_date" ) ;
103
- state = State . ToBePublished ;
107
+ throw new ArgumentNullException ( nameof ( command . OrganizationId ) , "OrganizationId cannot be null for Organization-type events." ) ;
104
108
}
105
109
106
- // Determine Organizer
107
- Organizer organizer ;
108
- if ( organizerType == OrganizerType . Organization )
109
- {
110
- if ( command . OrganizationId == null )
111
- {
112
- throw new ArgumentNullException ( nameof ( command . OrganizationId ) , "OrganizationId cannot be null for Organization-type events." ) ;
113
- }
114
-
115
- var organization = await _organizationsServiceClient . GetAsync ( command . OrganizationId . Value ) ;
116
- if ( organization == null )
117
- {
118
- throw new OrganizationNotFoundException ( command . OrganizationId . Value ) ;
119
- }
120
-
121
- // Store both organization ID and the user ID creating the event
122
- organizer = new Organizer ( command . OrganizationId . Value , OrganizerType . Organization , userId : command . OrganizerId , organizationId : command . OrganizationId . Value ) ;
123
- }
124
- else
110
+ var organization = await _organizationsServiceClient . GetAsync ( command . OrganizationId . Value ) ;
111
+ if ( organization == null )
125
112
{
126
- organizer = new Organizer ( command . OrganizerId , OrganizerType . User , userId : command . OrganizerId ) ;
113
+ throw new OrganizationNotFoundException ( command . OrganizationId . Value ) ;
127
114
}
128
115
129
- var settings = command . Settings != null
130
- ? new EventSettings
131
- {
132
- RequiresApproval = command . Settings . RequiresApproval ,
133
- IsOnlineEvent = command . Settings . IsOnlineEvent ,
134
- IsPrivate = command . Settings . IsPrivate ,
135
- RequiresRSVP = command . Settings . RequiresRSVP ,
136
- AllowsGuests = command . Settings . AllowsGuests ,
137
- ShowAttendeesPublicly = command . Settings . ShowAttendeesPublicly ,
138
- SendReminders = command . Settings . SendReminders ,
139
- ReminderDaysBefore = command . Settings . ReminderDaysBefore ,
140
- EnableChat = command . Settings . EnableChat ,
141
- AllowComments = command . Settings . AllowComments ,
142
- RequiresPayment = command . Settings . RequiresPayment ,
143
- PaymentMethod = paymentMethod ?? PaymentMethod . Offline ,
144
- PaymentReceiverDetails = command . Settings . PaymentReceiverDetails ,
145
- PaymentGateway = command . Settings . PaymentGateway ,
146
- IssueTickets = command . Settings . IssueTickets ,
147
- MaxTicketsPerPerson = command . Settings . MaxTicketsPerPerson ,
148
- TicketPrice = command . Settings . TicketPrice ,
149
- RecordEvent = command . Settings . RecordEvent ,
150
- CustomTermsAndConditions = command . Settings . CustomTermsAndConditions ,
151
- CustomFields = command . Settings . CustomFields
152
- }
153
- : null ;
154
-
155
- var @event = Event . Create (
156
- command . EventId ,
157
- command . Name ,
158
- command . Description ,
159
- organizer ,
160
- startDate ,
161
- endDate ,
162
- address ,
163
- command . MediaFilesUrl . ToList ( ) ,
164
- command . BannerUrl ,
165
- command . Capacity ,
166
- command . Fee ,
167
- category ,
168
- state ,
169
- publishDate ,
170
- now ,
171
- visibility ,
172
- settings ) ;
173
-
174
- await _eventRepository . AddAsync ( @event ) ;
175
- await _messageBroker . PublishAsync ( new EventCreated (
176
- @event . Id ,
177
- @event . Organizer . OrganizerType ,
178
- @event . Organizer . Id ,
179
- @event . MediaFiles ) ) ;
180
- }
181
- catch ( ArgumentException argEx )
182
- {
183
- Console . WriteLine ( $ "Validation error: { argEx . Message } ") ;
184
- throw ;
116
+ organizer = new Organizer ( command . OrganizationId . Value , OrganizerType . Organization , userId : command . OrganizerId , organizationId : command . OrganizationId . Value ) ;
185
117
}
186
- catch ( Exception ex )
118
+ else
187
119
{
188
- Console . WriteLine ( $ "Unhandled exception: { ex . Message } ") ;
189
- throw ;
120
+ organizer = new Organizer ( command . OrganizerId , OrganizerType . User , userId : command . OrganizerId ) ;
190
121
}
122
+
123
+ var settings = command . Settings != null
124
+ ? new EventSettings
125
+ {
126
+ RequiresApproval = command . Settings . RequiresApproval ,
127
+ IsOnlineEvent = command . Settings . IsOnlineEvent ,
128
+ IsPrivate = command . Settings . IsPrivate ,
129
+ RequiresRSVP = command . Settings . RequiresRSVP ,
130
+ AllowsGuests = command . Settings . AllowsGuests ,
131
+ ShowAttendeesPublicly = command . Settings . ShowAttendeesPublicly ,
132
+ SendReminders = command . Settings . SendReminders ,
133
+ ReminderDaysBefore = command . Settings . ReminderDaysBefore ,
134
+ EnableChat = command . Settings . EnableChat ,
135
+ AllowComments = command . Settings . AllowComments ,
136
+ RequiresPayment = command . Settings . RequiresPayment ,
137
+ PaymentMethod = paymentMethod ?? PaymentMethod . Offline ,
138
+ PaymentReceiverDetails = command . Settings . PaymentReceiverDetails ,
139
+ PaymentGateway = command . Settings . PaymentGateway ,
140
+ IssueTickets = command . Settings . IssueTickets ,
141
+ MaxTicketsPerPerson = command . Settings . MaxTicketsPerPerson ,
142
+ TicketPrice = command . Settings . TicketPrice ,
143
+ RecordEvent = command . Settings . RecordEvent ,
144
+ CustomTermsAndConditions = command . Settings . CustomTermsAndConditions ,
145
+ CustomFields = command . Settings . CustomFields
146
+ }
147
+ : null ;
148
+
149
+ var @event = Event . Create (
150
+ command . EventId ,
151
+ command . Name ,
152
+ command . Description ,
153
+ organizer ,
154
+ startDate ,
155
+ endDate ,
156
+ address ,
157
+ command . MediaFilesUrl . ToList ( ) ,
158
+ command . BannerUrl ,
159
+ command . Capacity ,
160
+ command . Fee ,
161
+ category ,
162
+ state ,
163
+ publishDate ,
164
+ now ,
165
+ visibility ,
166
+ settings ) ;
167
+
168
+ await _eventRepository . AddAsync ( @event ) ;
169
+ await _messageBroker . PublishAsync ( new EventCreated (
170
+ @event . Id ,
171
+ @event . Organizer . OrganizerType ,
172
+ @event . Organizer . Id ,
173
+ @event . MediaFiles ) ) ;
191
174
}
192
175
}
193
176
}
0 commit comments