using BMA.EHR.Application.Repositories; using BMA.EHR.Application.Repositories.MessageQueue; using BMA.EHR.Discipline.Service.Requests; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Models.Discipline; using BMA.EHR.Domain.Shared; using BMA.EHR.Infrastructure.Persistence; // using BMA.EHR.Placement.Service.Requests; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Swashbuckle.AspNetCore.Annotations; using System.Security.Claims; namespace BMA.EHR.DisciplineDirector.Service.Controllers { [Route("api/v{version:apiVersion}/discipline/director")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("กรรมการระบบวินัย")] public class DisciplineDirectorController : BaseController { private readonly DisciplineDbContext _context; private readonly MinIOService _documentService; private readonly IHttpContextAccessor _httpContextAccessor; public DisciplineDirectorController(DisciplineDbContext context, MinIOService documentService, IHttpContextAccessor httpContextAccessor) { // _repository = repository; _context = context; _documentService = documentService; _httpContextAccessor = httpContextAccessor; } #region " Properties " private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; #endregion /// /// list รายการกรรมการระบบวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet()] public async Task> GetDiscipline(int page = 1, int pageSize = 25, string keyword = "") { var data_search = (from x in _context.DisciplineDirectors.Include(x => x.DisciplineInvestigate_Directors).Include(x => x.DisciplineDisciplinary_DirectorInvestigates) where x.Prefix.Contains(keyword) || x.FirstName.Contains(keyword) || x.LastName.Contains(keyword) || x.Position.Contains(keyword) || x.Email.Contains(keyword) || x.Phone.Contains(keyword) select x).ToList(); var data = data_search .Select(x => new { Id = x.Id, Prefix = x.Prefix, FirstName = x.FirstName, LastName = x.LastName, Position = x.Position, Email = x.Email, Phone = x.Phone, TotalInvestigate = x.DisciplineInvestigate_Directors.Count(), TotalDisciplinary = x.DisciplineDisciplinary_DirectorInvestigates.Count(), }) .Skip((page - 1) * pageSize) .Take(pageSize) .ToList(); return Success(new { data, total = data_search.Count() }); } /// /// get รายการกรรมการระบบวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{id:guid}")] public async Task> GetByDiscipline(Guid id) { var data = await _context.DisciplineDirectors .Select(x => new { Id = x.Id, Prefix = x.Prefix, FirstName = x.FirstName, LastName = x.LastName, Position = x.Position, Email = x.Email, Phone = x.Phone, TotalInvestigate = x.DisciplineInvestigate_Directors.Count(), TotalDisciplinary = x.DisciplineDisciplinary_DirectorInvestigates.Count(), }) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), StatusCodes.Status404NotFound); return Success(data); } /// /// สร้างรายการกรรมการระบบวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost()] public async Task> CreateDiscipline([FromBody] DisciplineDirectorRequest req) { var dataDup = await _context.DisciplineDirectors.Where(x => x.FirstName == req.firstName && x.LastName == req.lastName).FirstOrDefaultAsync(); if (dataDup != null) return Error("ชื่อกรรมการนี้มีอยู่ในระบบแล้ว", StatusCodes.Status404NotFound); var disciplineDirector = new Domain.Models.Discipline.DisciplineDirector { Prefix = req.prefix, FirstName = req.firstName, LastName = req.lastName, Position = req.position, Email = req.email, Phone = req.phone, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.DisciplineDirectors.AddAsync(disciplineDirector); await _context.SaveChangesAsync(); return Success(); } /// /// แก้ไขรายการกรรมการระบบวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("{id:guid}")] public async Task> UpdateDiscipline(Guid id, [FromBody] DisciplineDirectorRequest req) { var dataDup = await _context.DisciplineDirectors.Where(x => x.FirstName == req.firstName && x.LastName == req.lastName && x.Id != id).FirstOrDefaultAsync(); if (dataDup != null) return Error("ชื่อกรรมการนี้มีอยู่ในระบบแล้ว", StatusCodes.Status404NotFound); var data = await _context.DisciplineDirectors.Where(x => x.Id == id).FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), StatusCodes.Status404NotFound); data.Prefix = req.prefix; data.FirstName = req.firstName; data.LastName = req.lastName; data.Position = req.position; data.Email = req.email; data.Phone = req.phone; data.LastUpdateFullName = FullName ?? "System Administrator"; data.LastUpdateUserId = UserId ?? ""; data.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(data); } /// /// ลบรายการกรรมการระบบวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("{id:guid}")] public async Task> DeleteDiscipline(Guid id) { var data = await _context.DisciplineDirectors.Where(x => x.Id == id).FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), StatusCodes.Status404NotFound); _context.DisciplineDirectors.Remove(data); await _context.SaveChangesAsync(); return Success(); } /// /// ประวัติการสืบสวน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("investigate/{id:guid}")] public async Task> GetHistoryDisciplineInvestigate(Guid id) { var director = await _context.DisciplineDirectors.Where(x => x.Id == id).FirstOrDefaultAsync(); if (director == null) return Error(new Exception(GlobalMessages.DataNotFound), StatusCodes.Status404NotFound); var data = await _context.DisciplineInvestigates .Where(x => x.DisciplineInvestigate_Directors .Where(x => x.DisciplineDirector == director) .FirstOrDefault() != null ) .Select(x => new { Title = x.Title, Director = x.DisciplineInvestigate_Directors.Select(y => new { CommandNo = y.CommandNo, Duty = y.Duty, Prefix = y.DisciplineDirector.Prefix, FirstName = y.DisciplineDirector.FirstName, LastName = y.DisciplineDirector.LastName, }), }) .ToListAsync(); return Success(data); } /// /// ประวัติการสอบสวน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("disciplinary/{id:guid}")] public async Task> GetHistoryDisciplineDisciplinary(Guid id) { var director = await _context.DisciplineDirectors.Where(x => x.Id == id).FirstOrDefaultAsync(); if (director == null) return Error(new Exception(GlobalMessages.DataNotFound), StatusCodes.Status404NotFound); var data = await _context.DisciplineDisciplinarys .Where(x => x.DisciplineDisciplinary_DirectorInvestigates .Where(x => x.DisciplineDirector == director) .FirstOrDefault() != null ) .Select(x => new { Title = x.Title, Director = x.DisciplineDisciplinary_DirectorInvestigates.Select(y => new { CommandNo = y.CommandNo, Duty = y.Duty, Prefix = y.DisciplineDirector.Prefix, FirstName = y.DisciplineDirector.FirstName, LastName = y.DisciplineDirector.LastName, }), }) .ToListAsync(); return Success(data); } } }