first commit

This commit is contained in:
Dhananjaya99
2026-09-28 11:44:26 +05:30
parent 721743ae6b
commit bffc9b1686
424 changed files with 46474 additions and 0 deletions
+142
View File
@@ -0,0 +1,142 @@
using Fitness_core_BE.Helpers;
using Fitness_core_BE.Interfaces;
using Fitness_core_BE.Interfaces.Services;
using Fitness_core_BE.Models;
using Fitness_core_BE.Infra.UoW;
using System.Text.Json;
namespace Fitness_core_BE.Services.ClientInvoice
{
public class ClientInvoiceService : IClientInvoiceService
{
private readonly IClientInvoiceRepository _clientInvoiceRepository;
private readonly IUnitOfWork _uow;
public ClientInvoiceService(IClientInvoiceRepository clientInvoiceRepository, IUnitOfWork uow)
{
_clientInvoiceRepository = clientInvoiceRepository;
_uow = uow;
}
public async Task<object> CreateClientInvoiceFromSubscription(object payload, HttpContext httpContext)
{
await _uow.BeginAsync();
try
{
var data = DeserializePayload.Deserialize(payload);
if (!data!.ContainsKey("subscriptionId"))
{
throw new KeyNotFoundException("subscriptionId is required");
}
var subscriptionId = Guid.Parse(data["subscriptionId"].GetString()!);
var result = await _clientInvoiceRepository.CreateClientInvoiceFromSubscription(subscriptionId);
await _uow.CommitAsync();
return result;
}
catch
{
await _uow.RollbackAsync();
throw;
}
}
public async Task<object> GetClientInvoiceById(object payload, HttpContext httpContext)
{
var data = DeserializePayload.Deserialize(payload);
if (!data!.ContainsKey("clientInvoiceId"))
{
throw new KeyNotFoundException("clientInvoiceId is required");
}
var clientInvoiceId = Guid.Parse(data["clientInvoiceId"].GetString()!);
var clientInvoice = await _clientInvoiceRepository.GetClientInvoiceById(clientInvoiceId);
if (clientInvoice == null)
{
throw new KeyNotFoundException("ClientInvoice not found");
}
return clientInvoice;
}
public async Task<object> GetClientInvoicesByClientId(object payload, HttpContext httpContext)
{
var data = DeserializePayload.Deserialize(payload);
if (!data!.ContainsKey("clientId"))
{
throw new KeyNotFoundException("clientId is required");
}
var clientId = Guid.Parse(data["clientId"].GetString()!);
return await _clientInvoiceRepository.GetClientInvoicesByClientId(clientId);
}
public async Task<object> GetClientInvoicesByUserId(object payload, HttpContext httpContext)
{
var data = DeserializePayload.Deserialize(payload);
if (!data!.ContainsKey("userId"))
{
throw new KeyNotFoundException("userId is required");
}
var userId = Guid.Parse(data["userId"].GetString()!);
return await _clientInvoiceRepository.GetClientInvoicesByUserId(userId);
}
public async Task<object> UpdateClientInvoiceStatus(object payload, HttpContext httpContext)
{
await _uow.BeginAsync();
try
{
var data = DeserializePayload.Deserialize(payload);
if (!data!.ContainsKey("clientInvoiceId") || !data.ContainsKey("status"))
{
throw new KeyNotFoundException("clientInvoiceId and status are required");
}
var clientInvoiceId = Guid.Parse(data["clientInvoiceId"].GetString()!);
var status = data["status"].GetString()!;
// Validate status
var validStatuses = new[] { "Pending", "Paid", "Failed", "Cancelled", "Refunded" };
if (!validStatuses.Contains(status))
{
throw new InvalidOperationException($"Invalid status. Valid statuses are: {string.Join(", ", validStatuses)}");
}
var result = await _clientInvoiceRepository.UpdateClientInvoiceStatus(clientInvoiceId, status);
await _uow.CommitAsync();
return result;
}
catch
{
await _uow.RollbackAsync();
throw;
}
}
public async Task<object> CalculateClientInvoiceTotal(object payload, HttpContext httpContext)
{
var data = DeserializePayload.Deserialize(payload);
if (!data!.ContainsKey("clientInvoiceId"))
{
throw new KeyNotFoundException("clientInvoiceId is required");
}
var clientInvoiceId = Guid.Parse(data["clientInvoiceId"].GetString()!);
var clientInvoice = await _clientInvoiceRepository.GetClientInvoiceById(clientInvoiceId);
var total = clientInvoice?.Amount ?? 0;
return new { Total = total };
}
}
}