metis-desk/modules/companies/src/api/module.ts

164 lines
9.9 KiB
TypeScript
Raw Normal View History

import type { IResourceInventoryService } from "@metis/resources/services";
import type { RequestHandler } from "express";
import type { Sequelize } 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";
2026-10-05 15:01:32 +00:00
import { FolderMappingUseCases } from "./application/folder-mapping.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";
2026-10-05 15:01:32 +00:00
import { PrinterConfigurationUseCases } from "./application/printer-configuration.use-cases";
import type { IProcessAssetInventoryService } from "./application/process.repository";
import { ProcessUseCases } from "./application/process.use-cases";
2026-10-06 16:44:21 +00:00
import { RemoteConnectionUseCases } from "./application/remote-connection.use-cases";
import { TeleworkAuthorizationUseCases } from "./application/telework-authorization.use-cases";
2026-10-07 09:41:56 +00:00
import type { ITicketInventoryService } from "./application/ticket.repository";
import { TicketUseCases } from "./application/ticket.use-cases";
2026-10-05 07:53:29 +00:00
import type { IWorkProfileInventoryService } from "./application/work-profile.repository";
import { WorkProfileUseCases } from "./application/work-profile.use-cases";
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";
2026-10-05 15:01:32 +00:00
import { registerFolderMappingRoutes } from "./infrastructure/http/folder-mapping.routes";
import { registerMailRoutes } from "./infrastructure/http/mail-configuration.routes";
import { registerMailboxRoutes } from "./infrastructure/http/mailbox.routes";
2026-10-05 15:01:32 +00:00
import { registerPrinterConfigurationRoutes } from "./infrastructure/http/printer-configuration.routes";
import { registerProcessRoutes } from "./infrastructure/http/process.routes";
2026-10-06 16:44:21 +00:00
import { registerRemoteConnectionRoutes } from "./infrastructure/http/remote-connection.routes";
import { registerTeleworkAuthorizationRoutes } from "./infrastructure/http/telework-authorization.routes";
2026-10-07 09:41:56 +00:00
import { registerTicketRoutes } from "./infrastructure/http/ticket.routes";
2026-10-05 07:53:29 +00:00
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 { CompanyPersistenceMapper } from "./infrastructure/persistence/company-persistence.mapper";
2026-10-05 15:01:32 +00:00
import { migrateFolderMappings } from "./infrastructure/persistence/folder-mapping-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";
2026-10-05 15:01:32 +00:00
import { migratePrinterConfigurations } from "./infrastructure/persistence/printer-configuration-migration";
import { migrateProcesses } from "./infrastructure/persistence/process-migration";
2026-10-06 16:44:21 +00:00
import { migrateRemoteConnections } from "./infrastructure/persistence/remote-connection-migration";
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";
2026-10-05 15:01:32 +00:00
import { SequelizeFolderMappingRepository } from "./infrastructure/persistence/sequelize-folder-mapping.repository";
import { SequelizeMailConfigurationRepository } from "./infrastructure/persistence/sequelize-mail-configuration.repository";
import { SequelizeMailboxRepository } from "./infrastructure/persistence/sequelize-mailbox.repository";
2026-10-05 15:01:32 +00:00
import { SequelizePrinterConfigurationRepository } from "./infrastructure/persistence/sequelize-printer-configuration.repository";
import { SequelizeProcessRepository } from "./infrastructure/persistence/sequelize-process.repository";
2026-10-06 16:44:21 +00:00
import { SequelizeRemoteConnectionRepository } from "./infrastructure/persistence/sequelize-remote-connection.repository";
import { SequelizeTeleworkAuthorizationRepository } from "./infrastructure/persistence/sequelize-telework-authorization.repository";
2026-10-07 09:41:56 +00:00
import { SequelizeTicketRepository } from "./infrastructure/persistence/sequelize-ticket.repository";
2026-10-05 07:53:29 +00:00
import { SequelizeWorkProfileRepository } from "./infrastructure/persistence/sequelize-work-profile.repository";
import { migrateTeleworkAuthorizations } from "./infrastructure/persistence/telework-authorization-migration";
2026-10-07 09:41:56 +00:00
import { migrateTickets } from "./infrastructure/persistence/ticket-migration";
2026-10-05 07:53:29 +00:00
import { migrateWorkProfiles } from "./infrastructure/persistence/work-profile-migration";
2026-10-05 15:01:32 +00:00
export async function createCompanyModule(
database: Sequelize,
authenticate: RequestHandler,
legacyResourceWrites = false
) {
await migrateCompanies(database);
await migratePeople(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 access = new AccessUseCases(
new SequelizeAccessRepository(database, repository, new AccessPersistenceMapper())
);
const useCases = new CompanyUseCases(repository, new CompanyInputMapper());
return {
initializeProfiles: async (
2026-10-07 09:41:56 +00:00
inventory: IWorkProfileInventoryService &
IProcessAssetInventoryService &
ITicketInventoryService,
resources: IResourceInventoryService
) => {
2026-10-07 09:41:56 +00:00
await migrateTickets(database);
const tickets = new TicketUseCases(
new SequelizeTicketRepository(database, inventory, resources)
);
await migrateProcesses(database);
const processes = new ProcessUseCases(
new SequelizeProcessRepository(database, inventory, resources)
);
2026-10-06 16:44:21 +00:00
await migrateRemoteConnections(database);
const remote = new RemoteConnectionUseCases(
new SequelizeRemoteConnectionRepository(database, inventory, resources)
);
2026-10-05 07:53:29 +00:00
await migrateWorkProfiles(database);
2026-10-05 10:02:04 +00:00
await migrateFolderMappings(database);
2026-10-05 15:01:32 +00:00
await migratePrinterConfigurations(database);
await migrateApplicationConfigurations(database);
await migrateCertificateConfigurations(database);
const certificates = new CertificateConfigurationUseCases(
new SequelizeCertificateConfigurationRepository(database, inventory, resources)
);
const applications = new ApplicationConfigurationUseCases(
new SequelizeApplicationConfigurationRepository(database, inventory, resources)
);
2026-10-05 15:01:32 +00:00
const printers = new PrinterConfigurationUseCases(
new SequelizePrinterConfigurationRepository(database, inventory)
);
const folders = new FolderMappingUseCases(
new SequelizeFolderMappingRepository(database, inventory)
);
2026-10-05 07:53:29 +00:00
const profiles = new WorkProfileUseCases(
new SequelizeWorkProfileRepository(database, inventory)
);
return {
2026-10-05 10:02:04 +00:00
register: (app: Parameters<typeof registerWorkProfileRoutes>[0]) => {
2026-10-07 09:41:56 +00:00
registerTicketRoutes(app, tickets, authenticate);
registerProcessRoutes(app, processes, authenticate);
2026-10-06 16:44:21 +00:00
registerRemoteConnectionRoutes(app, remote, authenticate);
2026-10-05 10:02:04 +00:00
registerWorkProfileRoutes(app, profiles, authenticate);
registerFolderMappingRoutes(app, folders, authenticate);
2026-10-05 15:01:32 +00:00
registerPrinterConfigurationRoutes(app, printers, authenticate);
registerApplicationConfigurationRoutes(app, applications, authenticate);
registerCertificateConfigurationRoutes(app, certificates, authenticate);
2026-10-05 10:02:04 +00:00
},
2026-10-05 07:53:29 +00:00
};
},
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);
2026-10-05 15:01:32 +00:00
registerMailboxRoutes(app, mailboxes, authenticate, legacyResourceWrites);
},
};
},
register: (app: Parameters<typeof registerCompanyRoutes>[0]) => {
registerCompanyRoutes(app, useCases, authenticate);
registerTeleworkAuthorizationRoutes(app, telework, authenticate);
2026-10-05 15:01:32 +00:00
registerAccessRoutes(app, access, authenticate, legacyResourceWrites);
},
};
}