Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions TickAPI/TickAPI/Events/Abstractions/IEventRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ public interface IEventRepository
public Task<Result<Event>> GetEventByIdAsync(Guid eventId);
public Task<Result> SaveEventAsync(Event ev);
public Task<Result<Event>> GetEventByIdAndOrganizerAsync(Guid eventId, Organizer organizer);
public Task<decimal> GetEventRevenue(Guid eventId);
public Task<int> GetEventSoldTicketsCount(Guid eventId);
}
1 change: 1 addition & 0 deletions TickAPI/TickAPI/Events/Abstractions/IEventService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,5 @@ public Task<Result<Event>> CreateNewEventAsync(string name, string description,
public Task<Result<GetEventDetailsResponseDto>> GetEventDetailsAsync(Guid eventId);
public Task<Result<Event>> EditEventAsync(Organizer organizer, Guid eventId, string name, string description, DateTime startDate, DateTime endDate, uint? minimumAge, CreateAddressDto editAddress, List<EditEventCategoryDto> categories, EventStatus eventStatus);
public Task<Result> SendMessageToParticipants(Organizer organizer, Guid eventId, string subject, string message);
public Task<Result<GetEventDetailsOrganizerResponseDto>> GetEventDetailsOrganizerAsync(Guid eventId);
}
8 changes: 8 additions & 0 deletions TickAPI/TickAPI/Events/Controllers/EventsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,14 @@ public async Task<ActionResult<GetEventDetailsResponseDto>> GetEventDetails([Fro
return eventDetailsResult.ToObjectResult();
}

[AuthorizeWithPolicy(AuthPolicies.VerifiedOrganizerPolicy)]
[HttpGet("organizer/{id:guid}")]
public async Task<ActionResult<GetEventDetailsOrganizerResponseDto>> GetEventDetailsOrganizer([FromRoute] Guid id)
{
var eventDetailsResult = await _eventService.GetEventDetailsOrganizerAsync(id);
return eventDetailsResult.ToObjectResult();
}

[AuthorizeWithPolicy(AuthPolicies.VerifiedOrganizerPolicy)]
[HttpPatch("{id:guid}")]
public async Task<ActionResult<EditEventResponseDto>> EditEvent([FromRoute] Guid id, [FromBody] EditEventDto request)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace TickAPI.Events.DTOs.Response;

public record GetEventDetailsOrganizerResponseDto(
GetEventDetailsResponseDto EventDetails,
decimal Revenue,
int SoldTicketsCount
);
22 changes: 22 additions & 0 deletions TickAPI/TickAPI/Events/Repositories/EventRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,26 @@ public async Task<Result<Event>> GetEventByIdAndOrganizerAsync(Guid eventId, Org
}
return Result<Event>.Success(ev);
}

public async Task<decimal> 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<int> 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;
}
}
14 changes: 14 additions & 0 deletions TickAPI/TickAPI/Events/Services/EventService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,20 @@ public async Task<Result<GetEventDetailsResponseDto>> GetEventDetailsAsync(Guid
return Result<GetEventDetailsResponseDto>.Success(details);
}

public async Task<Result<GetEventDetailsOrganizerResponseDto>> GetEventDetailsOrganizerAsync(Guid eventId)
{
var details = await GetEventDetailsAsync(eventId);
if (details.IsError)
{
return Result<GetEventDetailsOrganizerResponseDto>.PropagateError(details);
}

var val = await _eventRepository.GetEventRevenue(eventId);
var count = await _eventRepository.GetEventSoldTicketsCount(eventId);
var ret = new GetEventDetailsOrganizerResponseDto(details.Value!, val, count);
return Result<GetEventDetailsOrganizerResponseDto>.Success(ret);
}

public async Task<Result<Event>> EditEventAsync(Organizer organizer, Guid eventId, string name, string description, DateTime startDate, DateTime endDate, uint? minimumAge, CreateAddressDto editAddress, List<EditEventCategoryDto> categories,
EventStatus eventStatus)
{
Expand Down
Loading