using BMA.EHR.Application.Repositories; using BMA.EHR.Application.Repositories.MessageQueue; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.MetaData; using BMA.EHR.Domain.Models.Notifications; using BMA.EHR.Domain.Models.Placement; using BMA.EHR.Domain.Models.Probation; 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; using System.Security.Cryptography; namespace BMA.EHR.Placement.Service.Controllers { [Route("api/v{version:apiVersion}/placement/noti")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("ระบบบรรจุ")] public class NotifyController : BaseController { private readonly PlacementRepository _repository; private readonly ApplicationDBContext _context; private readonly MinIOService _documentService; private readonly IHttpContextAccessor _httpContextAccessor; private readonly NotificationRepository _repositoryNoti; public NotifyController(PlacementRepository repository, ApplicationDBContext context, MinIOService documentService, NotificationRepository repositoryNoti, IHttpContextAccessor httpContextAccessor) { _repository = repository; _repositoryNoti = repositoryNoti; _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 [HttpPost()] public async Task> UpdatePropertyByUser([FromBody] NotiRequest req) { var profile = await _context.Profiles.FirstOrDefaultAsync(x => x.Id == req.ReceiverUserId); if (profile == null) return Error(GlobalMessages.DataNotFound); await _repositoryNoti.PushNotificationAsync( req.ReceiverUserId, req.Subject, req.Body, req.Payload, req.IsSendInbox, req.IsSendMail ); return Success(); } [HttpPost("cronjob")] public async Task> CornjobProbation([FromBody] NotiCronjobProbationRequest req) { var profile = await _context.Profiles.FirstOrDefaultAsync(x => x.Id == req.ReceiverUserId); if (profile == null) return Error(GlobalMessages.DataNotFound); _context.CronjobNotiProbations.Add(new CronjobNotiProbation { IsSendNoti = false, Subject = req.Subject, Body = req.Body, ReceiverUserId = req.ReceiverUserId, Payload = req.Payload, IsSendMail = req.IsSendMail, IsSendInbox = req.IsSendInbox, ReceiveDate = req.ReceiveDate, CreatedUserId = UserId ?? "System Administrator", CreatedFullName = FullName ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); await _context.SaveChangesAsync(); return Success(); } } }