From 86acaa42b1c5acfc6460254d1bcd70ac3d9ba4c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw?= <62651497+staszkiet@users.noreply.github.com> Date: Sun, 8 Jun 2025 19:50:22 +0200 Subject: [PATCH 1/3] Add organizer details --- .../Events/Abstractions/IEventRepository.cs | 2 ++ .../Events/Abstractions/IEventService.cs | 1 + .../Events/Controllers/EventsController.cs | 8 +++++++ .../GetEventDetailsOrganizerResponseDto.cs | 7 ++++++ .../Events/Repositories/EventRepository.cs | 22 +++++++++++++++++++ .../TickAPI/Events/Services/EventService.cs | 14 ++++++++++++ 6 files changed, 54 insertions(+) create mode 100644 TickAPI/TickAPI/Events/DTOs/Response/GetEventDetailsOrganizerResponseDto.cs diff --git a/TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs b/TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs index a7e4cb1..f7d1127 100644 --- a/TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs +++ b/TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs @@ -13,4 +13,6 @@ public interface IEventRepository public Task> GetEventByIdAsync(Guid eventId); public Task SaveEventAsync(Event ev); public Task> GetEventByIdAndOrganizerAsync(Guid eventId, Organizer organizer); + public Task> GetEventRevenue(Guid eventId); + public Task> GetEventSoldTicketsCount(Guid eventId); } \ No newline at end of file diff --git a/TickAPI/TickAPI/Events/Abstractions/IEventService.cs b/TickAPI/TickAPI/Events/Abstractions/IEventService.cs index 010a175..9475a4f 100644 --- a/TickAPI/TickAPI/Events/Abstractions/IEventService.cs +++ b/TickAPI/TickAPI/Events/Abstractions/IEventService.cs @@ -23,4 +23,5 @@ public Task> CreateNewEventAsync(string name, string description, public Task> GetEventDetailsAsync(Guid eventId); public Task> EditEventAsync(Organizer organizer, Guid eventId, string name, string description, DateTime startDate, DateTime endDate, uint? minimumAge, CreateAddressDto editAddress, List categories, EventStatus eventStatus); public Task SendMessageToParticipants(Organizer organizer, Guid eventId, string subject, string message); + public Task> GetEventDetailsOrganizerAsync(Guid eventId); } \ No newline at end of file diff --git a/TickAPI/TickAPI/Events/Controllers/EventsController.cs b/TickAPI/TickAPI/Events/Controllers/EventsController.cs index 94aa206..1662943 100644 --- a/TickAPI/TickAPI/Events/Controllers/EventsController.cs +++ b/TickAPI/TickAPI/Events/Controllers/EventsController.cs @@ -115,6 +115,14 @@ public async Task> GetEventDetails([Fro return eventDetailsResult.ToObjectResult(); } + [AuthorizeWithPolicy(AuthPolicies.VerifiedOrganizerPolicy)] + [HttpGet("organizer/{id:guid}")] + public async Task> GetEventDetailsOrganizer([FromRoute] Guid id) + { + var eventDetailsResult = await _eventService.GetEventDetailsOrganizerAsync(id); + return eventDetailsResult.ToObjectResult(); + } + [AuthorizeWithPolicy(AuthPolicies.VerifiedOrganizerPolicy)] [HttpPatch("{id:guid}")] public async Task> EditEvent([FromRoute] Guid id, [FromBody] EditEventDto request) diff --git a/TickAPI/TickAPI/Events/DTOs/Response/GetEventDetailsOrganizerResponseDto.cs b/TickAPI/TickAPI/Events/DTOs/Response/GetEventDetailsOrganizerResponseDto.cs new file mode 100644 index 0000000..6169603 --- /dev/null +++ b/TickAPI/TickAPI/Events/DTOs/Response/GetEventDetailsOrganizerResponseDto.cs @@ -0,0 +1,7 @@ +namespace TickAPI.Events.DTOs.Response; + +public record GetEventDetailsOrganizerResponseDto( + GetEventDetailsResponseDto EventDetails, + decimal Revenue, + int SoldTicketsCount + ); \ No newline at end of file diff --git a/TickAPI/TickAPI/Events/Repositories/EventRepository.cs b/TickAPI/TickAPI/Events/Repositories/EventRepository.cs index bfd667e..e06d03e 100644 --- a/TickAPI/TickAPI/Events/Repositories/EventRepository.cs +++ b/TickAPI/TickAPI/Events/Repositories/EventRepository.cs @@ -75,4 +75,26 @@ public async Task> GetEventByIdAndOrganizerAsync(Guid eventId, Org } return Result.Success(ev); } + + public async Task> GetEventRevenue(Guid eventId) + { + var query = from tickets in _tickApiDbContext.Tickets + join _ticketTypes in _tickApiDbContext.TicketTypes on tickets.Type.Id equals _ticketTypes.Id + join events in _tickApiDbContext.Events on _ticketTypes.Event.Id equals events.Id + where events.Id == eventId + select new { price = _ticketTypes.Price }; + var val = await query.SumAsync(x => x.price); + return Result.Success(val); + } + + public async Task> GetEventSoldTicketsCount(Guid eventId) + { + var query = from tickets in _tickApiDbContext.Tickets + join _ticketTypes in _tickApiDbContext.TicketTypes on tickets.Type.Id equals _ticketTypes.Id + join events in _tickApiDbContext.Events on _ticketTypes.Event.Id equals events.Id + where events.Id == eventId + select new { price = _ticketTypes.Price }; + var val = await query.CountAsync(); + return Result.Success(val); + } } \ No newline at end of file diff --git a/TickAPI/TickAPI/Events/Services/EventService.cs b/TickAPI/TickAPI/Events/Services/EventService.cs index a29c419..7b8fa3b 100644 --- a/TickAPI/TickAPI/Events/Services/EventService.cs +++ b/TickAPI/TickAPI/Events/Services/EventService.cs @@ -184,6 +184,20 @@ public async Task> GetEventDetailsAsync(Guid return Result.Success(details); } + public async Task> GetEventDetailsOrganizerAsync(Guid eventId) + { + var details = await GetEventDetailsAsync(eventId); + if (details.IsError) + { + return Result.PropagateError(details); + } + + var val = await _eventRepository.GetEventRevenue(eventId); + var count = await _eventRepository.GetEventSoldTicketsCount(eventId); + var ret = new GetEventDetailsOrganizerResponseDto(details.Value!, val.Value!, count.Value!); + return Result.Success(ret); + } + public async Task> EditEventAsync(Organizer organizer, Guid eventId, string name, string description, DateTime startDate, DateTime endDate, uint? minimumAge, CreateAddressDto editAddress, List categories, EventStatus eventStatus) { From 91002dbeb082cb8315bfa8e82abb0a63c00e8ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw?= <62651497+staszkiet@users.noreply.github.com> Date: Sun, 8 Jun 2025 20:33:56 +0200 Subject: [PATCH 2/3] Change sold ticket count --- TickAPI/TickAPI/Events/Repositories/EventRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TickAPI/TickAPI/Events/Repositories/EventRepository.cs b/TickAPI/TickAPI/Events/Repositories/EventRepository.cs index e06d03e..3217607 100644 --- a/TickAPI/TickAPI/Events/Repositories/EventRepository.cs +++ b/TickAPI/TickAPI/Events/Repositories/EventRepository.cs @@ -93,7 +93,7 @@ public async Task> GetEventSoldTicketsCount(Guid eventId) join _ticketTypes in _tickApiDbContext.TicketTypes on tickets.Type.Id equals _ticketTypes.Id join events in _tickApiDbContext.Events on _ticketTypes.Event.Id equals events.Id where events.Id == eventId - select new { price = _ticketTypes.Price }; + select new { id = tickets.Id }; var val = await query.CountAsync(); return Result.Success(val); } From 5fbf094c349da8a0b23d4ab5c9cc3f5b0ada84af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw?= <62651497+staszkiet@users.noreply.github.com> Date: Sun, 8 Jun 2025 20:36:40 +0200 Subject: [PATCH 3/3] Get rid of result in calls without errors --- TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs | 4 ++-- TickAPI/TickAPI/Events/Repositories/EventRepository.cs | 8 ++++---- TickAPI/TickAPI/Events/Services/EventService.cs | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs b/TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs index f7d1127..4a2103e 100644 --- a/TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs +++ b/TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs @@ -13,6 +13,6 @@ public interface IEventRepository public Task> GetEventByIdAsync(Guid eventId); public Task SaveEventAsync(Event ev); public Task> GetEventByIdAndOrganizerAsync(Guid eventId, Organizer organizer); - public Task> GetEventRevenue(Guid eventId); - public Task> GetEventSoldTicketsCount(Guid eventId); + public Task GetEventRevenue(Guid eventId); + public Task GetEventSoldTicketsCount(Guid eventId); } \ No newline at end of file diff --git a/TickAPI/TickAPI/Events/Repositories/EventRepository.cs b/TickAPI/TickAPI/Events/Repositories/EventRepository.cs index 3217607..60c95aa 100644 --- a/TickAPI/TickAPI/Events/Repositories/EventRepository.cs +++ b/TickAPI/TickAPI/Events/Repositories/EventRepository.cs @@ -76,7 +76,7 @@ public async Task> GetEventByIdAndOrganizerAsync(Guid eventId, Org return Result.Success(ev); } - public async Task> GetEventRevenue(Guid eventId) + public async Task GetEventRevenue(Guid eventId) { var query = from tickets in _tickApiDbContext.Tickets join _ticketTypes in _tickApiDbContext.TicketTypes on tickets.Type.Id equals _ticketTypes.Id @@ -84,10 +84,10 @@ join events in _tickApiDbContext.Events on _ticketTypes.Event.Id equals events.I where events.Id == eventId select new { price = _ticketTypes.Price }; var val = await query.SumAsync(x => x.price); - return Result.Success(val); + return val; } - public async Task> GetEventSoldTicketsCount(Guid eventId) + public async Task GetEventSoldTicketsCount(Guid eventId) { var query = from tickets in _tickApiDbContext.Tickets join _ticketTypes in _tickApiDbContext.TicketTypes on tickets.Type.Id equals _ticketTypes.Id @@ -95,6 +95,6 @@ join events in _tickApiDbContext.Events on _ticketTypes.Event.Id equals events.I where events.Id == eventId select new { id = tickets.Id }; var val = await query.CountAsync(); - return Result.Success(val); + return val; } } \ No newline at end of file diff --git a/TickAPI/TickAPI/Events/Services/EventService.cs b/TickAPI/TickAPI/Events/Services/EventService.cs index 7b8fa3b..e6cd0cf 100644 --- a/TickAPI/TickAPI/Events/Services/EventService.cs +++ b/TickAPI/TickAPI/Events/Services/EventService.cs @@ -194,7 +194,7 @@ public async Task> GetEventDetailsOr var val = await _eventRepository.GetEventRevenue(eventId); var count = await _eventRepository.GetEventSoldTicketsCount(eventId); - var ret = new GetEventDetailsOrganizerResponseDto(details.Value!, val.Value!, count.Value!); + var ret = new GetEventDetailsOrganizerResponseDto(details.Value!, val, count); return Result.Success(ret); }