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

28 lines
1.3 KiB
TypeScript
Raw Normal View History

import type { RequestHandler } from "express";
import type { Sequelize } from "sequelize";
import { CompanyUseCases } from "./application/company.use-cases";
import { CompanyInputMapper } from "./application/company-input.mapper";
import { registerCompanyRoutes } from "./infrastructure/http/company.routes";
import { initializeCompanyModels } from "./infrastructure/persistence/company.model";
import { CompanyPersistenceMapper } from "./infrastructure/persistence/company-persistence.mapper";
import { migrateCompanies } from "./infrastructure/persistence/migrate-companies";
import { migratePeople } from "./infrastructure/persistence/migrate-people";
import { initializePeopleModels } from "./infrastructure/persistence/people.model";
import { SequelizeCompanyRepository } from "./infrastructure/persistence/sequelize-company.repository";
export async function createCompanyModule(database: Sequelize, authenticate: RequestHandler) {
await migrateCompanies(database);
await migratePeople(database);
initializeCompanyModels(database);
initializePeopleModels(database);
const useCases = new CompanyUseCases(
new SequelizeCompanyRepository(database, new CompanyPersistenceMapper()),
new CompanyInputMapper()
);
return {
register: (app: Parameters<typeof registerCompanyRoutes>[0]) =>
registerCompanyRoutes(app, useCases, authenticate),
};
}