.
This commit is contained in:
parent
50a6001252
commit
71913c7c73
@ -1,46 +1,36 @@
|
|||||||
import { AuthUser } from "@/contexts/auth/domain";
|
import { AuthUser } from "@/contexts/auth/domain";
|
||||||
|
import { composeMiddleware } from "@/contexts/common/infrastructure/express";
|
||||||
import { generateExpressError } from "@/contexts/common/infrastructure/express/ExpressErrorResponse";
|
import { generateExpressError } from "@/contexts/common/infrastructure/express/ExpressErrorResponse";
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import httpStatus from "http-status";
|
import httpStatus from "http-status";
|
||||||
import passport from "passport";
|
import passport from "passport";
|
||||||
|
|
||||||
function compose(middlewareArray: any[]) {
|
export const isUser = composeMiddleware([
|
||||||
if (!middlewareArray.length) {
|
|
||||||
return function (req: Express.Request, res: Express.Response, next: Express.NextFunction) {
|
|
||||||
next();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const head = middlewareArray[0];
|
|
||||||
const tail = middlewareArray.slice(1);
|
|
||||||
|
|
||||||
return function (req: Express.Request, res: Express.Response, next: Express.NextFunction) {
|
|
||||||
head(req, res, function (err: unknown) {
|
|
||||||
if (err) return next(err);
|
|
||||||
compose(tail)(req, res, next);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export const isLoggedUser = compose([
|
|
||||||
passport.authenticate("local-jwt", {
|
passport.authenticate("local-jwt", {
|
||||||
session: false,
|
session: false,
|
||||||
}),
|
}),
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) => {
|
(req: Express.Request, res: Express.Response, next: Express.NextFunction) => {
|
||||||
const user = <AuthUser>req.user;
|
if (req.isAuthenticated()) {
|
||||||
|
req.authInfo = <AuthUser>req.user;
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
|
||||||
|
return generateExpressError(req, res, httpStatus.UNAUTHORIZED);
|
||||||
|
|
||||||
|
/*const user = <AuthUser>req.user;
|
||||||
if (!user.isUser) {
|
if (!user.isUser) {
|
||||||
return generateExpressError(req, res, httpStatus.UNAUTHORIZED);
|
return generateExpressError(req, res, httpStatus.UNAUTHORIZED);
|
||||||
}
|
}
|
||||||
next();
|
next();*/
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
export const isAdminUser = compose([
|
export const isAdmin = composeMiddleware([
|
||||||
isLoggedUser,
|
isUser,
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) => {
|
(req: Express.Request, res: Express.Response, next: Express.NextFunction) => {
|
||||||
const user = <AuthUser>req.user;
|
const user = <AuthUser>req.authInfo;
|
||||||
if (!user.isAdmin) {
|
if (!user.isAdmin) {
|
||||||
return generateExpressError(req, res, httpStatus.UNAUTHORIZED);
|
generateExpressError(req, res, httpStatus.UNAUTHORIZED);
|
||||||
}
|
}
|
||||||
next();
|
next();
|
||||||
},
|
},
|
||||||
|
|||||||
@ -21,7 +21,7 @@ class EmailStrategyController extends PassportStrategyController {
|
|||||||
props: {
|
props: {
|
||||||
useCase: LoginUseCase;
|
useCase: LoginUseCase;
|
||||||
},
|
},
|
||||||
context: any,
|
context: any
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
@ -33,11 +33,7 @@ class EmailStrategyController extends PassportStrategyController {
|
|||||||
public async verifyStrategy(
|
public async verifyStrategy(
|
||||||
email: string,
|
email: string,
|
||||||
password: string,
|
password: string,
|
||||||
done: (
|
done: (error: any, user?: AuthUser | false, options?: IVerifyOptions) => void
|
||||||
error: any,
|
|
||||||
user?: AuthUser | false,
|
|
||||||
options?: IVerifyOptions,
|
|
||||||
) => void,
|
|
||||||
) {
|
) {
|
||||||
const loginDTOOrError = ensureLogin_DTOIsValid({ email, password });
|
const loginDTOOrError = ensureLogin_DTOIsValid({ email, password });
|
||||||
|
|
||||||
@ -65,6 +61,6 @@ export const initEmailStrategy = (context: IAuthContext) =>
|
|||||||
{
|
{
|
||||||
useCase: new LoginUseCase(context),
|
useCase: new LoginUseCase(context),
|
||||||
},
|
},
|
||||||
context,
|
context
|
||||||
).verifyStrategy(...params);
|
).verifyStrategy(...params);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,67 +1,25 @@
|
|||||||
import { registerMiddleware } from "@/contexts/common/infrastructure/express";
|
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import passport from "passport";
|
import passport from "passport";
|
||||||
import { createLoginController } from "./controllers";
|
import { createLoginController } from "./controllers";
|
||||||
import { isAdminUser, isLoggedUser } from "./passport";
|
import { isUser } from "./passport";
|
||||||
|
|
||||||
/*authRoutes.post(
|
|
||||||
"/login",
|
|
||||||
passport.authenticate("local-email"),
|
|
||||||
|
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) => {
|
|
||||||
console.log("login OK => generate token JWT");
|
|
||||||
|
|
||||||
// Generar token JWT
|
|
||||||
const token = JWT.sign({ userId: req.user?.id }, "clave_secreta", {
|
|
||||||
expiresIn: "1h",
|
|
||||||
}); // Clave secreta y expiración de 1 hora
|
|
||||||
|
|
||||||
// Enviar token como respuesta
|
|
||||||
res.json({ token });
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
authRoutes.post("/logout", passport.authenticate("local-jwt"));
|
|
||||||
|
|
||||||
authRoutes.get(
|
|
||||||
"/profile",
|
|
||||||
passport.authenticate("local-jwt", { session: false }),
|
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) => {
|
|
||||||
res.json({
|
|
||||||
message: "You made it to the secure route",
|
|
||||||
user: req.user,
|
|
||||||
token: req.query.secret_token,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
);*/
|
|
||||||
|
|
||||||
//export { authRouter };
|
|
||||||
|
|
||||||
export const AuthRouter = (appRouter: Express.Router) => {
|
export const AuthRouter = (appRouter: Express.Router) => {
|
||||||
const authRoutes: Express.Router = Express.Router({ mergeParams: true });
|
const authRoutes: Express.Router = Express.Router({ mergeParams: true });
|
||||||
|
|
||||||
appRouter.use(registerMiddleware("isLoggedUser", isLoggedUser));
|
//appRouter.use(registerMiddleware("isUser", isUser));
|
||||||
appRouter.use(registerMiddleware("isAdminUser", isAdminUser));
|
//appRouter.use(registerMiddleware("isAdmin", isAdmin));
|
||||||
|
|
||||||
authRoutes.post(
|
authRoutes.post(
|
||||||
"/login",
|
"/login",
|
||||||
passport.authenticate("local-email", { session: false }),
|
passport.authenticate("local-email", { session: false }),
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
||||||
createLoginController(res.locals["context"]).execute(req, res, next),
|
createLoginController(res.locals["context"]).execute(req, res, next)
|
||||||
);
|
);
|
||||||
|
|
||||||
authRoutes.post(
|
authRoutes.post("/logout", isUser, (req: Express.Request, res: Express.Response) => {
|
||||||
"/logout",
|
//req.logout(); <-- ??
|
||||||
isLoggedUser,
|
return res.status(200).json();
|
||||||
(
|
});
|
||||||
req: Express.Request,
|
|
||||||
res: Express.Response,
|
|
||||||
next: Express.NextFunction,
|
|
||||||
) => {
|
|
||||||
//req.logout(); <-- ??
|
|
||||||
return res.status(200).json();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
authRoutes.post("/register");
|
authRoutes.post("/register");
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { applyMiddleware } from "@/contexts/common/infrastructure/express";
|
import { isUser } from "@/contexts/auth";
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import { listArticlesController } from "./controllers";
|
import { listArticlesController } from "./controllers";
|
||||||
|
|
||||||
@ -13,10 +13,11 @@ export const CatalogRouter = (appRouter: Express.Router) => {
|
|||||||
|
|
||||||
catalogRoutes.get(
|
catalogRoutes.get(
|
||||||
"/",
|
"/",
|
||||||
applyMiddleware("isLoggedUser"),
|
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
||||||
listArticlesController(res.locals["context"]).execute(req, res, next)
|
listArticlesController(res.locals["context"]).execute(req, res, next)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
catalogRoutes.use(isUser);
|
||||||
|
|
||||||
appRouter.use("/catalog", catalogRoutes);
|
appRouter.use("/catalog", catalogRoutes);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -3,25 +3,16 @@ import Express from "express";
|
|||||||
const registeredMiddlewares: Record<string, Express.RequestHandler> = {};
|
const registeredMiddlewares: Record<string, Express.RequestHandler> = {};
|
||||||
|
|
||||||
function registerMiddleware(name: string, middleware: Express.RequestHandler) {
|
function registerMiddleware(name: string, middleware: Express.RequestHandler) {
|
||||||
return (
|
return (req: Express.Request, res: Express.Response, next: Express.NextFunction) => {
|
||||||
req: Express.Request,
|
|
||||||
res: Express.Response,
|
|
||||||
next: Express.NextFunction,
|
|
||||||
) => {
|
|
||||||
registeredMiddlewares[name] = middleware;
|
registeredMiddlewares[name] = middleware;
|
||||||
next();
|
next();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function applyMiddleware(middlewares: string | Array<string>) {
|
function applyMiddleware(middlewares: string | Array<string>) {
|
||||||
const middlewareNames =
|
const middlewareNames = typeof middlewares === "string" ? [middlewares] : middlewares;
|
||||||
typeof middlewares === "string" ? [middlewares] : middlewares;
|
|
||||||
|
|
||||||
return (
|
return (req: Express.Request, res: Express.Response, next: Express.NextFunction) => {
|
||||||
req: Express.Request,
|
|
||||||
res: Express.Response,
|
|
||||||
next: Express.NextFunction,
|
|
||||||
) => {
|
|
||||||
middlewareNames.forEach((name) => {
|
middlewareNames.forEach((name) => {
|
||||||
const middleware = registeredMiddlewares[name];
|
const middleware = registeredMiddlewares[name];
|
||||||
if (middleware) {
|
if (middleware) {
|
||||||
@ -37,4 +28,22 @@ function createMiddlewareMap() {
|
|||||||
return new Map<string, Express.RequestHandler>();
|
return new Map<string, Express.RequestHandler>();
|
||||||
}
|
}
|
||||||
|
|
||||||
export { applyMiddleware, createMiddlewareMap, registerMiddleware };
|
function composeMiddleware(middlewareArray: any[]) {
|
||||||
|
if (!middlewareArray.length) {
|
||||||
|
return function (req: Express.Request, res: Express.Response, next: Express.NextFunction) {
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const head = middlewareArray[0];
|
||||||
|
const tail = middlewareArray.slice(1);
|
||||||
|
|
||||||
|
return function (req: Express.Request, res: Express.Response, next: Express.NextFunction) {
|
||||||
|
head(req, res, function (err: unknown) {
|
||||||
|
if (err) return next(err);
|
||||||
|
composeMiddleware(tail)(req, res, next);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export { applyMiddleware, composeMiddleware, createMiddlewareMap, registerMiddleware };
|
||||||
|
|||||||
@ -1,10 +1,9 @@
|
|||||||
import { IUseCase, IUseCaseError, UseCaseError } from "@/contexts/common/application";
|
import { IUseCase, IUseCaseError, UseCaseError } from "@/contexts/common/application";
|
||||||
import { IRepositoryManager, Password } from "@/contexts/common/domain";
|
import { IRepositoryManager } from "@/contexts/common/domain";
|
||||||
import { IInfrastructureError } from "@/contexts/common/infrastructure";
|
import { IInfrastructureError } from "@/contexts/common/infrastructure";
|
||||||
import { ISequelizeAdapter } from "@/contexts/common/infrastructure/sequelize";
|
import { ISequelizeAdapter } from "@/contexts/common/infrastructure/sequelize";
|
||||||
import {
|
import {
|
||||||
DomainError,
|
DomainError,
|
||||||
Email,
|
|
||||||
ICreateDealer_Request_DTO,
|
ICreateDealer_Request_DTO,
|
||||||
IDomainError,
|
IDomainError,
|
||||||
Name,
|
Name,
|
||||||
@ -117,21 +116,9 @@ export class CreateDealerUseCase
|
|||||||
return Result.fail(nameOrError.error);
|
return Result.fail(nameOrError.error);
|
||||||
}
|
}
|
||||||
|
|
||||||
const emailOrError = Email.create(dealerDTO.email);
|
|
||||||
if (emailOrError.isFailure) {
|
|
||||||
return Result.fail(emailOrError.error);
|
|
||||||
}
|
|
||||||
|
|
||||||
const passwordOrError = Password.createFromPlainTextPassword(dealerDTO.password);
|
|
||||||
if (passwordOrError.isFailure) {
|
|
||||||
return Result.fail(passwordOrError.error);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Dealer.create(
|
return Dealer.create(
|
||||||
{
|
{
|
||||||
name: nameOrError.object,
|
name: nameOrError.object,
|
||||||
email: emailOrError.object,
|
|
||||||
password: passwordOrError.object,
|
|
||||||
},
|
},
|
||||||
dealerId
|
dealerId
|
||||||
);
|
);
|
||||||
|
|||||||
@ -0,0 +1,74 @@
|
|||||||
|
import {
|
||||||
|
IUseCase,
|
||||||
|
IUseCaseError,
|
||||||
|
IUseCaseRequest,
|
||||||
|
UseCaseError,
|
||||||
|
} from "@/contexts/common/application/useCases";
|
||||||
|
import { IRepositoryManager } from "@/contexts/common/domain";
|
||||||
|
import { ISequelizeAdapter } from "@/contexts/common/infrastructure/sequelize";
|
||||||
|
import { Result, UniqueID } from "@shared/contexts";
|
||||||
|
import { IDealerRepository } from "../domain";
|
||||||
|
|
||||||
|
import { IInfrastructureError } from "@/contexts/common/infrastructure";
|
||||||
|
import { Dealer } from "../domain/entities/Dealer";
|
||||||
|
|
||||||
|
export interface IGetDealerByUserByUserUseCaseRequest extends IUseCaseRequest {
|
||||||
|
userId: UniqueID;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type GetDealerByUserResponseOrError =
|
||||||
|
| Result<never, IUseCaseError> // Misc errors (value objects)
|
||||||
|
| Result<Dealer, never>; // Success!
|
||||||
|
|
||||||
|
export class GetDealerByUserUseCase
|
||||||
|
implements
|
||||||
|
IUseCase<IGetDealerByUserByUserUseCaseRequest, Promise<GetDealerByUserResponseOrError>>
|
||||||
|
{
|
||||||
|
private _adapter: ISequelizeAdapter;
|
||||||
|
private _repositoryManager: IRepositoryManager;
|
||||||
|
|
||||||
|
constructor(props: { adapter: ISequelizeAdapter; repositoryManager: IRepositoryManager }) {
|
||||||
|
this._adapter = props.adapter;
|
||||||
|
this._repositoryManager = props.repositoryManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
private getRepositoryByName<T>(name: string) {
|
||||||
|
return this._repositoryManager.getRepository<T>(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
async execute(
|
||||||
|
request: IGetDealerByUserByUserUseCaseRequest
|
||||||
|
): Promise<GetDealerByUserResponseOrError> {
|
||||||
|
const { userId } = request;
|
||||||
|
|
||||||
|
// Validación de datos
|
||||||
|
// No hay en este caso
|
||||||
|
|
||||||
|
return await this.getUserDealer(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async getUserDealer(userId: UniqueID) {
|
||||||
|
const transaction = this._adapter.startTransaction();
|
||||||
|
const dealerRepoBuilder = this.getRepositoryByName<IDealerRepository>("Dealer");
|
||||||
|
|
||||||
|
let dealer: Dealer | null = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
await transaction.complete(async (t) => {
|
||||||
|
const dealerRepo = dealerRepoBuilder({ transaction: t });
|
||||||
|
dealer = await dealerRepo.getByUserId(userId);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!dealer) {
|
||||||
|
return Result.fail(UseCaseError.create(UseCaseError.NOT_FOUND_ERROR, "Dealer not found"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result.ok<Dealer>(dealer!);
|
||||||
|
} catch (error: unknown) {
|
||||||
|
const _error = error as IInfrastructureError;
|
||||||
|
return Result.fail(
|
||||||
|
UseCaseError.create(UseCaseError.REPOSITORY_ERROR, "Error al consultar el usuario", _error)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,5 +1,6 @@
|
|||||||
export * from "./CreateDealer.useCase";
|
export * from "./CreateDealer.useCase";
|
||||||
export * from "./DeleteDealer.useCase";
|
export * from "./DeleteDealer.useCase";
|
||||||
export * from "./GetDealer.useCase";
|
export * from "./GetDealer.useCase";
|
||||||
|
export * from "./GetDealerByUser.useCase";
|
||||||
export * from "./ListDealers.useCase";
|
export * from "./ListDealers.useCase";
|
||||||
export * from "./UpdateDealer.useCase";
|
export * from "./UpdateDealer.useCase";
|
||||||
|
|||||||
@ -11,4 +11,6 @@ export interface IDealerRepository extends IRepository<any> {
|
|||||||
findAll(queryCriteria?: IQueryCriteria): Promise<ICollection<Dealer>>;
|
findAll(queryCriteria?: IQueryCriteria): Promise<ICollection<Dealer>>;
|
||||||
|
|
||||||
removeById(id: UniqueID): Promise<void>;
|
removeById(id: UniqueID): Promise<void>;
|
||||||
|
|
||||||
|
getByUserId(userId: UniqueID): Promise<Dealer | null>;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,6 +52,29 @@ export class DealerRepository extends SequelizeRepository<Dealer> implements IDe
|
|||||||
return this.mapper.mapToDomain(rawDealer);
|
return this.mapper.mapToDomain(rawDealer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async getByUserId(userId: UniqueID): Promise<Dealer | null> {
|
||||||
|
const _dealer_model = this._adapter.getModel("Dealer_Model");
|
||||||
|
const _user_model = this._adapter.getModel("User_Model");
|
||||||
|
|
||||||
|
const rawDealer: any = await _dealer_model.findOne({
|
||||||
|
include: [
|
||||||
|
{
|
||||||
|
attributes: [],
|
||||||
|
model: _user_model,
|
||||||
|
as: "users",
|
||||||
|
required: true,
|
||||||
|
where: { id: userId.toPrimitive() },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!rawDealer === true) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.mapper.mapToDomain(rawDealer);
|
||||||
|
}
|
||||||
|
|
||||||
public async findAll(queryCriteria?: IQueryCriteria): Promise<ICollection<any>> {
|
public async findAll(queryCriteria?: IQueryCriteria): Promise<ICollection<any>> {
|
||||||
const { rows, count } = await this._findAll(
|
const { rows, count } = await this._findAll(
|
||||||
"Dealer_Model",
|
"Dealer_Model",
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import {
|
|||||||
ICreateDealer_Response_DTO,
|
ICreateDealer_Response_DTO,
|
||||||
ensureCreateDealer_Request_DTOIsValid,
|
ensureCreateDealer_Request_DTOIsValid,
|
||||||
} from "@shared/contexts";
|
} from "@shared/contexts";
|
||||||
import { ISalesContext } from "../../../Sales.context";
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
import { ICreateDealerPresenter } from "./presenter";
|
import { ICreateDealerPresenter } from "./presenter";
|
||||||
|
|
||||||
export class CreateDealerController extends ExpressController {
|
export class CreateDealerController extends ExpressController {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import { CreateDealerUseCase } from "@/contexts/sales/application";
|
import { CreateDealerUseCase } from "@/contexts/sales/application";
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import { registerDealerRepository } from "../../../Dealer.repository";
|
import { registerDealerRepository } from "../../../../Dealer.repository";
|
||||||
import { ISalesContext } from "../../../Sales.context";
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
import { CreateDealerController } from "./CreateDealer.controller";
|
import { CreateDealerController } from "./CreateDealer.controller";
|
||||||
import { CreateDealerPresenter } from "./presenter";
|
import { CreateDealerPresenter } from "./presenter";
|
||||||
|
|
||||||
@ -4,7 +4,7 @@ import { IInfrastructureError, InfrastructureError } from "@/contexts/common/inf
|
|||||||
import { ExpressController } from "@/contexts/common/infrastructure/express";
|
import { ExpressController } from "@/contexts/common/infrastructure/express";
|
||||||
import { DeleteDealerUseCase } from "@/contexts/sales/application";
|
import { DeleteDealerUseCase } from "@/contexts/sales/application";
|
||||||
import { ensureIdIsValid } from "@shared/contexts";
|
import { ensureIdIsValid } from "@shared/contexts";
|
||||||
import { ISalesContext } from "../../../Sales.context";
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
|
|
||||||
export class DeleteDealerController extends ExpressController {
|
export class DeleteDealerController extends ExpressController {
|
||||||
private useCase: DeleteDealerUseCase;
|
private useCase: DeleteDealerUseCase;
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import { DeleteDealerUseCase } from "@/contexts/sales/application";
|
import { DeleteDealerUseCase } from "@/contexts/sales/application";
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import { registerDealerRepository } from "../../../Dealer.repository";
|
import { registerDealerRepository } from "../../../../Dealer.repository";
|
||||||
import { ISalesContext } from "../../../Sales.context";
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
import { DeleteDealerController } from "./DeleteDealer.controller";
|
import { DeleteDealerController } from "./DeleteDealer.controller";
|
||||||
|
|
||||||
export const deleteDealerController = (
|
export const deleteDealerController = (
|
||||||
@ -6,7 +6,7 @@ import { IInfrastructureError, InfrastructureError } from "@/contexts/common/inf
|
|||||||
import { GetDealerUseCase } from "@/contexts/sales/application";
|
import { GetDealerUseCase } from "@/contexts/sales/application";
|
||||||
import { Dealer } from "@/contexts/sales/domain";
|
import { Dealer } from "@/contexts/sales/domain";
|
||||||
import { IGetDealerResponse_DTO, ensureIdIsValid } from "@shared/contexts";
|
import { IGetDealerResponse_DTO, ensureIdIsValid } from "@shared/contexts";
|
||||||
import { ISalesContext } from "../../../Sales.context";
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
import { IGetDealerPresenter } from "./presenter/GetDealer.presenter";
|
import { IGetDealerPresenter } from "./presenter/GetDealer.presenter";
|
||||||
|
|
||||||
export class GetDealerController extends ExpressController {
|
export class GetDealerController extends ExpressController {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import { GetDealerUseCase } from "@/contexts/sales/application";
|
import { GetDealerUseCase } from "@/contexts/sales/application";
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import { registerDealerRepository } from "../../../Dealer.repository";
|
import { registerDealerRepository } from "../../../../Dealer.repository";
|
||||||
import { ISalesContext } from "../../../Sales.context";
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
import { GetDealerController } from "./GetDealer.controller";
|
import { GetDealerController } from "./GetDealer.controller";
|
||||||
import { GetDealerPresenter } from "./presenter";
|
import { GetDealerPresenter } from "./presenter";
|
||||||
|
|
||||||
@ -1,11 +1,13 @@
|
|||||||
import { Dealer } from "../../../../../domain";
|
import { IGetDealerResponse_DTO } from "@shared/contexts";
|
||||||
import { ISalesContext } from "../../../../Sales.context";
|
import { Dealer } from "../../../../../../domain";
|
||||||
|
import { ISalesContext } from "../../../../../Sales.context";
|
||||||
|
|
||||||
export interface IGetDealerPresenter {
|
export interface IGetDealerPresenter {
|
||||||
map: (dealer: Dealer, context: ISalesContext) => IGetDealerResponse_DTO;
|
map: (dealer: Dealer, context: ISalesContext) => IGetDealerResponse_DTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const GetDealerPresenter: IGetDealerPresenter = {
|
export const GetDealerPresenter: IGetDealerPresenter = {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
map: (dealer: Dealer, context: ISalesContext): IGetDealerResponse_DTO => {
|
map: (dealer: Dealer, context: ISalesContext): IGetDealerResponse_DTO => {
|
||||||
return {
|
return {
|
||||||
id: dealer.id.toString(),
|
id: dealer.id.toString(),
|
||||||
@ -0,0 +1,97 @@
|
|||||||
|
import { IUseCaseError, UseCaseError } from "@/contexts/common/application/useCases";
|
||||||
|
import { ExpressController } from "@/contexts/common/infrastructure/express";
|
||||||
|
|
||||||
|
import { IServerError } from "@/contexts/common/domain/errors";
|
||||||
|
import { IInfrastructureError, InfrastructureError } from "@/contexts/common/infrastructure";
|
||||||
|
import { GetDealerByUserUseCase } from "@/contexts/sales/application";
|
||||||
|
import { Dealer } from "@/contexts/sales/domain";
|
||||||
|
import { IGetDealerResponse_DTO, ensureIdIsValid } from "@shared/contexts";
|
||||||
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
|
import { IGetDealerByUserPresenter } from "./presenter";
|
||||||
|
|
||||||
|
export class GetDealerByUserController extends ExpressController {
|
||||||
|
private useCase: GetDealerByUserUseCase;
|
||||||
|
private presenter: IGetDealerByUserPresenter;
|
||||||
|
private context: ISalesContext;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
props: {
|
||||||
|
useCase: GetDealerByUserUseCase;
|
||||||
|
presenter: IGetDealerByUserPresenter;
|
||||||
|
},
|
||||||
|
context: ISalesContext
|
||||||
|
) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
const { useCase, presenter } = props;
|
||||||
|
this.useCase = useCase;
|
||||||
|
this.presenter = presenter;
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
async executeImpl(): Promise<any> {
|
||||||
|
const { dealerId } = this.req.params;
|
||||||
|
|
||||||
|
// Validar ID
|
||||||
|
const dealerIdOrError = ensureIdIsValid(dealerId);
|
||||||
|
if (dealerIdOrError.isFailure) {
|
||||||
|
const errorMessage = "Dealer ID is not valid";
|
||||||
|
const infraError = InfrastructureError.create(
|
||||||
|
InfrastructureError.INVALID_INPUT_DATA,
|
||||||
|
errorMessage,
|
||||||
|
dealerIdOrError.error
|
||||||
|
);
|
||||||
|
return this.invalidInputError(errorMessage, infraError);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await this.useCase.execute({
|
||||||
|
userId: dealerIdOrError.object,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (result.isFailure) {
|
||||||
|
return this._handleExecuteError(result.error);
|
||||||
|
}
|
||||||
|
|
||||||
|
const dealer = <Dealer>result.object;
|
||||||
|
|
||||||
|
return this.ok<IGetDealerResponse_DTO>(this.presenter.map(dealer, this.context));
|
||||||
|
} catch (e: unknown) {
|
||||||
|
return this.fail(e as IServerError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private _handleExecuteError(error: IUseCaseError) {
|
||||||
|
let errorMessage: string;
|
||||||
|
let infraError: IInfrastructureError;
|
||||||
|
|
||||||
|
switch (error.code) {
|
||||||
|
case UseCaseError.NOT_FOUND_ERROR:
|
||||||
|
errorMessage = "Dealer not found";
|
||||||
|
|
||||||
|
infraError = InfrastructureError.create(
|
||||||
|
InfrastructureError.RESOURCE_NOT_FOUND_ERROR,
|
||||||
|
errorMessage,
|
||||||
|
error
|
||||||
|
);
|
||||||
|
|
||||||
|
return this.notFoundError(errorMessage, infraError);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UseCaseError.UNEXCEPTED_ERROR:
|
||||||
|
errorMessage = error.message;
|
||||||
|
|
||||||
|
infraError = InfrastructureError.create(
|
||||||
|
InfrastructureError.UNEXCEPTED_ERROR,
|
||||||
|
errorMessage,
|
||||||
|
error
|
||||||
|
);
|
||||||
|
return this.internalServerError(errorMessage, infraError);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
errorMessage = error.message;
|
||||||
|
return this.clientError(errorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
import { GetDealerByUserUseCase } from "@/contexts/sales/application";
|
||||||
|
import Express from "express";
|
||||||
|
import { registerDealerRepository } from "../../../../Dealer.repository";
|
||||||
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
|
import { GetDealerByUserController } from "./GetDealerByUser.controller";
|
||||||
|
import { GetDealerByUserPresenter } from "./presenter";
|
||||||
|
|
||||||
|
export const getDealerByUserController = (
|
||||||
|
req: Express.Request,
|
||||||
|
res: Express.Response,
|
||||||
|
next: Express.NextFunction
|
||||||
|
) => {
|
||||||
|
const context: ISalesContext = res.locals.context;
|
||||||
|
|
||||||
|
registerDealerRepository(context);
|
||||||
|
|
||||||
|
return new GetDealerByUserController(
|
||||||
|
{
|
||||||
|
useCase: new GetDealerByUserUseCase(context),
|
||||||
|
presenter: GetDealerByUserPresenter,
|
||||||
|
},
|
||||||
|
context
|
||||||
|
).execute(req, res, next);
|
||||||
|
};
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
import { IGetDealerResponse_DTO } from "@shared/contexts";
|
||||||
|
import { Dealer } from "../../../../../../domain";
|
||||||
|
import { ISalesContext } from "../../../../../Sales.context";
|
||||||
|
|
||||||
|
export interface IGetDealerByUserPresenter {
|
||||||
|
map: (dealer: Dealer, context: ISalesContext) => IGetDealerResponse_DTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const GetDealerByUserPresenter: IGetDealerByUserPresenter = {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
map: (dealer: Dealer, context: ISalesContext): IGetDealerResponse_DTO => {
|
||||||
|
return {
|
||||||
|
id: dealer.id.toString(),
|
||||||
|
name: dealer.name.toString(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -0,0 +1 @@
|
|||||||
|
export * from "./GetDealerByUser.presenter";
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
export * from "./createDealer";
|
||||||
|
export * from "./deleteDealer";
|
||||||
|
export * from "./getDealer";
|
||||||
|
export * from "./listDealers";
|
||||||
|
export * from "./updateDealer";
|
||||||
@ -13,7 +13,7 @@ import {
|
|||||||
Result,
|
Result,
|
||||||
RuleValidator,
|
RuleValidator,
|
||||||
} from "@shared/contexts";
|
} from "@shared/contexts";
|
||||||
import { ISalesContext } from "../../../Sales.context";
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
import { IListDealersPresenter } from "./presenter";
|
import { IListDealersPresenter } from "./presenter";
|
||||||
|
|
||||||
export class ListDealersController extends ExpressController {
|
export class ListDealersController extends ExpressController {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import { ListDealersUseCase } from "@/contexts/sales/application";
|
import { ListDealersUseCase } from "@/contexts/sales/application";
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import { registerDealerRepository } from "../../../Dealer.repository";
|
import { registerDealerRepository } from "../../../../Dealer.repository";
|
||||||
import { ISalesContext } from "../../../Sales.context";
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
import { ListDealersController } from "./ListDealers.controller";
|
import { ListDealersController } from "./ListDealers.controller";
|
||||||
import { listDealersPresenter } from "./presenter/ListDealers.presenter";
|
import { listDealersPresenter } from "./presenter/ListDealers.presenter";
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ import {
|
|||||||
ensureIdIsValid,
|
ensureIdIsValid,
|
||||||
ensureUpdateDealer_Request_DTOIsValid,
|
ensureUpdateDealer_Request_DTOIsValid,
|
||||||
} from "@shared/contexts";
|
} from "@shared/contexts";
|
||||||
import { ISalesContext } from "../../../Sales.context";
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
import { IUpdateDealerPresenter } from "./presenter/UpdateDealer.presenter";
|
import { IUpdateDealerPresenter } from "./presenter/UpdateDealer.presenter";
|
||||||
|
|
||||||
export class UpdateDealerController extends ExpressController {
|
export class UpdateDealerController extends ExpressController {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import { UpdateDealerUseCase } from "@/contexts/sales/application";
|
import { UpdateDealerUseCase } from "@/contexts/sales/application";
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import { registerDealerRepository } from "../../../Dealer.repository";
|
import { registerDealerRepository } from "../../../../Dealer.repository";
|
||||||
import { ISalesContext } from "../../../Sales.context";
|
import { ISalesContext } from "../../../../Sales.context";
|
||||||
import { UpdateDealerController } from "./UpdateDealer.controller";
|
import { UpdateDealerController } from "./UpdateDealer.controller";
|
||||||
import { UpdateDealerPresenter } from "./presenter/UpdateDealer.presenter";
|
import { UpdateDealerPresenter } from "./presenter/UpdateDealer.presenter";
|
||||||
|
|
||||||
@ -7,6 +7,7 @@ export interface IUpdateDealerPresenter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const UpdateDealerPresenter: IUpdateDealerPresenter = {
|
export const UpdateDealerPresenter: IUpdateDealerPresenter = {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
map: (dealer: Dealer, context: ISalesContext): IUpdateDealer_Response_DTO => {
|
map: (dealer: Dealer, context: ISalesContext): IUpdateDealer_Response_DTO => {
|
||||||
return {
|
return {
|
||||||
id: dealer.id.toString(),
|
id: dealer.id.toString(),
|
||||||
@ -1,5 +1 @@
|
|||||||
export * from "./createDealer";
|
export * from "./dealers";
|
||||||
export * from "./deleteDealer";
|
|
||||||
export * from "./getDealer";
|
|
||||||
export * from "./listDealers";
|
|
||||||
export * from "./updateDealer";
|
|
||||||
|
|||||||
@ -0,0 +1,26 @@
|
|||||||
|
import { isAdmin, isUser } from "@/contexts/auth";
|
||||||
|
import Express from "express";
|
||||||
|
import {
|
||||||
|
createDealerController,
|
||||||
|
deleteDealerController,
|
||||||
|
getDealerController,
|
||||||
|
updateDealerController,
|
||||||
|
} from "./controllers/dealers";
|
||||||
|
import { listDealersController } from "./controllers/dealers/listDealers";
|
||||||
|
import { getDealerMiddleware } from "./middlewares/dealerMiddleware";
|
||||||
|
import { quoteRoutes } from "./quote.routes";
|
||||||
|
|
||||||
|
export const DealerRouter = (appRouter: Express.Router) => {
|
||||||
|
const dealerRoutes: Express.Router = Express.Router({ mergeParams: true });
|
||||||
|
|
||||||
|
dealerRoutes.get("/", isAdmin, listDealersController);
|
||||||
|
dealerRoutes.get("/:dealerId", isUser, getDealerMiddleware, getDealerController);
|
||||||
|
dealerRoutes.post("/", isAdmin, createDealerController);
|
||||||
|
dealerRoutes.put("/:dealerId", isAdmin, updateDealerController);
|
||||||
|
dealerRoutes.delete("/:dealerId", isAdmin, deleteDealerController);
|
||||||
|
|
||||||
|
// Anidar quotes en /dealers/:dealerId
|
||||||
|
dealerRoutes.use("/:dealerId/quotes", quoteRoutes);
|
||||||
|
|
||||||
|
appRouter.use("/dealers", dealerRoutes);
|
||||||
|
};
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
import { getDealerByUserController } from "../controllers/dealers/getDealerByUser";
|
||||||
|
|
||||||
|
export const getDealerMiddleware = getDealerByUserController;
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
import { isAdmin } from "@/contexts/auth";
|
||||||
|
import Express from "express";
|
||||||
|
|
||||||
|
export const quoteRoutes: Express.Router = Express.Router({ mergeParams: true });
|
||||||
|
|
||||||
|
//quoteRoutes.use(isUser, xxx);
|
||||||
|
|
||||||
|
/*quoteRoutes.get("/", listQuotesController);
|
||||||
|
quoteRoutes.get("/:quoteId", getQuoteController);
|
||||||
|
quoteRoutes.post("/", createQuoteController);
|
||||||
|
quoteRoutes.put("/:quoteId", updateQuoteController);
|
||||||
|
quoteRoutes.delete("/:quoteId", deleteQuoteController);*/
|
||||||
|
|
||||||
|
quoteRoutes.get("/", isAdmin, (req, res) => {
|
||||||
|
console.log(req.params);
|
||||||
|
res.status(200).json();
|
||||||
|
});
|
||||||
|
|
||||||
|
export const QuoteRouter = (appRouter: Express.Router) => {
|
||||||
|
appRouter.use("/quotes", quoteRoutes);
|
||||||
|
};
|
||||||
@ -1,21 +1,8 @@
|
|||||||
import { applyMiddleware } from "@/contexts/common/infrastructure/express";
|
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import {
|
import { DealerRouter } from "./dealers.routes";
|
||||||
createDealerController,
|
import { QuoteRouter } from "./quote.routes";
|
||||||
deleteDealerController,
|
|
||||||
getDealerController,
|
|
||||||
updateDealerController,
|
|
||||||
} from "./controllers";
|
|
||||||
import { listDealersController } from "./controllers/listDealers";
|
|
||||||
|
|
||||||
export const DealerRouter = (appRouter: Express.Router) => {
|
export const SalesRouter = (appRouter: Express.Router) => {
|
||||||
const dealerRoutes: Express.Router = Express.Router({ mergeParams: true });
|
DealerRouter(appRouter);
|
||||||
|
QuoteRouter(appRouter);
|
||||||
dealerRoutes.get("/", applyMiddleware("isAdminUser"), listDealersController);
|
|
||||||
dealerRoutes.get("/:dealerId", applyMiddleware("isAdminUser"), getDealerController);
|
|
||||||
dealerRoutes.post("/", applyMiddleware("isAdminUser"), createDealerController);
|
|
||||||
dealerRoutes.put("/:dealerId", applyMiddleware("isAdminUser"), updateDealerController);
|
|
||||||
dealerRoutes.delete("/:dealerId", applyMiddleware("isAdminUser"), deleteDealerController);
|
|
||||||
|
|
||||||
appRouter.use("/dealers", dealerRoutes);
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -23,7 +23,16 @@ export class Dealer_Model extends Model<
|
|||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
static associate(connection: Sequelize) {}
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
static associate(connection: Sequelize) {
|
||||||
|
const { Dealer_Model, User_Model } = connection.models;
|
||||||
|
|
||||||
|
Dealer_Model.hasMany(User_Model, {
|
||||||
|
as: "users",
|
||||||
|
foreignKey: "dealer_id",
|
||||||
|
onDelete: "RESTRICT",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
declare id: string;
|
declare id: string;
|
||||||
declare id_contact?: string; // number ??
|
declare id_contact?: string; // number ??
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { applyMiddleware } from "@/contexts/common/infrastructure/express";
|
import { isAdmin } from "@/contexts/auth";
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import {
|
import {
|
||||||
createCreateUserController,
|
createCreateUserController,
|
||||||
@ -13,37 +13,37 @@ export const UserRouter = (appRouter: Express.Router) => {
|
|||||||
|
|
||||||
userRoutes.get(
|
userRoutes.get(
|
||||||
"/",
|
"/",
|
||||||
applyMiddleware("isAdminUser"),
|
isAdmin,
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
||||||
createListUsersController(res.locals["context"]).execute(req, res, next),
|
createListUsersController(res.locals["context"]).execute(req, res, next)
|
||||||
);
|
);
|
||||||
|
|
||||||
userRoutes.get(
|
userRoutes.get(
|
||||||
"/:userId",
|
"/:userId",
|
||||||
applyMiddleware("isAdminUser"),
|
isAdmin,
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
||||||
createGetUserController(res.locals["context"]).execute(req, res, next),
|
createGetUserController(res.locals["context"]).execute(req, res, next)
|
||||||
);
|
);
|
||||||
|
|
||||||
userRoutes.post(
|
userRoutes.post(
|
||||||
"/",
|
"/",
|
||||||
applyMiddleware("isAdminUser"),
|
isAdmin,
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
||||||
createCreateUserController(res.locals["context"]).execute(req, res, next),
|
createCreateUserController(res.locals["context"]).execute(req, res, next)
|
||||||
);
|
);
|
||||||
|
|
||||||
userRoutes.put(
|
userRoutes.put(
|
||||||
"/:userId",
|
"/:userId",
|
||||||
applyMiddleware("isAdminUser"),
|
isAdmin,
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
||||||
createUpdateUserController(res.locals["context"]).execute(req, res, next),
|
createUpdateUserController(res.locals["context"]).execute(req, res, next)
|
||||||
);
|
);
|
||||||
|
|
||||||
userRoutes.delete(
|
userRoutes.delete(
|
||||||
"/:userId",
|
"/:userId",
|
||||||
applyMiddleware("isAdminUser"),
|
isAdmin,
|
||||||
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
(req: Express.Request, res: Express.Response, next: Express.NextFunction) =>
|
||||||
createDeleteUserController(res.locals["context"]).execute(req, res, next),
|
createDeleteUserController(res.locals["context"]).execute(req, res, next)
|
||||||
);
|
);
|
||||||
|
|
||||||
appRouter.use("/users", userRoutes);
|
appRouter.use("/users", userRoutes);
|
||||||
|
|||||||
@ -18,7 +18,16 @@ export class User_Model extends Model<
|
|||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
static associate(connection: Sequelize) {}
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
static associate(connection: Sequelize) {
|
||||||
|
const { User_Model, Dealer_Model } = connection.models;
|
||||||
|
|
||||||
|
User_Model.belongsTo(Dealer_Model, {
|
||||||
|
as: "dealer",
|
||||||
|
foreignKey: "dealer_id",
|
||||||
|
onDelete: "RESTRICT",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
declare id: string;
|
declare id: string;
|
||||||
declare name: string;
|
declare name: string;
|
||||||
@ -79,7 +88,7 @@ export default (sequelize: Sequelize) => {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
return User_Model;
|
return User_Model;
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
import { AuthRouter } from "@/contexts/auth";
|
import { AuthRouter } from "@/contexts/auth";
|
||||||
import { CatalogRouter } from "@/contexts/catalog";
|
import { CatalogRouter } from "@/contexts/catalog";
|
||||||
import { createMiddlewareMap } from "@/contexts/common/infrastructure/express";
|
import { SalesRouter } from "@/contexts/sales/infrastructure/express";
|
||||||
import { DealerRouter } from "@/contexts/sales/infrastructure/express";
|
|
||||||
import { UserRouter } from "@/contexts/users";
|
import { UserRouter } from "@/contexts/users";
|
||||||
import Express from "express";
|
import Express from "express";
|
||||||
import { createContextMiddleware } from "./context.middleware";
|
import { createContextMiddleware } from "./context.middleware";
|
||||||
@ -15,7 +14,7 @@ export const v1Routes = () => {
|
|||||||
|
|
||||||
routes.use((req: Express.Request, res: Express.Response, next: Express.NextFunction) => {
|
routes.use((req: Express.Request, res: Express.Response, next: Express.NextFunction) => {
|
||||||
res.locals["context"] = createContextMiddleware();
|
res.locals["context"] = createContextMiddleware();
|
||||||
res.locals["middlewares"] = createMiddlewareMap();
|
//res.locals["middlewares"] = createMiddlewareMap();
|
||||||
|
|
||||||
return next();
|
return next();
|
||||||
});
|
});
|
||||||
@ -27,7 +26,7 @@ export const v1Routes = () => {
|
|||||||
AuthRouter(routes);
|
AuthRouter(routes);
|
||||||
UserRouter(routes);
|
UserRouter(routes);
|
||||||
CatalogRouter(routes);
|
CatalogRouter(routes);
|
||||||
DealerRouter(routes);
|
SalesRouter(routes);
|
||||||
|
|
||||||
return routes;
|
return routes;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
import rTracer from "cls-rtracer";
|
|
||||||
import cors from "cors";
|
import cors from "cors";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
import helmet from "helmet";
|
import helmet from "helmet";
|
||||||
@ -7,10 +6,9 @@ import responseTime from "response-time";
|
|||||||
import { configurePassportAuth } from "@/contexts/auth";
|
import { configurePassportAuth } from "@/contexts/auth";
|
||||||
import morgan from "morgan";
|
import morgan from "morgan";
|
||||||
import passport from "passport";
|
import passport from "passport";
|
||||||
import { initLogger } from "../logger";
|
|
||||||
import { v1Routes } from "./api/v1";
|
import { v1Routes } from "./api/v1";
|
||||||
|
|
||||||
const logger = initLogger(rTracer);
|
//const logger = initLogger(rTracer);
|
||||||
|
|
||||||
// Create Express server
|
// Create Express server
|
||||||
const app = express();
|
const app = express();
|
||||||
@ -41,7 +39,7 @@ app.use(
|
|||||||
"Pagination-Page",
|
"Pagination-Page",
|
||||||
"Pagination-Limit",
|
"Pagination-Limit",
|
||||||
],
|
],
|
||||||
}),
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
// secure apps by setting various HTTP headers
|
// secure apps by setting various HTTP headers
|
||||||
|
|||||||
9
shared/lib/contexts/sales/renamer.sh
Executable file
9
shared/lib/contexts/sales/renamer.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Cambia "Dealer" por "Dealer" en todos los archivos y directorios de forma recursiva
|
||||||
|
find . -depth -name "*Reseller*" | while read file; do
|
||||||
|
# Obtén el nuevo nombre con 'Reseller' reemplazado por 'Dealer'
|
||||||
|
newfile=$(echo "$file" | sed 's/Reseller/Dealer/g')
|
||||||
|
# Renombra el archivo/directorio
|
||||||
|
mv "$file" "$newfile"
|
||||||
|
done
|
||||||
Loading…
Reference in New Issue
Block a user