using Contracts.DTO; using Contracts.Repositories; using Contracts.SearchModels; using Infrastructure.Support.Mappers; using Microsoft.EntityFrameworkCore; namespace Infrastructure.Repositories; public class SpendingPlanRepo : ISpendingPlanRepo { public readonly IDbContextFactory _factory; public SpendingPlanRepo(IDbContextFactory factory) { _factory = factory; } public async Task Create(SpendingPlanDto dto) { using var context = _factory.CreateDbContext(); var plan = await context.SpendingPlans.AddAsync(dto.ToModel()); await context.SaveChangesAsync(); return plan.Entity.ToDto(); } public async Task Delete(SpendingPlanSearch search) { using var context = _factory.CreateDbContext(); var plan = await context.SpendingPlans.FirstOrDefaultAsync(x => x.Id == search.Id); if (plan == null) { return null; } context.SpendingPlans.Remove(plan); await context.SaveChangesAsync(); return plan.ToDto(); } public async Task Get(SpendingPlanSearch search) { using var context = _factory.CreateDbContext(); var plan = await context.SpendingPlans.FirstOrDefaultAsync(x => x.Id == search.Id); return plan?.ToDto(); } public async Task> GetList(SpendingPlanSearch? search = null) { using var context = _factory.CreateDbContext(); var query = context.SpendingPlans.AsQueryable(); if (search != null) { if (search.Id != null) { query = query.Where(x => x.Id == search.Id); } } return await query.Select(x => x.ToDto()).ToListAsync(); } public async Task Update(SpendingPlanDto dto) { using var context = _factory.CreateDbContext(); var plan = await context.SpendingPlans.FirstOrDefaultAsync(x => x.Id == dto.Id); if (plan == null) { return null; } plan.Update(dto); context.SpendingPlans.Update(plan); await context.SaveChangesAsync(); return plan.ToDto(); } }