using MemberCenter.Application.Abstractions; using MemberCenter.Application.Models.Admin; using MemberCenter.Domain.Entities; using MemberCenter.Infrastructure.Persistence; using Microsoft.EntityFrameworkCore; namespace MemberCenter.Infrastructure.Services; public sealed class TenantService : ITenantService { private readonly MemberCenterDbContext _dbContext; public TenantService(MemberCenterDbContext dbContext) { _dbContext = dbContext; } public async Task> ListAsync() { var tenants = await _dbContext.Tenants.ToListAsync(); return tenants.Select(MapTenant).ToList(); } public async Task GetAsync(Guid id) { var tenant = await _dbContext.Tenants.FindAsync(id); return tenant is null ? null : MapTenant(tenant); } public async Task CreateAsync(string name, List domains, string status) { var tenant = new Tenant { Id = Guid.NewGuid(), Name = name, Domains = domains, Status = status }; _dbContext.Tenants.Add(tenant); await _dbContext.SaveChangesAsync(); return MapTenant(tenant); } public async Task UpdateAsync(Guid id, string name, List domains, string status) { var tenant = await _dbContext.Tenants.FindAsync(id); if (tenant is null) { return null; } tenant.Name = name; tenant.Domains = domains; tenant.Status = status; await _dbContext.SaveChangesAsync(); return MapTenant(tenant); } public async Task DeleteAsync(Guid id) { var tenant = await _dbContext.Tenants.FindAsync(id); if (tenant is null) { return false; } _dbContext.Tenants.Remove(tenant); await _dbContext.SaveChangesAsync(); return true; } private static TenantDto MapTenant(Tenant tenant) { return new TenantDto(tenant.Id, tenant.Name, tenant.Domains, tenant.Status); } }