Stable run
continuous-integration/drone/pr Build is passing

This commit is contained in:
Khwezi Mngoma
2026-06-02 00:29:02 +02:00
parent f299e8952a
commit 3d506cffd1
5 changed files with 63 additions and 42 deletions
@@ -8,6 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="LiteCharms.Features.MidrandBooks" Version="1.64.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.8" /> <PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.8" />
<PackageReference Include="Mediator.SourceGenerator" Version="3.0.2"> <PackageReference Include="Mediator.SourceGenerator" Version="3.0.2">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
@@ -17,7 +18,7 @@
<!-- Lite Charms Libraries --> <!-- Lite Charms Libraries -->
<ItemGroup> <ItemGroup>
<PackageReference Include="LiteCharms.Features" Version="1.34.0" /> <PackageReference Include="LiteCharms.Features" Version="1.64.0" />
</ItemGroup> </ItemGroup>
<!-- Shared Global Usings --> <!-- Shared Global Usings -->
+8 -12
View File
@@ -1,15 +1,12 @@
using LiteCharms.Features.Extensions; using LiteCharms.Features.Extensions;
using LiteCharms.Features.Mediator; using LiteCharms.Features.Mediator;
using LiteCharms.Features.MidrandBooks.Extensions;
using LiteCharmsScheduler.Workers; using LiteCharmsScheduler.Workers;
using static LiteCharms.Features.Email.Extensions.Constants; using static LiteCharms.Features.Extensions.Quartz;
var builder = Host.CreateApplicationBuilder(args); var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddMediator(options => options.Assemblies = new List<AssemblyReference> builder.Services.AddMediator();
{
typeof(Program).Assembly,
typeof(LiteCharms.Features.Shop.Notifications.Events.ProcessEmailNotificationsEvent).Assembly
}.AsReadOnly());
builder.Services.AddScoped(typeof(IPipelineBehavior<,>), typeof(TelemetryPipelineBehavior<,>)); builder.Services.AddScoped(typeof(IPipelineBehavior<,>), typeof(TelemetryPipelineBehavior<,>));
builder.Services.AddScoped(typeof(IPipelineBehavior<,>), typeof(LoggingPipelineBehavior<,>)); builder.Services.AddScoped(typeof(IPipelineBehavior<,>), typeof(LoggingPipelineBehavior<,>));
@@ -17,19 +14,18 @@ builder.Services.AddScoped(typeof(IPipelineBehavior<,>), typeof(LoggingPipelineB
builder.Services.AddEmailServices(builder.Configuration); builder.Services.AddEmailServices(builder.Configuration);
builder.Services.AddEmailServiceBus(); builder.Services.AddEmailServiceBus();
builder.Services.AddSalesServiceBus();
builder.Services.AddGeneralServiceBus();
builder.Services.AddQuartzScheduler(ShopSchedulerName, builder.Configuration);
builder.Services.AddShopServices(); builder.Services.AddShopServices();
builder.Services.AddShopDatabase(builder.Configuration); builder.Services.AddHashServices(builder.Configuration);
builder.Services.AddMidrandShopDatabase(builder.Configuration);
builder.Services.AddQuartzScheduler(MidrandShopSchedulerName, builder.Configuration);
builder.Services.AddHostedService<JobWorker>(); builder.Services.AddHostedService<JobWorker>();
var host = builder.Build(); var host = builder.Build();
var schedulerFactory = host.Services.GetRequiredService<ISchedulerFactory>(); var schedulerFactory = host.Services.GetRequiredService<ISchedulerFactory>();
var scheduler = await schedulerFactory.GetScheduler(ShopSchedulerName); var scheduler = await schedulerFactory.GetScheduler(MidrandShopSchedulerName);
if (!scheduler!.IsStarted) if (!scheduler!.IsStarted)
await scheduler.Start(); await scheduler.Start();
+2 -13
View File
@@ -1,21 +1,10 @@
using LiteCharms.Features.Quartz.Abstractions; using LiteCharms.Features.Quartz.Abstractions;
using LiteCharms.Features.Shop.Notifications.Events;
namespace LiteCharmsScheduler.Workers namespace LiteCharmsScheduler.Workers
{ {
public class JobWorker(IJobOrchestrator jobOrchestrator, ILogger<JobWorker> logger, IConfiguration configuration) : BackgroundService public class JobWorker(IJobOrchestrator jobOrchestrator, ILogger<JobWorker> logger, IConfiguration configuration) : BackgroundService
{ {
protected override async Task ExecuteAsync(CancellationToken stoppingToken) protected override async Task ExecuteAsync(CancellationToken stoppingToken) =>
{ logger.LogInformation("Midrand Books jobs initialized");
string? emailProcessorCron = !string.IsNullOrWhiteSpace(configuration.GetSection("EmailProcessorCron").Value)
? configuration.GetSection("EmailProcessorCron").Value
: "0 */4 * * * ?";
var emailProcessorJob = ProcessEmailNotificationsEvent.Create();
await jobOrchestrator.ScheduleAsync(emailProcessorJob, emailProcessorCron!, stoppingToken);
logger.LogInformation("Startup jobs scheduled");
}
} }
} }
+10 -9
View File
@@ -1,18 +1,19 @@
{ {
"Email": { "HasherSettings": {
"Credentials": { "MinHashLength": 11
"Username": "shop@litecharms.co.za" },
}, "BookshopS3Settings": {
"Port": 465, "ServiceUrl": "http://192.168.1.177:30900",
"Host": "mail.litecharms.co.za", "Region": "garage",
"UseSsl": true "BucketName": "bookshop",
"CdnBaseUrl": "https://bookshop.cdn.khongisa.co.za"
}, },
"EmailProcessorCron": "0 */5 * * * ?",
"Monitoring": { "Monitoring": {
"ApiKey": "", "ApiKey": "",
"Address": "http://aspire-dashboard-service.aspire.svc.cluster.local:18889", "Address": "http://aspire-dashboard-service.aspire.svc.cluster.local:18889",
"ServiceName": "LiteCharms.LeadGenerator" "ServiceName": "MidrandBooks.DEV"
}, },
"EmailProcessorCron": "0 */5 * * * ?",
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {
"Default": "Information", "Default": "Information",
+41 -7
View File
@@ -18,6 +18,11 @@ data:
Email__Port: "465" Email__Port: "465"
Email__UseSsl: "true" Email__UseSsl: "true"
EmailProcessorCron: "0 */5 * * * ?" EmailProcessorCron: "0 */5 * * * ?"
HasherSettings__MinHashLength: "11"
BookshopS3Settings__ServiceUrl: "http://garage.garage.svc.cluster.local:3900"
BookshopS3Settings__Region: "garage"
BookshopS3Settings__BucketName: "bookshop"
BookshopS3Settings__CdnBaseUrl: "https://bookshop.cdn.khongisa.co.za"
--- ---
apiVersion: v1 apiVersion: v1
kind: Secret kind: Secret
@@ -31,6 +36,10 @@ data:
discord-webhook: aHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGkvd2ViaG9va3MvMTUwMDIzMzEyOTYwNzAzNjk3MC9KYzc5endwMjlxYWpLbmoyYkR3cm5GR0RJci11ZGIyV2JIUDZTYjdpT0hCTWpQSUY3Vkw5eUVHTkJUSXpSOVVWVzI0bQ== discord-webhook: aHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGkvd2ViaG9va3MvMTUwMDIzMzEyOTYwNzAzNjk3MC9KYzc5endwMjlxYWpLbmoyYkR3cm5GR0RJci11ZGIyV2JIUDZTYjdpT0hCTWpQSUY3Vkw5eUVHTkJUSXpSOVVWVzI0bQ==
aspire-apikey: bWMzRzYzSzJqNVpPRXNpMEFqTW9qTFRYbTFLRVpGY3R6SUlqU3dEaVRHdXQ4cUdTa1B1V3d4R1AxUmJzY0pVbw== aspire-apikey: bWMzRzYzSzJqNVpPRXNpMEFqTW9qTFRYbTFLRVpGY3R6SUlqU3dEaVRHdXQ4cUdTa1B1V3d4R1AxUmJzY0pVbw==
email-password: JFpTLWVJQGlYbTVNUCRhfg== email-password: JFpTLWVJQGlYbTVNUCRhfg==
hasher-salt: VEdsbmFIUWdRMmhoY20xekxDQk5hV1J5WVc1a1FtOXZhM01nYldGclpTQnNiM1J6SUc5bUlHMXZibVY1SUdGdVpDQmhjbVVnWVNCemRXTmpaWE56Wm5Wc0lIWnBjbUZzSUhOMGIzSjVJR2x1SUZOdmRYUm9JRUZtY21sallRPT0=
hasher-payfastpassphrase: OUdBSVIwdFdwaFgwcU8=
bookshop-s3-accesskey: R0s1MTRkMmNlOGRjNjkyMzdhMDVjMDFlZWY=
bookshop-s3-secretkey: ZWFhZmVkYTFhZWQ0MDllY2ZlNjA3MTRlY2RhNTQ5YjgyYmRmNWEzZGFmOWYxOGRkNjFmNjZiNDk3M2E2NDgyZQ==
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
@@ -75,7 +84,37 @@ spec:
envFrom: envFrom:
- configMapRef: - configMapRef:
name: scheduler-config name: scheduler-config
env: env:
- name: BookshopS3Settings__AccessKey
valueFrom:
secretKeyRef:
name: scheduler-secrets
key: bookshop-s3-accesskey
- name: BookshopS3Settings__SecretKey
valueFrom:
secretKeyRef:
name: scheduler-secrets
key: bookshop-s3-secretkey
- name: HasherSettings__Salt
valueFrom:
secretKeyRef:
name: scheduler-secrets
key: hasher-salt
- name: HasherSettings__PayfastPassphrase
valueFrom:
secretKeyRef:
name: scheduler-secrets
key: hasher-payfastpassphrase
- name: ConnectionStrings__PostgresMidrandBooks
valueFrom:
secretKeyRef:
name: scheduler-secrets
key: connection-string
- name: Monitoring__ApiKey
valueFrom:
secretKeyRef:
name: scheduler-secrets
key: aspire-apikey
- name: Email__Credentials__Password - name: Email__Credentials__Password
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -85,12 +124,7 @@ spec:
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: scheduler-secrets name: scheduler-secrets
key: connection-string-quartz key: connection-string-quartz
- name: ConnectionStrings__PostgresShop
valueFrom:
secretKeyRef:
name: scheduler-secrets
key: connection-string
- name: ConnectionStrings__DiscordShop - name: ConnectionStrings__DiscordShop
valueFrom: valueFrom:
secretKeyRef: secretKeyRef: