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
337 changes: 330 additions & 7 deletions TickAPI/TickAPI.Tests/Organizers/Services/OrganizerServiceTests.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ public interface IOrganizerRepository
Task<Result<Organizer>> GetOrganizerByEmailAsync(string organizerEmail);
Task AddNewOrganizerAsync(Organizer organizer);
Task<Result> VerifyOrganizerByEmailAsync(string organizerEmail);
IQueryable<Organizer> GetOrganizers();
}
6 changes: 5 additions & 1 deletion TickAPI/TickAPI/Organizers/Abstractions/IOrganizerService.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using TickAPI.Common.Results;
using TickAPI.Common.Pagination.Responses;
using TickAPI.Common.Results;
using TickAPI.Common.Results.Generic;
using TickAPI.Organizers.DTOs.Response;
using TickAPI.Organizers.Models;

namespace TickAPI.Organizers.Abstractions;
Expand All @@ -11,4 +13,6 @@ public interface IOrganizerService
public Task<Result<Organizer>> CreateNewOrganizerAsync(string email, string firstName, string lastName, string displayName);

public Task<Result> VerifyOrganizerByEmailAsync(string organizerEmail);

public Task<Result<PaginatedData<GetUnverifiedOrganizerResponseDto>>> GetUnverifiedOrganizersAsync(int page, int pageSize);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using TickAPI.Common.Auth.Attributes;
using TickAPI.Common.Auth.Enums;
using TickAPI.Common.Claims.Abstractions;
using TickAPI.Common.Pagination.Responses;
using TickAPI.Common.Results.Generic;
using TickAPI.Organizers.Abstractions;
using TickAPI.Organizers.DTOs.Request;
Expand Down Expand Up @@ -91,6 +92,14 @@ public async Task<ActionResult> VerifyOrganizer([FromBody] VerifyOrganizerDto re
return verifyOrganizerResult.ToObjectResult();
}

[AuthorizeWithPolicy(AuthPolicies.AdminPolicy)]
[HttpGet("unverified")]
public async Task<ActionResult<PaginatedData<GetUnverifiedOrganizerResponseDto>>> GetUnverifiedOrganizers([FromQuery] int page, [FromQuery] int pageSize)
{
var result = await _organizerService.GetUnverifiedOrganizersAsync(page, pageSize);
return result.ToObjectResult();
}

[AuthorizeWithPolicy(AuthPolicies.CreatedOrganizerPolicy)]
[HttpGet("about-me")]
public async Task<ActionResult<AboutMeOrganizerResponseDto>> AboutMe()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
public record AboutMeOrganizerResponseDto(
string Email,
string FirstName,
string LastName,
string? LastName,
string DisplayName,
bool IsVerified,
DateTime CreationDate
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace TickAPI.Organizers.DTOs.Response;

public record GetUnverifiedOrganizerResponseDto(
string Email,
string FirstName,
string? LastName,
string DisplayName
);
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,9 @@ public async Task<Result> VerifyOrganizerByEmailAsync(string organizerEmail)

return Result.Success();
}

public IQueryable<Organizer> GetOrganizers()
{
return _tickApiDbContext.Organizers;
}
}
22 changes: 20 additions & 2 deletions TickAPI/TickAPI/Organizers/Services/OrganizerService.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
using TickAPI.Common.Results;
using TickAPI.Common.Pagination.Abstractions;
using TickAPI.Common.Pagination.Responses;
using TickAPI.Common.Results;
using TickAPI.Common.Results.Generic;
using TickAPI.Common.Time.Abstractions;
using TickAPI.Events.Models;
using TickAPI.Organizers.Abstractions;
using TickAPI.Organizers.DTOs.Response;
using TickAPI.Organizers.Models;

namespace TickAPI.Organizers.Services;
Expand All @@ -11,11 +14,13 @@ public class OrganizerService : IOrganizerService
{
private readonly IOrganizerRepository _organizerRepository;
private readonly IDateTimeService _dateTimeService;
private readonly IPaginationService _paginationService;

public OrganizerService(IOrganizerRepository organizerRepository, IDateTimeService dateTimeService)
public OrganizerService(IOrganizerRepository organizerRepository, IDateTimeService dateTimeService, IPaginationService paginationService)
{
_organizerRepository = organizerRepository;
_dateTimeService = dateTimeService;
_paginationService = paginationService;
}

public async Task<Result<Organizer>> GetOrganizerByEmailAsync(string organizerEmail)
Expand Down Expand Up @@ -48,4 +53,17 @@ public async Task<Result> VerifyOrganizerByEmailAsync(string organizerEmail)
{
return await _organizerRepository.VerifyOrganizerByEmailAsync(organizerEmail);
}

public async Task<Result<PaginatedData<GetUnverifiedOrganizerResponseDto>>> GetUnverifiedOrganizersAsync(int page, int pageSize)
{
var unverifiedOrganizers = _organizerRepository.GetOrganizers().Where(o => !o.IsVerified);
var paginatedResult = await _paginationService.PaginateAsync(unverifiedOrganizers, pageSize, page);
if (paginatedResult.IsError)
{
return Result<PaginatedData<GetUnverifiedOrganizerResponseDto>>.PropagateError(paginatedResult);
}
var paginated = paginatedResult.Value!;
var mapped = _paginationService.MapData(paginated, (o) => new GetUnverifiedOrganizerResponseDto(o.Email, o.FirstName, o.LastName, o.DisplayName));
return Result<PaginatedData<GetUnverifiedOrganizerResponseDto>>.Success(mapped);
}
}
Loading