- Asociar entornos locales con activos y conservar su trazabilidad. - Registrar la cuenta de acceso del mapeo con historial de cambios. - Calcular cobertura documental específica sin alterar la cobertura general. - Añadir migraciones, validaciones, endpoints protegidos, pruebas y documentación.
245 lines
14 KiB
TypeScript
245 lines
14 KiB
TypeScript
import type {
|
|
IDirectoryContextWriter,
|
|
IResourceAccessWriter,
|
|
IResourceInventoryService,
|
|
} from "@metis/resources/services";
|
|
import type { RequestHandler } from "express";
|
|
import type { Sequelize, Transaction } from "sequelize";
|
|
|
|
import { AccessUseCases } from "./application/access.use-cases";
|
|
import { ApplicationConfigurationUseCases } from "./application/application-configuration.use-cases";
|
|
import { CertificateConfigurationUseCases } from "./application/certificate-configuration.use-cases";
|
|
import { CompanyUseCases } from "./application/company.use-cases";
|
|
import { CompanyInputMapper } from "./application/company-input.mapper";
|
|
import { CompanyLogoUseCases } from "./application/company-logo.use-cases";
|
|
import type {
|
|
IAssetDashboardReader,
|
|
IInventoryDashboardReader,
|
|
} from "./application/dashboard.use-cases";
|
|
import { DashboardUseCases } from "./application/dashboard.use-cases";
|
|
import { FolderMappingUseCases } from "./application/folder-mapping.use-cases";
|
|
import type { ILocalIdentityAssetReader } from "./application/local-identity.repository";
|
|
import { LocalIdentityUseCases } from "./application/local-identity.use-cases";
|
|
import type { IMailInventoryService } from "./application/mail-configuration.repository";
|
|
import { MailConfigurationUseCases } from "./application/mail-configuration.use-cases";
|
|
import { MailboxUseCases } from "./application/mailbox.use-cases";
|
|
import { PersonPhotoUseCases } from "./application/person-photo.use-cases";
|
|
import { PrinterConfigurationUseCases } from "./application/printer-configuration.use-cases";
|
|
import type { IProcessAssetInventoryService } from "./application/process.repository";
|
|
import { ProcessUseCases } from "./application/process.use-cases";
|
|
import { RemoteConnectionUseCases } from "./application/remote-connection.use-cases";
|
|
import { SoftwareInstallationUseCases } from "./application/software-installation.use-cases";
|
|
import { TeleworkAuthorizationUseCases } from "./application/telework-authorization.use-cases";
|
|
import type { IWorkProfileInventoryService } from "./application/work-profile.repository";
|
|
import { WorkProfileUseCases } from "./application/work-profile.use-cases";
|
|
import { CompanyLogoProcessor } from "./infrastructure/company-logo-processor";
|
|
import { registerAccessRoutes } from "./infrastructure/http/access.routes";
|
|
import { registerApplicationConfigurationRoutes } from "./infrastructure/http/application-configuration.routes";
|
|
import { registerCertificateConfigurationRoutes } from "./infrastructure/http/certificate-configuration.routes";
|
|
import { registerCompanyRoutes } from "./infrastructure/http/company.routes";
|
|
import { registerCompanyLogoRoutes } from "./infrastructure/http/company-logo.routes";
|
|
import { registerDashboardRoutes } from "./infrastructure/http/dashboard.routes";
|
|
import { registerFolderMappingRoutes } from "./infrastructure/http/folder-mapping.routes";
|
|
import { registerLocalIdentityRoutes } from "./infrastructure/http/local-identity.routes";
|
|
import { registerMailRoutes } from "./infrastructure/http/mail-configuration.routes";
|
|
import { registerMailboxRoutes } from "./infrastructure/http/mailbox.routes";
|
|
import { registerPersonPhotoRoutes } from "./infrastructure/http/person-photo.routes";
|
|
import { registerPrinterConfigurationRoutes } from "./infrastructure/http/printer-configuration.routes";
|
|
import { registerProcessRoutes } from "./infrastructure/http/process.routes";
|
|
import { registerRemoteConnectionRoutes } from "./infrastructure/http/remote-connection.routes";
|
|
import { registerSoftwareInstallationRoutes } from "./infrastructure/http/software-installation.routes";
|
|
import { registerTeleworkAuthorizationRoutes } from "./infrastructure/http/telework-authorization.routes";
|
|
import { registerWorkProfileRoutes } from "./infrastructure/http/work-profile.routes";
|
|
import {
|
|
AccessPersistenceMapper,
|
|
SequelizeAccessRepository,
|
|
migrateAccess,
|
|
} from "./infrastructure/persistence/access-persistence";
|
|
import { migrateApplicationConfigurations } from "./infrastructure/persistence/application-configuration-migration";
|
|
import { migrateCertificateConfigurations } from "./infrastructure/persistence/certificate-configuration-migration";
|
|
import { initializeCompanyModels } from "./infrastructure/persistence/company.model";
|
|
import { CompanyExistenceReader } from "./infrastructure/persistence/company-existence-reader";
|
|
import { migrateCompanyLogos } from "./infrastructure/persistence/company-logo-migration";
|
|
import { CompanyPersistenceMapper } from "./infrastructure/persistence/company-persistence.mapper";
|
|
import { DirectoryContextWriter } from "./infrastructure/persistence/directory-context-writer";
|
|
import { migrateFolderMappings } from "./infrastructure/persistence/folder-mapping-migration";
|
|
import { completeLocalIdentityAssetConstraint } from "./infrastructure/persistence/local-identity-migration";
|
|
import { migrateMailConfigurations } from "./infrastructure/persistence/mail-configuration-migration";
|
|
import { migrateMailboxes } from "./infrastructure/persistence/mailbox-migration";
|
|
import { migrateCompanies } from "./infrastructure/persistence/migrate-companies";
|
|
import { migratePeople } from "./infrastructure/persistence/migrate-people";
|
|
import { initializePeopleModels } from "./infrastructure/persistence/people.model";
|
|
import { migratePersonPhotos } from "./infrastructure/persistence/person-photo-migration";
|
|
import { migratePrinterConfigurations } from "./infrastructure/persistence/printer-configuration-migration";
|
|
import { migrateProcesses } from "./infrastructure/persistence/process-migration";
|
|
import { migrateRemoteConnections } from "./infrastructure/persistence/remote-connection-migration";
|
|
import { removeArchivedSupportTables } from "./infrastructure/persistence/remove-archived-support-tables";
|
|
import { ResourceAccessWriter } from "./infrastructure/persistence/resource-access-writer";
|
|
import { SequelizeApplicationConfigurationRepository } from "./infrastructure/persistence/sequelize-application-configuration.repository";
|
|
import { SequelizeCertificateConfigurationRepository } from "./infrastructure/persistence/sequelize-certificate-configuration.repository";
|
|
import { SequelizeCompanyRepository } from "./infrastructure/persistence/sequelize-company.repository";
|
|
import { SequelizeCompanyLogoRepository } from "./infrastructure/persistence/sequelize-company-logo.repository";
|
|
import { SequelizeDashboardRepository } from "./infrastructure/persistence/sequelize-dashboard.repository";
|
|
import { SequelizeFolderMappingRepository } from "./infrastructure/persistence/sequelize-folder-mapping.repository";
|
|
import { SequelizeLocalIdentityRepository } from "./infrastructure/persistence/sequelize-local-identity.repository";
|
|
import { SequelizeMailConfigurationRepository } from "./infrastructure/persistence/sequelize-mail-configuration.repository";
|
|
import { SequelizeMailboxRepository } from "./infrastructure/persistence/sequelize-mailbox.repository";
|
|
import { SequelizePersonPhotoRepository } from "./infrastructure/persistence/sequelize-person-photo.repository";
|
|
import { SequelizePrinterConfigurationRepository } from "./infrastructure/persistence/sequelize-printer-configuration.repository";
|
|
import { SequelizeProcessRepository } from "./infrastructure/persistence/sequelize-process.repository";
|
|
import { SequelizeRemoteConnectionRepository } from "./infrastructure/persistence/sequelize-remote-connection.repository";
|
|
import { SequelizeSoftwareInstallationRepository } from "./infrastructure/persistence/sequelize-software-installation.repository";
|
|
import { SequelizeTeleworkAuthorizationRepository } from "./infrastructure/persistence/sequelize-telework-authorization.repository";
|
|
import { SequelizeWorkProfileRepository } from "./infrastructure/persistence/sequelize-work-profile.repository";
|
|
import { migrateSoftwareInstallations } from "./infrastructure/persistence/software-installation-migration";
|
|
import { migrateTeleworkAuthorizations } from "./infrastructure/persistence/telework-authorization-migration";
|
|
import { migrateWorkProfiles } from "./infrastructure/persistence/work-profile-migration";
|
|
import { PersonPhotoProcessor } from "./infrastructure/person-photo-processor";
|
|
|
|
export async function createCompanyModule(
|
|
database: Sequelize,
|
|
authenticate: RequestHandler,
|
|
legacyResourceWrites = false
|
|
) {
|
|
await migrateCompanies(database);
|
|
await migrateCompanyLogos(database);
|
|
await migratePeople(database);
|
|
await migratePersonPhotos(database);
|
|
await removeArchivedSupportTables(database);
|
|
|
|
initializeCompanyModels(database);
|
|
initializePeopleModels(database);
|
|
const repository = new SequelizeCompanyRepository(database, new CompanyPersistenceMapper());
|
|
|
|
await migrateTeleworkAuthorizations(database);
|
|
const telework = new TeleworkAuthorizationUseCases(
|
|
new SequelizeTeleworkAuthorizationRepository(database)
|
|
);
|
|
|
|
await migrateAccess(database);
|
|
const accessRepository = new SequelizeAccessRepository(
|
|
database,
|
|
repository,
|
|
new AccessPersistenceMapper()
|
|
);
|
|
const access = new AccessUseCases(accessRepository);
|
|
const useCases = new CompanyUseCases(repository, new CompanyInputMapper());
|
|
const logos = new CompanyLogoUseCases(
|
|
new SequelizeCompanyLogoRepository(database),
|
|
new CompanyLogoProcessor()
|
|
);
|
|
const personPhotos = new PersonPhotoUseCases(
|
|
new SequelizePersonPhotoRepository(database),
|
|
new PersonPhotoProcessor()
|
|
);
|
|
|
|
return {
|
|
existence: new CompanyExistenceReader(database),
|
|
initializeLocalIdentities: async (
|
|
assets: (transaction: Transaction) => ILocalIdentityAssetReader
|
|
) => {
|
|
await completeLocalIdentityAssetConstraint(database);
|
|
const localIdentities = new LocalIdentityUseCases(
|
|
new SequelizeLocalIdentityRepository(database, accessRepository, assets)
|
|
);
|
|
|
|
return {
|
|
useCases: localIdentities,
|
|
register: (app: Parameters<typeof registerLocalIdentityRoutes>[0]) =>
|
|
registerLocalIdentityRoutes(app, localIdentities, authenticate),
|
|
};
|
|
},
|
|
resourceAccess: (transaction: Transaction): IResourceAccessWriter =>
|
|
new ResourceAccessWriter(database, accessRepository, transaction),
|
|
directoryContexts: (transaction: Transaction): IDirectoryContextWriter =>
|
|
new DirectoryContextWriter(database, accessRepository, transaction),
|
|
initializeDashboard: (assets: IAssetDashboardReader, resources: IInventoryDashboardReader) => {
|
|
const dashboard = new DashboardUseCases(
|
|
new SequelizeDashboardRepository(database, assets, resources)
|
|
);
|
|
|
|
return {
|
|
register: (app: Parameters<typeof registerDashboardRoutes>[0]) =>
|
|
registerDashboardRoutes(app, dashboard, authenticate),
|
|
};
|
|
},
|
|
initializeProfiles: async (
|
|
inventory: IWorkProfileInventoryService & IProcessAssetInventoryService,
|
|
resources: IResourceInventoryService
|
|
) => {
|
|
await migrateProcesses(database);
|
|
const processes = new ProcessUseCases(
|
|
new SequelizeProcessRepository(database, inventory, resources)
|
|
);
|
|
|
|
await migrateRemoteConnections(database);
|
|
const remote = new RemoteConnectionUseCases(
|
|
new SequelizeRemoteConnectionRepository(database, inventory, resources)
|
|
);
|
|
|
|
await migrateWorkProfiles(database);
|
|
await migrateFolderMappings(database);
|
|
await migratePrinterConfigurations(database);
|
|
await migrateApplicationConfigurations(database);
|
|
await migrateSoftwareInstallations(database);
|
|
const software = new SoftwareInstallationUseCases(
|
|
new SequelizeSoftwareInstallationRepository(database, inventory, resources)
|
|
);
|
|
|
|
await migrateCertificateConfigurations(database);
|
|
const certificates = new CertificateConfigurationUseCases(
|
|
new SequelizeCertificateConfigurationRepository(database, inventory, resources)
|
|
);
|
|
const applications = new ApplicationConfigurationUseCases(
|
|
new SequelizeApplicationConfigurationRepository(database, inventory, resources)
|
|
);
|
|
const printers = new PrinterConfigurationUseCases(
|
|
new SequelizePrinterConfigurationRepository(database, inventory)
|
|
);
|
|
const folders = new FolderMappingUseCases(
|
|
new SequelizeFolderMappingRepository(database, inventory)
|
|
);
|
|
const profiles = new WorkProfileUseCases(
|
|
new SequelizeWorkProfileRepository(database, inventory)
|
|
);
|
|
|
|
return {
|
|
register: (app: Parameters<typeof registerWorkProfileRoutes>[0]) => {
|
|
registerProcessRoutes(app, processes, authenticate);
|
|
registerRemoteConnectionRoutes(app, remote, authenticate);
|
|
registerWorkProfileRoutes(app, profiles, authenticate);
|
|
registerFolderMappingRoutes(app, folders, authenticate);
|
|
registerPrinterConfigurationRoutes(app, printers, authenticate);
|
|
registerApplicationConfigurationRoutes(app, applications, authenticate);
|
|
registerSoftwareInstallationRoutes(app, software, authenticate);
|
|
registerCertificateConfigurationRoutes(app, certificates, authenticate);
|
|
},
|
|
};
|
|
},
|
|
initializeMail: async (inventory: IMailInventoryService) => {
|
|
await migrateWorkProfiles(database);
|
|
await migrateMailboxes(database);
|
|
await migrateMailConfigurations(database);
|
|
const mailboxRepository = new SequelizeMailboxRepository(database);
|
|
const mailboxes = new MailboxUseCases(mailboxRepository);
|
|
const mail = new MailConfigurationUseCases(
|
|
new SequelizeMailConfigurationRepository(database, inventory, mailboxRepository)
|
|
);
|
|
|
|
return {
|
|
register: (app: Parameters<typeof registerMailRoutes>[0]) => {
|
|
registerMailRoutes(app, mail, authenticate);
|
|
registerMailboxRoutes(app, mailboxes, authenticate, legacyResourceWrites);
|
|
},
|
|
};
|
|
},
|
|
register: (app: Parameters<typeof registerCompanyRoutes>[0]) => {
|
|
registerCompanyLogoRoutes(app, logos, authenticate);
|
|
registerPersonPhotoRoutes(app, personPhotos, authenticate);
|
|
registerCompanyRoutes(app, useCases, authenticate);
|
|
registerTeleworkAuthorizationRoutes(app, telework, authenticate);
|
|
registerAccessRoutes(app, access, authenticate, legacyResourceWrites);
|
|
},
|
|
};
|
|
}
|