diff --git a/apps/server/src/contexts/auth/application/list-users/list-users.use-case.ts b/apps/server/src/contexts/auth/application/list-users/list-users.use-case.ts index 99e283c4..92338ac6 100644 --- a/apps/server/src/contexts/auth/application/list-users/list-users.use-case.ts +++ b/apps/server/src/contexts/auth/application/list-users/list-users.use-case.ts @@ -1,4 +1,4 @@ -import { Result } from "@common/helpers"; +import { Collection, Result } from "@common/helpers"; import { ITransactionManager } from "@common/infrastructure/database"; import { User } from "@contexts/auth/domain"; import { IUserService } from "@contexts/auth/domain/services"; @@ -9,9 +9,9 @@ export class ListUsersUseCase { private readonly transactionManager: ITransactionManager ) {} - public async execute(): Promise> { - return await this.transactionManager.complete(async (transaction) => { - return await this.userService.findUsers(transaction); + public execute(): Promise, Error>> { + return this.transactionManager.complete((transaction) => { + return this.userService.findUsers(transaction); }); } } diff --git a/apps/server/src/contexts/auth/domain/services/user-service.interface.ts b/apps/server/src/contexts/auth/domain/services/user-service.interface.ts index 66c8a61a..14192e31 100644 --- a/apps/server/src/contexts/auth/domain/services/user-service.interface.ts +++ b/apps/server/src/contexts/auth/domain/services/user-service.interface.ts @@ -1,8 +1,8 @@ import { UniqueID } from "@common/domain"; -import { Result } from "@common/helpers"; +import { Collection, Result } from "@common/helpers"; import { User } from "../aggregates"; export interface IUserService { - findUsers(transaction?: any): Promise>; + findUsers(transaction?: any): Promise, Error>>; findUserById(userId: UniqueID, transaction?: any): Promise>; } diff --git a/apps/server/src/contexts/companies/application/list-companies/list-companies.use-case.ts b/apps/server/src/contexts/companies/application/list-companies/list-companies.use-case.ts new file mode 100644 index 00000000..c6daea47 --- /dev/null +++ b/apps/server/src/contexts/companies/application/list-companies/list-companies.use-case.ts @@ -0,0 +1,17 @@ +import { Collection, Result } from "@common/helpers"; +import { ITransactionManager } from "@common/infrastructure/database"; +import { Company } from "@contexts/companies/domain"; +import { ICompanyService } from "@contexts/companies/domain/services/company-service.interface"; + +export class ListCompaniesUseCase { + constructor( + private readonly companyService: ICompanyService, + private readonly transactionManager: ITransactionManager + ) {} + + public execute(): Promise, Error>> { + return this.transactionManager.complete((transaction) => { + return this.companyService.findCompanies(transaction); + }); + } +} diff --git a/apps/server/src/contexts/companies/application/list-companies/list-users.use-case.ts b/apps/server/src/contexts/companies/application/list-companies/list-users.use-case.ts deleted file mode 100644 index ffc84ba4..00000000 --- a/apps/server/src/contexts/companies/application/list-companies/list-users.use-case.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Result } from "@common/domain"; -import { ITransactionManager } from "@common/infrastructure/database"; -import { User } from "@contexts/auth/domain"; -import { IUserService } from "@contexts/auth/domain/services"; - -export class ListCompaniesUseCase { - constructor( - private readonly userService: IUserService, - private readonly transactionManager: ITransactionManager - ) {} - - public async execute(): Promise> { - return await this.transactionManager.complete(async (transaction) => { - return await this.userService.findCompanies(transaction); - }); - } -} diff --git a/apps/server/src/contexts/companies/domain/repositories/company-repository.interface.ts b/apps/server/src/contexts/companies/domain/repositories/company-repository.interface.ts index e581bcb7..d13a05af 100644 --- a/apps/server/src/contexts/companies/domain/repositories/company-repository.interface.ts +++ b/apps/server/src/contexts/companies/domain/repositories/company-repository.interface.ts @@ -1 +1,9 @@ -export interface ICompanyRepository {} +import { EmailAddress, UniqueID } from "@common/domain"; +import { Collection, Result } from "@common/helpers"; +import { Company } from "../aggregates"; + +export interface ICompanyRepository { + findAll(transaction?: any): Promise, Error>>; + findById(id: UniqueID, transaction?: any): Promise>; + findByEmail(email: EmailAddress, transaction?: any): Promise>; +} diff --git a/apps/server/src/contexts/companies/domain/services/company-service.interface.ts b/apps/server/src/contexts/companies/domain/services/company-service.interface.ts index 7e56c4dc..b5032f40 100644 --- a/apps/server/src/contexts/companies/domain/services/company-service.interface.ts +++ b/apps/server/src/contexts/companies/domain/services/company-service.interface.ts @@ -1,7 +1,8 @@ -import { Result, UniqueID } from "@common/domain"; +import { UniqueID } from "@common/domain"; +import { Collection, Result } from "@common/helpers"; import { Company } from "../aggregates"; export interface ICompanyService { - findCompanies(transaction?: any): Promise>; + findCompanies(transaction?: any): Promise, Error>>; findCompanyById(userId: UniqueID, transaction?: any): Promise>; } diff --git a/apps/server/src/contexts/companies/domain/services/company.service.ts b/apps/server/src/contexts/companies/domain/services/company.service.ts index 5c6a7086..6c1bced1 100644 --- a/apps/server/src/contexts/companies/domain/services/company.service.ts +++ b/apps/server/src/contexts/companies/domain/services/company.service.ts @@ -1,19 +1,20 @@ -import { Result, UniqueID } from "@common/domain"; +import { UniqueID } from "@common/domain"; +import { Collection, Result } from "@common/helpers"; import { Company, ICompanyRepository } from ".."; import { ICompanyService } from "./company-service.interface"; export class CompanyService implements ICompanyService { constructor(private readonly companyRepository: ICompanyRepository) {} - async findCompanies(transaction?: any): Promise> { + async findCompanies(transaction?: any): Promise, Error>> { const companysOrError = await this.companyRepository.findAll(transaction); if (companysOrError.isFailure) { return Result.fail(companysOrError.error); } // Solo devolver usuarios activos - const activeCompanies = companysOrError.data.filter((company) => company /*.isActive*/); - return Result.ok(activeCompanies); + const activeCompanies = companysOrError.data.filter((company) => company.isActive); + return Result.ok(new Collection(activeCompanies)); } async findCompanyById(companyId: UniqueID, transaction?: any): Promise> { diff --git a/apps/server/src/contexts/companies/infraestructure/index.ts b/apps/server/src/contexts/companies/infraestructure/index.ts index 01cd6cb2..7ccefa3a 100644 --- a/apps/server/src/contexts/companies/infraestructure/index.ts +++ b/apps/server/src/contexts/companies/infraestructure/index.ts @@ -1,3 +1,2 @@ export * from "./mappers"; -export * from "./passport"; export * from "./sequelize"; diff --git a/apps/server/src/contexts/companies/presentation/controllers/list-companies/index.ts b/apps/server/src/contexts/companies/presentation/controllers/list-companies/index.ts index adb9effe..cbe0301e 100644 --- a/apps/server/src/contexts/companies/presentation/controllers/list-companies/index.ts +++ b/apps/server/src/contexts/companies/presentation/controllers/list-companies/index.ts @@ -1,15 +1,16 @@ import { SequelizeTransactionManager } from "@common/infrastructure"; -import { ListcompaniesUseCase } from "@contexts/auth/application/list-companies/list-companies.use-case"; -import { userRepository } from "@contexts/auth/infraestructure"; -import { ListcompaniesController } from "./list-companies.controller"; -import { listcompaniesPresenter } from "./list-companies.presenter"; +import { ListCompaniesUseCase } from "@contexts/companies/application/list-companies/list-companies.use-case"; +import { CompanyService } from "@contexts/companies/domain/services/company.service"; +import { companyRepository } from "@contexts/companies/infraestructure"; +import { ListCompaniesController } from "./list-companies.controller"; +import { listCompaniesPresenter } from "./list-companies.presenter"; -export const listcompaniesController = () => { +export const listCompaniesController = () => { const transactionManager = new SequelizeTransactionManager(); - const companieservice = new companieservice(userRepository); + const companyService = new CompanyService(companyRepository); - const useCase = new ListcompaniesUseCase(companieservice, transactionManager); - const presenter = listcompaniesPresenter; + const useCase = new ListCompaniesUseCase(companyService, transactionManager); + const presenter = listCompaniesPresenter; - return new ListcompaniesController(useCase, presenter); + return new ListCompaniesController(useCase, presenter); }; diff --git a/apps/server/src/contexts/companies/presentation/controllers/list-companies/list-companies.controller.ts b/apps/server/src/contexts/companies/presentation/controllers/list-companies/list-companies.controller.ts index 0e6f7d80..d53369f7 100644 --- a/apps/server/src/contexts/companies/presentation/controllers/list-companies/list-companies.controller.ts +++ b/apps/server/src/contexts/companies/presentation/controllers/list-companies/list-companies.controller.ts @@ -1,17 +1,17 @@ import { ExpressController } from "@common/presentation"; -import { ListCompaniesUseCase } from "@contexts/companies/application/list-companies/list-users.use-case"; +import { ListCompaniesUseCase } from "@contexts/companies/application/list-companies/list-companies.use-case"; import { IListCompaniesPresenter } from "./list-companies.presenter"; -export class ListcompaniesController extends ExpressController { +export class ListCompaniesController extends ExpressController { public constructor( - private readonly listcompanies: ListCompaniesUseCase, + private readonly listCompanies: ListCompaniesUseCase, private readonly presenter: IListCompaniesPresenter ) { super(); } protected async executeImpl() { - const companiesOrError = await this.listcompanies.execute(); + const companiesOrError = await this.listCompanies.execute(); if (companiesOrError.isFailure) { return this.handleError(companiesOrError.error); diff --git a/apps/server/src/contexts/companies/presentation/controllers/list-companies/list-companies.presenter.ts b/apps/server/src/contexts/companies/presentation/controllers/list-companies/list-companies.presenter.ts index 344293b6..244e2ddb 100644 --- a/apps/server/src/contexts/companies/presentation/controllers/list-companies/list-companies.presenter.ts +++ b/apps/server/src/contexts/companies/presentation/controllers/list-companies/list-companies.presenter.ts @@ -1,4 +1,4 @@ -import { Collection, ensureString } from "@common/helpers"; +import { Collection, ensureBoolean, ensureNumber, ensureString } from "@common/helpers"; import { Company } from "@contexts/companies/domain"; import { IListCompaniesResponseDTO } from "../../dto"; diff --git a/apps/server/src/contexts/sales/domain/index.ts b/apps/server/src/contexts/sales/domain/index.ts new file mode 100644 index 00000000..4a16e729 --- /dev/null +++ b/apps/server/src/contexts/sales/domain/index.ts @@ -0,0 +1,5 @@ +export * from "./aggregates"; +export * from "./entities"; +export * from "./events"; +export * from "./repositories"; +export * from "./value-objects"; diff --git a/apps/server/src/contexts/sales/infraestructure/index.ts b/apps/server/src/contexts/sales/infraestructure/index.ts new file mode 100644 index 00000000..7ccefa3a --- /dev/null +++ b/apps/server/src/contexts/sales/infraestructure/index.ts @@ -0,0 +1,2 @@ +export * from "./mappers"; +export * from "./sequelize"; diff --git a/apps/server/src/contexts/sales/presentation/index.ts b/apps/server/src/contexts/sales/presentation/index.ts new file mode 100644 index 00000000..a123289d --- /dev/null +++ b/apps/server/src/contexts/sales/presentation/index.ts @@ -0,0 +1,2 @@ +export * from "./controllers"; +export * from "./dto"; diff --git a/apps/server/src/routes/companies.routes.ts b/apps/server/src/routes/companies.routes.ts new file mode 100644 index 00000000..a31fd194 --- /dev/null +++ b/apps/server/src/routes/companies.routes.ts @@ -0,0 +1,20 @@ +import { validateRequestDTO } from "@common/presentation"; +import { checkTabContext } from "@contexts/auth/infraestructure"; +import { listCompaniesController, ListCompaniesSchema } from "@contexts/companies/presentation"; +import { NextFunction, Request, Response, Router } from "express"; + +export const companiesRouter = (appRouter: Router) => { + const companiesRoutes: Router = Router({ mergeParams: true }); + + companiesRoutes.get( + "/", + validateRequestDTO(ListCompaniesSchema), + checkTabContext, + //checkUser, + (req: Request, res: Response, next: NextFunction) => { + listCompaniesController().execute(req, res, next); + } + ); + + appRouter.use("/companies", companiesRoutes); +}; diff --git a/apps/server/src/routes/company.routes.ts b/apps/server/src/routes/company.routes.ts deleted file mode 100644 index eb97d3f9..00000000 --- a/apps/server/src/routes/company.routes.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { validateRequestDTO } from "@common/presentation"; -import { checkTabContext, checkUser } from "@contexts/auth/infraestructure"; -import { ListCompaniesSchema } from "@contexts/companies/presentation"; -import { NextFunction, Request, Response, Router } from "express"; - -export const companyRouter = (appRouter: Router) => { - const companyRoutes: Router = Router({ mergeParams: true }); - - companyRoutes.get( - "/", - validateRequestDTO(ListCompaniesSchema), - checkTabContext, - checkUser, - (req: Request, res: Response, next: NextFunction) => { - listCompaniesController().execute(req, res, next); - } - ); - - appRouter.use("/company", companyRoutes); -}; diff --git a/apps/server/src/routes/user.routes.ts b/apps/server/src/routes/customers.routes.ts similarity index 93% rename from apps/server/src/routes/user.routes.ts rename to apps/server/src/routes/customers.routes.ts index 53b6d5fd..ab2b0561 100644 --- a/apps/server/src/routes/user.routes.ts +++ b/apps/server/src/routes/customers.routes.ts @@ -16,5 +16,5 @@ export const userRouter = (appRouter: Router) => { } ); - appRouter.use("/users", authRoutes); + appRouter.use("/customers", authRoutes); }; diff --git a/apps/server/src/routes/users.routes.ts b/apps/server/src/routes/users.routes.ts new file mode 100644 index 00000000..95795e50 --- /dev/null +++ b/apps/server/src/routes/users.routes.ts @@ -0,0 +1,20 @@ +import { validateRequestDTO } from "@common/presentation"; +import { checkTabContext, checkUserIsAdmin } from "@contexts/auth/infraestructure"; +import { listUsersController, ListUsersSchema } from "@contexts/auth/presentation"; +import { NextFunction, Request, Response, Router } from "express"; + +export const usersRouter = (appRouter: Router) => { + const usersRoutes: Router = Router({ mergeParams: true }); + + usersRoutes.get( + "/", + validateRequestDTO(ListUsersSchema), + checkTabContext, + checkUserIsAdmin, + (req: Request, res: Response, next: NextFunction) => { + listUsersController().execute(req, res, next); + } + ); + + appRouter.use("/users", usersRoutes); +}; diff --git a/apps/server/src/routes/v1.routes.ts b/apps/server/src/routes/v1.routes.ts index a61e33db..0cded0fd 100644 --- a/apps/server/src/routes/v1.routes.ts +++ b/apps/server/src/routes/v1.routes.ts @@ -1,6 +1,7 @@ import { Router } from "express"; import { authRouter } from "./auth.routes"; -import { userRouter } from "./user.routes"; +import { companiesRouter } from "./companies.routes"; +import { usersRouter } from "./users.routes"; export const v1Routes = () => { const routes = Router({ mergeParams: true }); @@ -10,7 +11,8 @@ export const v1Routes = () => { }); authRouter(routes); - userRouter(routes); + usersRouter(routes); + companiesRouter(routes); return routes; };