diff --git a/TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs b/TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs index a7e4cb1..4a2103e 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..60c95aa 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 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 { id = tickets.Id }; + var val = await query.CountAsync(); + 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 a29c419..e6cd0cf 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, count); + 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) {