using AipGateway.API.Domain.Entities; using AipGateway.API.Domain.IRepositories.IGenericRepositories; using AipGateway.API.Infrastructure.Persistence; using Microsoft.Extensions.Logging; using AipGateway.API.Infrastructure.Configurations; namespace AipGateway.API.Infrastructure.DataAccess { public class UnitOfWorkRepository : IUnitOfWork { private readonly ILogger _log; private readonly ApplicationDbContext _dbContext; private readonly ConnectionInfo _connectionInfo; private IGenericRepository? _linkedSystemRepository; private IGenericRepository? _linkedServerRepository; private IGenericRepository? _linkedApiKeyRepository; private IGenericRepository? _linkedDescryptRepository; private IGenericRepository? _aipAipLabelRepository; private IGenericRepository? _aipAipPolicyRepository; private IGenericRepository? _aipAipProtectionRepository; private IGenericRepository? _aipApiCallLogRepository; private IGenericRepository? _aipFileJobLogRepository; public UnitOfWorkRepository(ILogger logger, ApplicationDbContext appDbContext, ConnectionInfo connectionInfo) { _log = logger; _dbContext = appDbContext; _connectionInfo = connectionInfo; } public IGenericRepository LinkedSystemRepository { get { if (_linkedSystemRepository == null) _linkedSystemRepository = new GenericRepository(_dbContext, _connectionInfo); return _linkedSystemRepository; } } public IGenericRepository LinkedServerRepository { get { if (_linkedServerRepository == null) _linkedServerRepository = new GenericRepository(_dbContext, _connectionInfo); return _linkedServerRepository; } } public IGenericRepository LinkedApiKeyRepository { get { if (_linkedApiKeyRepository == null) _linkedApiKeyRepository = new GenericRepository(_dbContext, _connectionInfo); return _linkedApiKeyRepository; } } public IGenericRepository LinkedDecryptKeyRepository { get { if (_linkedDescryptRepository == null) _linkedDescryptRepository = new GenericRepository(_dbContext, _connectionInfo); return _linkedDescryptRepository; } } public IGenericRepository AipLabelRepository { get { if (_aipAipLabelRepository == null) _aipAipLabelRepository = new GenericRepository(_dbContext, _connectionInfo); return _aipAipLabelRepository; } } public IGenericRepository AipPolicyRepository { get { if (_aipAipPolicyRepository == null) _aipAipPolicyRepository = new GenericRepository(_dbContext, _connectionInfo); return _aipAipPolicyRepository; } } public IGenericRepository AipProtectionRepository { get { if (_aipAipProtectionRepository == null) _aipAipProtectionRepository = new GenericRepository(_dbContext, _connectionInfo); return _aipAipProtectionRepository; } } public IGenericRepository AipApiCallLogRepository { get { if (_aipApiCallLogRepository == null) _aipApiCallLogRepository = new GenericRepository(_dbContext, _connectionInfo); return _aipApiCallLogRepository; } } public IGenericRepository AipFileJobLogRepository { get { if (_aipFileJobLogRepository == null) _aipFileJobLogRepository = new GenericRepository(_dbContext, _connectionInfo); return _aipFileJobLogRepository; } } public int Complete() { return _dbContext.SaveChanges(); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) _dbContext.Dispose(); } } }