using BMA.EHR.Recurit.Exam.Service.Data; using BMA.EHR.Recurit.Exam.Service.Models; using Microsoft.EntityFrameworkCore; using System.Security.Claims; namespace BMA.EHR.Recurit.Exam.Service.Services { public class ProvinceService { #region " Fields " private readonly ApplicationDbContext _context; private readonly IHttpContextAccessor _httpContextAccessor; #endregion #region " Constructor and Destructor " public ProvinceService(ApplicationDbContext context, IHttpContextAccessor httpContextAccessor) { _context = context; _httpContextAccessor = httpContextAccessor; } #endregion #region " Properties " private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; #endregion #region " Methods " public async Task> GetsAsync(bool showAll = true) { if (showAll) return await _context.Provinces.AsQueryable() .OrderBy(d => d.Name) .ToListAsync(); else return await _context.Provinces.AsQueryable() .Where(p => p.IsActive) .OrderBy(d => d.Name) .ToListAsync(); } public async Task GetByIdAsync(Guid id) { return await _context.Provinces.FirstOrDefaultAsync(x => x.Id == id); } public async Task UpdateAsync(Guid id, Province updated) { var existData = await _context.Provinces.FirstOrDefaultAsync(x => x.Id == id); if (existData != null) { if (existData.Name != updated.Name) { existData.Name = updated.Name; existData.LastUpdatedAt = DateTime.Now; existData.LastUpdateUserId = UserId ?? ""; existData.LastUpdateFullName = FullName ?? ""; } if (existData.IsActive != updated.IsActive) { existData.IsActive = updated.IsActive; existData.LastUpdatedAt = DateTime.Now; existData.LastUpdateUserId = UserId ?? ""; existData.LastUpdateFullName = FullName ?? ""; } await _context.SaveChangesAsync(); } } public async Task CreateAsync(Province inserted) { inserted.CreatedUserId = UserId ?? ""; inserted.CreatedFullName = FullName ?? "System Administrator"; inserted.CreatedAt = DateTime.Now; inserted.LastUpdatedAt = DateTime.Now; inserted.LastUpdateFullName = FullName ?? "System Administrator"; inserted.LastUpdateUserId = UserId ?? ""; await _context.Provinces.AddAsync(inserted); await _context.SaveChangesAsync(); } #endregion } }