From ffac27ef76d6b6d5c25b16b924269627b0a47f9d Mon Sep 17 00:00:00 2001 From: Kittapath Date: Fri, 8 Sep 2023 12:48:17 +0700 Subject: [PATCH] add conjob insignia --- .../Reports/InsigniaReportRepository.cs | 21 ++++++++++++ .../Controllers/InsigniaPeriodController.cs | 17 ---------- .../Filters/CustomAuthorizeFilter.cs | 16 +++++++++ BMA.EHR.Insignia.Service/Program.cs | 34 ++++++++++++++++++- 4 files changed, 70 insertions(+), 18 deletions(-) create mode 100644 BMA.EHR.Insignia.Service/Filters/CustomAuthorizeFilter.cs diff --git a/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs b/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs index 25ac2f0c..1f985c73 100644 --- a/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs @@ -1,4 +1,5 @@ using BMA.EHR.Application.Common.Interfaces; +using BMA.EHR.Application.Repositories.MessageQueue; using BMA.EHR.Application.Responses; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.HR; @@ -19,6 +20,7 @@ namespace BMA.EHR.Application.Repositories.Reports private readonly IApplicationDBContext _dbContext; private readonly IWebHostEnvironment _hostingEnvironment; private readonly OrganizationCommonRepository _organizationCommonRepository; + private readonly NotificationRepository _repositoryNoti; private readonly string CRLF = "\r\n"; #endregion @@ -27,10 +29,12 @@ namespace BMA.EHR.Application.Repositories.Reports public InsigniaReportRepository(IApplicationDBContext dbContext, OrganizationCommonRepository organizationCommonRepository, + NotificationRepository repositoryNoti, IWebHostEnvironment hostEnvironment) { _dbContext = dbContext; _hostingEnvironment = hostEnvironment; + _repositoryNoti = repositoryNoti; _organizationCommonRepository = organizationCommonRepository; } @@ -740,6 +744,23 @@ namespace BMA.EHR.Application.Repositories.Reports return data; } + public async Task NotifyInsignia() + { + var insigniaPeriods = await _dbContext.Set() + .AsQueryable() + .ToListAsync(); + foreach (var insigniaPeriod in insigniaPeriods) + { + if (insigniaPeriod.StartDate.AddDays(-insigniaPeriod.Amount).Date == DateTime.Now.Date) + { + await _repositoryNoti.PushNotificationAsync( + Guid.Parse("08db721d-ade4-480e-8d84-0853946a0ea5"), + $"แจ้งเตือนรอบการเสนอขอ {insigniaPeriod.Name} รอบที่{insigniaPeriod.Round}", + $"แจ้งเตือนรอบการเสนอขอ {insigniaPeriod.Name} รอบที่{insigniaPeriod.Round}" + ); + } + } + } #endregion } diff --git a/BMA.EHR.Insignia.Service/Controllers/InsigniaPeriodController.cs b/BMA.EHR.Insignia.Service/Controllers/InsigniaPeriodController.cs index 36eccf03..8bddd506 100644 --- a/BMA.EHR.Insignia.Service/Controllers/InsigniaPeriodController.cs +++ b/BMA.EHR.Insignia.Service/Controllers/InsigniaPeriodController.cs @@ -290,22 +290,5 @@ namespace BMA.EHR.Insignia.Service.Controllers return Success(); } - - public async Task NotifyInsignia() - { - var insigniaPeriods = await _context.InsigniaPeriods.AsQueryable() - .ToListAsync(); - foreach (var insigniaPeriod in insigniaPeriods) - { - if (insigniaPeriod.StartDate.AddDays(-insigniaPeriod.Amount).Date == DateTime.Now.Date) - { - await _repositoryNoti.PushNotificationAsync( - Guid.Parse("08db721d-ae67-4ed1-8b3c-490f44a73e65"), - $"แจ้งเตือนรอบการเสนอขอ {insigniaPeriod.Name} รอบที่{insigniaPeriod.Round}", - $"แจ้งเตือนรอบการเสนอขอ {insigniaPeriod.Name} รอบที่{insigniaPeriod.Round}" - ); - } - } - } } } \ No newline at end of file diff --git a/BMA.EHR.Insignia.Service/Filters/CustomAuthorizeFilter.cs b/BMA.EHR.Insignia.Service/Filters/CustomAuthorizeFilter.cs new file mode 100644 index 00000000..7ac8fc51 --- /dev/null +++ b/BMA.EHR.Insignia.Service/Filters/CustomAuthorizeFilter.cs @@ -0,0 +1,16 @@ +using System.Diagnostics.CodeAnalysis; +using Hangfire.Dashboard; + +namespace BMA.EHR.Insignia.Service.Filters +{ + public class CustomAuthorizeFilter : IDashboardAuthorizationFilter + { + public bool Authorize([NotNull] DashboardContext context) + { + //var httpcontext = context.GetHttpContext(); + //return httpcontext.User.Identity.IsAuthenticated; + return true; + } + + } +} \ No newline at end of file diff --git a/BMA.EHR.Insignia.Service/Program.cs b/BMA.EHR.Insignia.Service/Program.cs index ce9a1098..e4826092 100644 --- a/BMA.EHR.Insignia.Service/Program.cs +++ b/BMA.EHR.Insignia.Service/Program.cs @@ -1,11 +1,14 @@ using BMA.EHR.Application; +using BMA.EHR.Application.Repositories.Reports; using BMA.EHR.Domain.Middlewares; using BMA.EHR.Infrastructure; using BMA.EHR.Infrastructure.Persistence; using BMA.EHR.Insignia.Service; using BMA.EHR.Insignia.Service.Controllers; +using BMA.EHR.Insignia.Service.Filters; using Hangfire; using Hangfire.Common; +using Hangfire.MySql; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ApiExplorer; @@ -18,6 +21,7 @@ using Serilog.Exceptions; using Serilog.Sinks.Elasticsearch; using System.Reflection; using System.Text; +using System.Transactions; var builder = WebApplication.CreateBuilder(args); { @@ -92,7 +96,31 @@ var builder = WebApplication.CreateBuilder(args); builder.Services.AddSwaggerGen(); builder.Services.ConfigureOptions(); + // Register DbContext + var defaultConnection = builder.Configuration.GetConnectionString("DefaultConnection"); + builder.Services.AddDbContext(options => + options.UseMySql(defaultConnection, ServerVersion.AutoDetect(defaultConnection))); builder.Services.AddHealthChecks(); + // Add Hangfire services. + builder.Services.AddHangfire(configuration => configuration + .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) + .UseSimpleAssemblyNameTypeSerializer() + .UseRecommendedSerializerSettings() + .UseStorage( + new MySqlStorage( + defaultConnection, + new MySqlStorageOptions + { + TransactionIsolationLevel = IsolationLevel.ReadCommitted, + QueuePollInterval = TimeSpan.FromSeconds(15), + JobExpirationCheckInterval = TimeSpan.FromHours(1), + CountersAggregateInterval = TimeSpan.FromMinutes(5), + PrepareSchemaIfNecessary = true, + DashboardJobListLimit = 50000, + TransactionTimeout = TimeSpan.FromMinutes(1), + TablesPrefix = "Hangfire" + }))); + builder.Services.AddHangfireServer(); } var app = builder.Build(); @@ -123,10 +151,14 @@ var app = builder.Build(); app.UseStaticFiles(); app.MapControllers(); app.UseMiddleware(); + app.UseHangfireDashboard("/hangfire", new DashboardOptions() + { + Authorization = new[] { new CustomAuthorizeFilter() } + }); var manager = new RecurringJobManager(); if (manager != null) { - manager.AddOrUpdate("SendNotifyFirstRound", Job.FromExpression(x => x.NotifyInsignia()), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); + manager.AddOrUpdate("SendNotifyFirstRound", Job.FromExpression(x => x.NotifyInsignia()), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); } // apply migrations