100 lines
4.0 KiB
C#
100 lines
4.0 KiB
C#
using Fitness_core_BE.DTOs.PaymentsEnablement;
|
|
using Fitness_core_BE.Exceptions;
|
|
using Fitness_core_BE.Helpers;
|
|
using Fitness_core_BE.Interfaces.Services;
|
|
using Fitness_core_BE.Models.IOs;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using static Fitness_core_BE.Helpers.JwtMiddleware;
|
|
using static Fitness_core_BE.Helpers.ApiResponseHelper;
|
|
|
|
namespace Fitness_core_BE.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("api/admin")]
|
|
[CustomMiddleware]
|
|
[TenantResolution]
|
|
public class AdminController : ControllerBase
|
|
{
|
|
private readonly IPayoutKycReviewService _kycReview;
|
|
private readonly IAdminClientDirectoryService _clientDirectory;
|
|
private readonly UserRoleHelper _userRoleHelper;
|
|
private readonly IAdminSuggestionService _suggestions;
|
|
|
|
public AdminController(
|
|
IPayoutKycReviewService kycReview,
|
|
IAdminClientDirectoryService clientDirectory,
|
|
UserRoleHelper userRoleHelper,
|
|
IAdminSuggestionService suggestions)
|
|
{
|
|
_kycReview = kycReview;
|
|
_clientDirectory = clientDirectory;
|
|
_userRoleHelper = userRoleHelper;
|
|
_suggestions = suggestions;
|
|
}
|
|
|
|
[HttpGet("payout-kyc")]
|
|
public async Task<ActionResult<ApiResponse<List<ClientPayoutKycDto>>>> ListKyc([FromQuery] string? status)
|
|
{
|
|
return Response(await _kycReview.ListAsync(status));
|
|
}
|
|
|
|
[HttpGet("payout-kyc/{clientId:guid}")]
|
|
public async Task<ActionResult<ApiResponse<ClientPayoutKycDto>>> GetKyc(Guid clientId)
|
|
{
|
|
return Response(await _kycReview.GetByClientIdAsync(clientId));
|
|
}
|
|
|
|
[HttpPatch("payout-kyc/{clientId:guid}/status")]
|
|
public async Task<ActionResult<ApiResponse<ClientPayoutKycDto>>> ReviewKyc(Guid clientId, [FromBody] ReviewPayoutKycRequest request)
|
|
{
|
|
return Response(await _kycReview.ReviewAsync(clientId, request, HttpContext));
|
|
}
|
|
|
|
[HttpGet("clients")]
|
|
public async Task<ActionResult<ApiResponse<PagedResult<ClientSummary>>>> ListClients([FromQuery] ClientDirectoryQuery query)
|
|
{
|
|
return Response(await _clientDirectory.ListAsync(query));
|
|
}
|
|
|
|
[HttpGet("clients/{id:guid}")]
|
|
public async Task<ActionResult<ApiResponse<object>>> GetClient(Guid id)
|
|
{
|
|
return Response(await _clientDirectory.GetByIdAsync(id));
|
|
}
|
|
|
|
[HttpPost("clients/{id:guid}/pairing-code")]
|
|
public async Task<ActionResult<ApiResponse<PairingCodeResult>>> GeneratePairingCode(Guid id)
|
|
{
|
|
return Response(await _clientDirectory.GeneratePairingCodeAsync(id));
|
|
}
|
|
|
|
[HttpPost("clients/{id:guid}/resend-welcome-email")]
|
|
public async Task<ActionResult<ApiResponse<object>>> ResendWelcomeEmail(Guid id)
|
|
{
|
|
await _clientDirectory.ResendWelcomeEmailAsync(id, HttpContext);
|
|
return Response<object>(new { sent = true });
|
|
}
|
|
|
|
[HttpGet("clients/{id:guid}/access-devices")]
|
|
public async Task<ActionResult<ApiResponse<AdminClientDevicesResult>>> GetAccessDevices(Guid id)
|
|
{
|
|
return Response(await _clientDirectory.GetDevicesAsync(id));
|
|
}
|
|
|
|
// Platform plans are global templates (no FKClientId). Mobile customers see them
|
|
// in Suggestions in addition to templates created by their own gym.
|
|
[HttpGet("suggestions")]
|
|
public async Task<ActionResult<ApiResponse<object>>> ListSuggestions()
|
|
=> Response(await _suggestions.ListAsync());
|
|
|
|
[HttpPost("suggestions/workouts")]
|
|
public async Task<ActionResult<ApiResponse<object>>> CreateWorkoutSuggestion([FromBody] AdminWorkoutSuggestionRequest request)
|
|
=> Response(await _suggestions.CreateWorkoutAsync(request, HttpContext));
|
|
|
|
[HttpPost("suggestions/meals")]
|
|
public async Task<ActionResult<ApiResponse<object>>> CreateMealSuggestion([FromBody] AdminMealSuggestionRequest request)
|
|
=> Response(await _suggestions.CreateMealAsync(request, HttpContext));
|
|
}
|
|
|
|
}
|