Files
2026-03-13 09:11:35 -05:00

62 lines
2.0 KiB
C#

using LCU.API.Internal.DocumentLib.Containers;
using LCU.API.Internal.DocumentLib.Utilities;
using Microsoft.Extensions.Logging;
using MongoDB.Driver;
namespace OwnerNumberMigration.Logging;
public delegate IAttributeMigration AttributeMigrationLoggingDecoratorFactory
(
IAttributeMigration migration,
string attributeName,
string destinationAttributeName
);
public class AttributeMigrationLoggingDecorator : IAttributeMigration
{
private readonly IAttributeMigration _migration;
private readonly ILogger _logger;
private readonly IMongoCollection<DocumentInformation> _documents;
private readonly string _attributeName;
private readonly string _destinationAttributeName;
private readonly IDocumentFilterFactory _filterFactory;
public AttributeMigrationLoggingDecorator
(
IAttributeMigration migration,
ILogger logger,
IMongoCollectionFactory collectionFactory,
string attributeName,
string destinationAttributeName,
IDocumentFilterFactory filterFactory
)
{
_migration = migration;
_logger = logger;
_documents = collectionFactory.GetCollection<DocumentInformation>();
_attributeName = attributeName;
_destinationAttributeName = destinationAttributeName;
_filterFactory = filterFactory;
}
public async Task Migrate(CancellationToken cancellationToken)
{
var countToMigration = await _documents.CountDocumentsAsync
(
_filterFactory.AppliesForMigrationFilterFactory(_attributeName, _destinationAttributeName),
cancellationToken: cancellationToken
);
_logger.LogInformation
(
"starting to migration {attribute} with {count} documents",
_attributeName,
countToMigration
);
var start = DateTime.Now;
await _migration.Migrate(cancellationToken);
var duration = DateTime.Now - start;
_logger.LogInformation("finished migration for {attribute} in {elapsed}", _attributeName, duration);
}
}