Skip to content

Commit

Permalink
Added equipment register export service
Browse files Browse the repository at this point in the history
  • Loading branch information
davewalker5 committed Dec 9, 2023
1 parent 7fe752a commit 8e40441
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/MusicCatalogue.Api/Entities/EquipmentExportWorkItem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System.Diagnostics.CodeAnalysis;

namespace MusicCatalogue.Api.Entities
{
[ExcludeFromCodeCoverage]
public class EquipmentExportWorkItem : BackgroundWorkItem
{
public string FileName { get; set; } = "";

public override string ToString()
{
return $"{base.ToString()}, FileName = {FileName}";
}
}
}
4 changes: 4 additions & 0 deletions src/MusicCatalogue.Api/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ public static void Main(string[] args)
builder.Services.AddSingleton<IBackgroundQueue<CatalogueExportWorkItem>, BackgroundQueue<CatalogueExportWorkItem>>();
builder.Services.AddHostedService<CatalogueExportService>();

// Add the equipment exporter hosted service
builder.Services.AddSingleton<IBackgroundQueue<EquipmentExportWorkItem>, BackgroundQueue<EquipmentExportWorkItem>>();
builder.Services.AddHostedService<EquipmentExportService>();

// Add the artist statistics exporter hosted service
builder.Services.AddSingleton<IBackgroundQueue<ArtistStatisticsExportWorkItem>, BackgroundQueue<ArtistStatisticsExportWorkItem>>();
builder.Services.AddHostedService<ArtistStatisticsExportService>();
Expand Down
46 changes: 46 additions & 0 deletions src/MusicCatalogue.Api/Services/EquipmentExportService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using Microsoft.Extensions.Options;
using MusicCatalogue.Api.Entities;
using MusicCatalogue.Api.Interfaces;
using MusicCatalogue.Entities.Config;
using MusicCatalogue.Entities.Interfaces;
using System.Diagnostics.CodeAnalysis;

namespace MusicCatalogue.Api.Services
{
[ExcludeFromCodeCoverage]
public class EquipmentExportService : BackgroundQueueProcessor<EquipmentExportWorkItem>
{
private readonly MusicApplicationSettings _settings;
public EquipmentExportService(
ILogger<BackgroundQueueProcessor<EquipmentExportWorkItem>> logger,
IBackgroundQueue<EquipmentExportWorkItem> queue,
IServiceScopeFactory serviceScopeFactory,
IOptions<MusicApplicationSettings> settings)
: base(logger, queue, serviceScopeFactory)
{
_settings = settings.Value;
}

/// <summary>
/// Export the equipment register
/// </summary>
/// <param name="item"></param>
/// <param name="factory"></param>
/// <returns></returns>
protected override async Task ProcessWorkItem(EquipmentExportWorkItem item, IMusicCatalogueFactory factory)
{
MessageLogger.LogInformation("Retrieving equipment records for export");

// Use the file extension to determine which exporter to use
var extension = Path.GetExtension(item.FileName).ToLower();
IEquipmentExporter? exporter = extension == ".xlsx" ? factory.EquipmentXlsxExporter : factory.EquipmentCsvExporter;

// Construct the full path to the export file
var filePath = Path.Combine(_settings.CatalogueExportPath, item.FileName);

// Export the equipment register
await exporter.Export(filePath);
MessageLogger.LogInformation("Equipment register export completed");
}
}
}

0 comments on commit 8e40441

Please sign in to comment.