Skip to content

Commit bad7360

Browse files
committed
(#411) events: update create event hadnler to remove redundant try catch
1 parent 0ca85e9 commit bad7360

File tree

4 files changed

+120
-140
lines changed

4 files changed

+120
-140
lines changed

MiniSpace.Services.Events/src/MiniSpace.Services.Events.Application/Commands/Handlers/CreateEventHandler.cs

+117-134
Original file line numberDiff line numberDiff line change
@@ -37,157 +37,140 @@ public CreateEventHandler(IEventRepository eventRepository, IMessageBroker messa
3737

3838
public async Task HandleAsync(CreateEvent command, CancellationToken cancellationToken)
3939
{
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;
4643

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+
}
4849

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+
}
5455

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+
}
6061

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))
6366
{
64-
throw new ArgumentException($"Invalid Visibility value: {command.Visibility}");
67+
throw new ArgumentException($"Invalid PaymentMethod value: {command.Settings.PaymentMethod}");
6568
}
69+
paymentMethod = parsedPaymentMethod;
70+
}
6671

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+
}
76100

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)
99106
{
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.");
104108
}
105109

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)
125112
{
126-
organizer = new Organizer(command.OrganizerId, OrganizerType.User, userId: command.OrganizerId);
113+
throw new OrganizationNotFoundException(command.OrganizationId.Value);
127114
}
128115

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);
185117
}
186-
catch (Exception ex)
118+
else
187119
{
188-
Console.WriteLine($"Unhandled exception: {ex.Message}");
189-
throw;
120+
organizer = new Organizer(command.OrganizerId, OrganizerType.User, userId: command.OrganizerId);
190121
}
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));
191174
}
192175
}
193176
}

MiniSpace.Services.Events/src/MiniSpace.Services.Events.Application/Events/EventCreated.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66

77
namespace MiniSpace.Services.Events.Application.Events
88
{
9-
public class EventCreated(Guid eventId, OrganizerType organizerType, Guid organizerId, IEnumerable<string> mediaFilesIds) : IEvent
9+
public class EventCreated(Guid eventId, OrganizerType organizerType, Guid organizerId, IEnumerable<string> mediaFilesUrls) : IEvent
1010
{
1111
public Guid EventId { get; set; } = eventId;
1212
public OrganizerType OrganizerType { get; set; } = organizerType;
1313
public Guid OrganizerId { get; set; } = organizerId;
14-
public IEnumerable<string> MediaFilesIds { get; set; } = mediaFilesIds;
14+
public IEnumerable<string> MediaFilesUrls { get; set; } = mediaFilesUrls;
1515
}
1616
}

MiniSpace.Services.Events/src/MiniSpace.Services.Events.Application/Events/External/Handlers/CommentCreatedHandler.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ public async Task HandleAsync(CommentCreated @event, CancellationToken cancellat
2525
{
2626
WriteIndented = true // Optional: For pretty-printing the JSON
2727
});
28-
Console.WriteLine("Received CommentCreated event:");
29-
Console.WriteLine(eventJson);
28+
3029

3130
var comment = new Comment(
3231
@event.CommentId,

MiniSpace.Services.Events/src/MiniSpace.Services.Events.Application/Events/External/Handlers/ReactionCreatedHandler.cs

-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ public async Task HandleAsync(ReactionCreated @event, CancellationToken cancella
2424
{
2525
WriteIndented = true
2626
});
27-
Console.WriteLine("Received ReactionCreated event:");
28-
Console.WriteLine(eventJson);
2927

3028
var reaction = Reaction.Create(
3129
@event.ReactionId,

0 commit comments

Comments
 (0)