This commit is contained in:
David Arranz 2025-05-02 23:43:51 +02:00
parent 180a708956
commit 0ae16f2d9f
450 changed files with 10077 additions and 3373 deletions

View File

@ -1,10 +1,5 @@
// This configuration only applies to the package manager root.
/** @type {import("eslint").Linter.Config} */ /** @type {import("eslint").Linter.Config} */
module.exports = { module.exports = {
ignorePatterns: ["apps/**", "packages/**", "libs/**"], root: true,
extends: ["@repo/eslint-config"], extends: ["@repo/eslint-config/index.js"],
parser: "@typescript-eslint/parser",
parserOptions: {
project: true,
},
}; };

53
.gitignore vendored
View File

@ -1,44 +1,11 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# Dependencies
node_modules
.pnp
.pnp.js
# Local env files
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# Testing
coverage
# Turbo
.turbo
# Vercel
.vercel
# Build Outputs
.next/
out/
build
dist
# Debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
debug-*.log
error-*.log
# Misc
.DS_Store .DS_Store
*.pem node_modules
*-audit.json .turbo
*.log
#Jetbrains dist
.idea dist-ssr
*.local
.env
.cache
server/dist
public/dist

88
.vscode/launch.json vendored
View File

@ -2,48 +2,66 @@
"version": "0.2.0", "version": "0.2.0",
"configurations": [ "configurations": [
{ {
"name": "Launch firefox localhost", "name": "Attach to Turbo Server API (ts-node-dev)",
"type": "firefox",
"request": "launch",
"reAttach": true,
"url": "http://localhost:5173",
"webRoot": "${workspaceFolder}/client"
},
{
"name": "Launch Chrome localhost",
"type": "chrome",
"request": "launch",
"url": "http://localhost:5173",
"webRoot": "${workspaceFolder}/client"
},
{
"type": "msedge",
"request": "launch",
"name": "CLIENT: Launch Edge against localhost",
"url": "http://localhost:5173",
"webRoot": "${workspaceFolder}/client"
},
{
"type": "node", "type": "node",
"request": "attach", "request": "attach",
"name": "Attach to ts-node-dev", "port": 9229,
"port": 4321,
"restart": true, "restart": true,
"timeout": 10000, "protocol": "inspector",
"skipFiles": ["<node_internals>/**"],
"sourceMaps": true, "sourceMaps": true,
"resolveSourceMapLocations": ["${workspaceFolder}/**", "!**/node_modules/**"] "outFiles": [
"${workspaceFolder}/apps/api/src/**/*.ts",
"${workspaceFolder}/modules/*/src/**/*.ts",
"${workspaceFolder}/packages/*/src/**/*.ts"
]
}, },
{ {
"name": "Launch via YARN", "name": "Turbo: debug server-side + modules + packages",
"type": "node",
"request": "launch", "request": "launch",
"runtimeArgs": ["run", "server"], "program": "${workspaceFolder}/apps/server/src/index.ts",
"runtimeExecutable": "yarn", "runtimeArgs": ["-r", "ts-node/register"],
"skipFiles": ["<node_internals>/**", "client/**", "dist/**", "doc/**"], "envFile": "${workspaceFolder}/apps/server/.env",
"type": "node" "env": {
"NODE_ENV": "development",
"NODE_OPTIONS": "--inspect=0"
},
"skipFiles": ["<node_internals>/**"],
"sourceMaps": true,
"outFiles": [
"${workspaceFolder}/apps/server/**/*.js",
"${workspaceFolder}/modules/**/dist/**/*.js",
"${workspaceFolder}/packages/**/dist/**/*.js"
],
"cwd": "${workspaceFolder}"
},
{
"name": "Debug Server",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/apps/server/src/index.ts",
"runtimeArgs": ["--require", "tsconfig-paths/register", "--inspect"],
"cwd": "${workspaceFolder}",
"outFiles": ["${workspaceFolder}/**/*.js"],
"sourceMaps": true,
"envFile": "${workspaceFolder}/apps/server/.env",
"internalConsoleOptions": "openOnSessionStart"
},
{
"name": "Attach to Server",
"type": "node",
"request": "attach",
"port": 9229,
"restart": true,
"protocol": "inspector",
"skipFiles": ["<node_internals>/**"],
"sourceMaps": true,
"outFiles": [
"${workspaceFolder}/apps/server/dist/**/*.js",
"${workspaceFolder}/packages/*/dist/**/*.js",
"${workspaceFolder}/modules/*/dist/**/*.js"
]
} }
] ]
} }

18
.vscode/settings.json vendored
View File

@ -1,4 +1,21 @@
{ {
"files.associations": {
"tsconfig.json": "jsonc",
"typescript-config/*.json": "jsonc"
},
// Javascript and TypeScript settings
"javascript.suggest.enabled": true,
"javascript.suggest.autoImports": true,
"javascript.preferences.importModuleSpecifier": "shortest",
"typescript.suggest.enabled": true,
"typescript.suggest.autoImports": true,
"typescript.suggest.completeFunctionCalls": true,
"typescript.suggest.includeAutomaticOptionalChainCompletions": true,
"typescript.suggestionActions.enabled": true,
"typescript.preferences.importModuleSpecifier": "shortest",
"editor.codeActionsOnSave": { "editor.codeActionsOnSave": {
"source.organizeImports": "explicit", "source.organizeImports": "explicit",
"source.fixAll.eslint": "explicit" "source.fixAll.eslint": "explicit"
@ -11,7 +28,6 @@
"prettier.configPath": ".prettierrc", "prettier.configPath": ".prettierrc",
// other vscode settings // other vscode settings
"tailwindCSS.rootFontSize": 16,
"[handlebars]": { "[handlebars]": {
"editor.defaultFormatter": "vscode.html-language-features" "editor.defaultFormatter": "vscode.html-language-features"
} // <- your root font size here } // <- your root font size here

View File

@ -1,11 +1,11 @@
{ {
"name": "node-server", "name": "server",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"dev:nodebug": "ts-node-dev -r tsconfig-paths/register ./src/index.ts", "dev:nodebug": "ts-node-dev -r tsconfig-paths/register ./src/index.ts",
"dev": "ts-node-dev --transpile-only --respawn --inspect=4321 -r tsconfig-paths/register ./src/index.ts", "dev": "ts-node-dev --rs --transpile-only --respawn --inspect=9229 -r tsconfig-paths/register ./src/index.ts",
"clean": "rm -rf dist", "clean": "rm -rf dist",
"typecheck": "tsc --noEmit", "typecheck": "tsc --noEmit",
"build": "npm run clean && npm run typecheck && esbuild src/index.ts --platform=node --format=cjs --bundle --sourcemap --minify --outdir=dist", "build": "npm run clean && npm run typecheck && esbuild src/index.ts --platform=node --format=cjs --bundle --sourcemap --minify --outdir=dist",
@ -18,8 +18,10 @@
"license": "ISC", "license": "ISC",
"devDependencies": { "devDependencies": {
"@repo/eslint-config": "workspace:*", "@repo/eslint-config": "workspace:*",
"@repo/tsconfig": "workspace:*", "@repo/typescript-config": "workspace:*",
"@types/bcrypt": "^5.0.2", "@types/bcrypt": "^5.0.2",
"@types/dinero.js": "^1.9.4",
"@types/dotenv": "^8.2.3",
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/glob": "^8.1.0", "@types/glob": "^8.1.0",
"@types/jest": "^29.5.14", "@types/jest": "^29.5.14",
@ -40,12 +42,11 @@
"typescript": "^5.7.3" "typescript": "^5.7.3"
}, },
"dependencies": { "dependencies": {
"@types/dinero.js": "^1.9.4",
"bcrypt": "^5.1.1", "bcrypt": "^5.1.1",
"cls-rtracer": "^2.6.3", "cls-rtracer": "^2.6.3",
"cors": "^2.8.5", "cors": "^2.8.5",
"dinero.js": "^1.9.1", "dinero.js": "^1.9.1",
"dotenv": "^16.4.7", "dotenv": "^16.5.0",
"esbuild": "^0.24.0", "esbuild": "^0.24.0",
"express": "^4.18.2", "express": "^4.18.2",
"glob": "^11.0.1", "glob": "^11.0.1",

View File

@ -1,5 +1,4 @@
import { sequelize } from "config/database"; //import { initPackages } from "@/core/package-loader";
import { initPackages } from "core/package-loader";
import dotenv from "dotenv"; import dotenv from "dotenv";
import express, { Application } from "express"; import express, { Application } from "express";
import helmet from "helmet"; import helmet from "helmet";
@ -7,6 +6,7 @@ import responseTime from "response-time";
import { authProvider } from "./contexts/auth/infraestructure"; import { authProvider } from "./contexts/auth/infraestructure";
import { logger } from "./core/common/infrastructure/logger"; import { logger } from "./core/common/infrastructure/logger";
import { globalErrorHandler } from "./core/common/presentation"; import { globalErrorHandler } from "./core/common/presentation";
import { v1Routes } from "./routes";
dotenv.config(); dotenv.config();
@ -48,8 +48,8 @@ export function createApp(): Application {
}); });
// Registrar rutas de la API // Registrar rutas de la API
// app.use("/api/v1", v1Routes()); app.use("/api/v1", v1Routes());
initPackages(app, sequelize); // initPackages(app, sequelize);
// Gestión global de errores. // Gestión global de errores.
// Siempre al final de la cadena de middlewares // Siempre al final de la cadena de middlewares

View File

@ -1,48 +1,84 @@
import { logger } from "core/common/infrastructure/logger"; import { logger } from "@/core/common/infrastructure/logger";
import dotenv from "dotenv"; import dotenv from "dotenv";
import { Sequelize } from "sequelize"; import { Sequelize } from "sequelize";
import { registerModels } from "./register-models";
dotenv.config(); dotenv.config();
export const sequelize = new Sequelize( let sequelizeInstance: Sequelize | null = null;
process.env.DB_NAME as string, // database
process.env.DB_USER as string, // username export function getDatabase(): Sequelize {
process.env.DB_PASSWORD as string, // password if (sequelizeInstance) {
{ return sequelizeInstance;
host: process.env.DB_HOST as string, }
dialect: "mysql",
port: parseInt(process.env.DB_PORT || "3306", 10), sequelizeInstance = new Sequelize(
dialectOptions: { process.env.DB_NAME as string,
multipleStatements: true, process.env.DB_USER as string,
dateStrings: true, process.env.DB_PASSWORD as string,
typeCast: true, {
//timezone: "Z", host: process.env.DB_HOST as string,
}, dialect: "mysql",
pool: { port: parseInt(process.env.DB_PORT || "3306", 10),
max: 10, dialectOptions: {
min: 0, multipleStatements: true,
acquire: 30000, dateStrings: true,
idle: 10000, typeCast: true,
}, },
logQueryParameters: true, pool: {
logging: process.env.DB_LOGGING === "true" ? logger.debug : false, max: 10,
define: { min: 0,
charset: "utf8mb4", acquire: 30000,
collate: "utf8mb4_unicode_ci", idle: 10000,
//freezeTableName: true, },
underscored: true, logQueryParameters: true,
timestamps: true, logging: process.env.DB_LOGGING === "true" ? logger.debug : false,
}, define: {
} charset: "utf8mb4",
); collate: "utf8mb4_unicode_ci",
underscored: true,
timestamps: true,
},
}
);
return sequelizeInstance;
}
export async function tryConnectToDatabase() {
const database = getDatabase();
if (!database) {
const error = new Error("❌ Database not found.");
logger.error({
message: error.message,
label: "tryConnectToDatabase",
});
throw error;
}
logger.info({ message: `🔸 Connecting to database...`, label: "tryConnectToDatabase" });
export async function connectToDatabase(): Promise<void> {
try { try {
await sequelize.authenticate(); await database.authenticate();
//await registerModels(); await registerModels(database);
logger.info(`✔️${" "}Database connection established successfully.`);
logger.info({
message: `✔️${" "}Database connection established successfully.`,
label: "tryConnectToDatabase",
meta: {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
database: process.env.DB_NAME,
user: process.env.DB_USER,
},
});
return database;
} catch (error) { } catch (error) {
logger.error("❌ Unable to connect to the database:", error); logger.error({
process.exit(1); message: `❌ Unable to connect to the database: ${(error as Error).message}`,
error,
label: "tryConnectToDatabase",
});
throw error;
} }
} }

View File

@ -1,13 +1,21 @@
import { logger } from "core/common/infrastructure/logger"; import { logger } from "@/core/common/infrastructure/logger";
import * as glob from "glob"; import * as glob from "glob";
import * as path from "path"; import * as path from "path";
import { DataTypes } from "sequelize"; import { DataTypes, Sequelize } from "sequelize";
import { sequelize } from "./database";
/** /**
* 🔹 Registra todos los modelos en Sequelize * 🔹 Registra todos los modelos en Sequelize
*/ */
export const registerModels = async () => { export const registerModels = async (database: Sequelize) => {
if (!database) {
const error = new Error("❌ Database not found.");
logger.error({
message: error.message,
label: "initModels",
});
throw error;
}
const cwd = path.resolve(`${__dirname}/../`); const cwd = path.resolve(`${__dirname}/../`);
const models: { [key: string]: any } = {}; const models: { [key: string]: any } = {};
@ -25,42 +33,46 @@ export const registerModels = async () => {
// Buscamos los ficheros que terminen en .model.js o .model.ts // Buscamos los ficheros que terminen en .model.js o .model.ts
glob.sync("**/*.model.{js,ts}", globOptions).forEach((file) => { glob.sync("**/*.model.{js,ts}", globOptions).forEach((file) => {
//logger.info(`📄 File >> ${file}...`); //logger.info(`📄 File >> ${file}...`);
const modelDef = require(path.join(file)).default; const modelFile = require(path.resolve(cwd, file));
const model = typeof modelDef === "function" ? modelDef(sequelize, DataTypes) : false; const modelDef = modelFile.default;
const model = typeof modelDef === "function" ? modelDef(database, DataTypes) : false;
if (model) { if (model) {
models[model.name] = model; models[model.name] = model;
logger.info(`🔸 Model >> ${model.name} (${file})`); logger.info({
message: `🔸 Model "${model.name}" registered (sequelize)`,
label: "registerModels",
});
} else { } else {
logger.info(`🚫 No model`); logger.info({ message: `🚫 No model`, label: "registerModels" });
} }
}); });
// Asociaciones y hooks de los modelos, si existen
for (const modelName in models) {
const model = models[modelName];
if (model.associate) {
model.associate(sequelize, models);
}
if (model.hooks) {
model.hooks(sequelize);
}
}
} catch (error) { } catch (error) {
logger.error("❌ Error registering models:", error); logger.error("❌ Error registering models:", error);
process.exit(1); process.exit(1);
} }
// Configurar asociaciones
Object.values(models).forEach((model) => {
if (typeof model.associate === "function") {
model.associate(database);
}
});
try { try {
// Sincronizamos DB en modo desarrollo // Sincronizamos DB en modo desarrollo
if (process.env.NODE_ENV !== "production") { if (process.env.NODE_ENV !== "production") {
await sequelize.sync({ force: false, alter: true }); await database.sync({ force: false, alter: true });
logger.info(`✔️${" "}Database synchronized successfully.`); logger.info({ message: `✔️${" "}Database synchronized successfully.`, label: "initModels" });
} else { } else {
logger.warning("⚠️ Running in production mode - Skipping database sync."); logger.warning({
message: "⚠️ Running in production mode - Skipping database sync.",
label: "initModels",
});
} }
} catch (error) { } catch (err) {
logger.error("❌ Error synchronizing database:", error); const error = err as Error;
process.exit(1); logger.error({ message: "❌ Error synchronizing database:", error, label: "initModels" });
throw error;
} }
}; };

View File

@ -1,9 +1,15 @@
import { EmailAddress, PhoneNumber, PostalAddress, TINNumber, UniqueID } from "core/common/domain"; import {
EmailAddress,
PhoneNumber,
PostalAddress,
TINNumber,
UniqueID,
} from "@/core/common/domain";
import { Account, AccountStatus, IAccountProps, IAccountService } from "@contexts/accounts/domain"; import { Account, AccountStatus, IAccountProps, IAccountService } from "@/contexts/accounts/domain";
import { Maybe, Result } from "core/common/helpers"; import { Maybe, Result } from "@/core/common/helpers";
import { ITransactionManager } from "core/common/infrastructure/database"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { logger } from "core/common/infrastructure/logger"; import { logger } from "@/core/common/infrastructure/logger";
import { ICreateAccountRequestDTO } from "../presentation"; import { ICreateAccountRequestDTO } from "../presentation";
export class CreateAccountUseCase { export class CreateAccountUseCase {

View File

@ -1,8 +1,8 @@
import { Account, IAccountService } from "@contexts/accounts/domain"; import { Account, IAccountService } from "@/contexts/accounts/domain";
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { ITransactionManager } from "core/common/infrastructure/database"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { logger } from "core/common/infrastructure/logger"; import { logger } from "@/core/common/infrastructure/logger";
export class GetAccountUseCase { export class GetAccountUseCase {
constructor( constructor(

View File

@ -1,7 +1,7 @@
import { Account, IAccountService } from "@contexts/accounts/domain"; import { Account, IAccountService } from "@/contexts/accounts/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { ITransactionManager } from "core/common/infrastructure/database"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { logger } from "core/common/infrastructure/logger"; import { logger } from "@/core/common/infrastructure/logger";
export class ListAccountsUseCase { export class ListAccountsUseCase {
constructor( constructor(

View File

@ -1,6 +1,6 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { TransactionManager } from "core/common/infrastructure/database"; import { TransactionManager } from "@/core/common/infrastructure/database";
import { AccountService } from "../domain"; import { AccountService } from "../domain";
import { UpdateAccountUseCase } from "./update-account.use-case"; import { UpdateAccountUseCase } from "./update-account.use-case";

View File

@ -1,9 +1,15 @@
import { EmailAddress, PhoneNumber, PostalAddress, TINNumber, UniqueID } from "core/common/domain"; import {
EmailAddress,
PhoneNumber,
PostalAddress,
TINNumber,
UniqueID,
} from "@/core/common/domain";
import { Account, IAccountProps, IAccountService } from "@contexts/accounts/domain"; import { Account, IAccountProps, IAccountService } from "@/contexts/accounts/domain";
import { Maybe, Result } from "core/common/helpers"; import { Maybe, Result } from "@/core/common/helpers";
import { ITransactionManager } from "core/common/infrastructure/database"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { logger } from "core/common/infrastructure/logger"; import { logger } from "@/core/common/infrastructure/logger";
import { IUpdateAccountRequestDTO } from "../presentation"; import { IUpdateAccountRequestDTO } from "../presentation";
export class UpdateAccountUseCase { export class UpdateAccountUseCase {

View File

@ -5,8 +5,8 @@ import {
PostalAddress, PostalAddress,
TINNumber, TINNumber,
UniqueID, UniqueID,
} from "core/common/domain"; } from "@/core/common/domain";
import { Maybe, Result } from "core/common/helpers"; import { Maybe, Result } from "@/core/common/helpers";
import { AccountStatus } from "../value-objects"; import { AccountStatus } from "../value-objects";
export interface IAccountProps { export interface IAccountProps {

View File

@ -1,5 +1,5 @@
import { EmailAddress, UniqueID } from "core/common/domain"; import { EmailAddress, UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { Account } from "../aggregates"; import { Account } from "../aggregates";
export interface IAccountRepository { export interface IAccountRepository {

View File

@ -1,5 +1,11 @@
import { EmailAddress, PhoneNumber, PostalAddress, TINNumber, UniqueID } from "core/common/domain"; import {
import { Maybe, Result } from "core/common/helpers"; EmailAddress,
PhoneNumber,
PostalAddress,
TINNumber,
UniqueID,
} from "@/core/common/domain";
import { Maybe, Result } from "@/core/common/helpers";
import { Account, IAccountProps } from "../aggregates"; import { Account, IAccountProps } from "../aggregates";
import { IAccountRepository } from "../repositories"; import { IAccountRepository } from "../repositories";
import { AccountStatus } from "../value-objects"; import { AccountStatus } from "../value-objects";

View File

@ -1,5 +1,5 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { Account, IAccountProps } from "../aggregates"; import { Account, IAccountProps } from "../aggregates";
export interface IAccountService { export interface IAccountService {

View File

@ -1,4 +1,4 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Account } from "../aggregates"; import { Account } from "../aggregates";
import { IAccountRepository } from "../repositories"; import { IAccountRepository } from "../repositories";
import { AccountService } from "./account.service"; import { AccountService } from "./account.service";

View File

@ -1,5 +1,5 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { Transaction } from "sequelize"; import { Transaction } from "sequelize";
import { Account, IAccountProps } from "../aggregates"; import { Account, IAccountProps } from "../aggregates";
import { IAccountRepository } from "../repositories"; import { IAccountRepository } from "../repositories";

View File

@ -1,5 +1,5 @@
import { ValueObject } from "core/common/domain"; import { ValueObject } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
interface IAccountStatusProps { interface IAccountStatusProps {
value: string; value: string;

View File

@ -1,11 +1,17 @@
import { Account, AccountStatus } from "@contexts/accounts/domain/"; import { Account, AccountStatus } from "@/contexts/accounts/domain/";
import { EmailAddress, PhoneNumber, PostalAddress, TINNumber, UniqueID } from "core/common/domain"; import {
import { Maybe, Result } from "core/common/helpers"; EmailAddress,
PhoneNumber,
PostalAddress,
TINNumber,
UniqueID,
} from "@/core/common/domain";
import { Maybe, Result } from "@/core/common/helpers";
import { import {
ISequelizeMapper, ISequelizeMapper,
MapperParamsType, MapperParamsType,
SequelizeMapper, SequelizeMapper,
} from "core/common/infrastructure/sequelize/sequelize-mapper"; } from "@/core/common/infrastructure/sequelize/sequelize-mapper";
import { AccountCreationAttributes, AccountModel } from "../sequelize/account.model"; import { AccountCreationAttributes, AccountModel } from "../sequelize/account.model";
export interface IAccountMapper export interface IAccountMapper

View File

@ -1,8 +1,8 @@
import { Account } from "@contexts/accounts/domain"; import { Account } from "@/contexts/accounts/domain";
import { IAccountRepository } from "@contexts/accounts/domain/repositories/account-repository.interface"; import { IAccountRepository } from "@/contexts/accounts/domain/repositories/account-repository.interface";
import { EmailAddress, UniqueID } from "core/common/domain"; import { EmailAddress, UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { SequelizeRepository } from "core/common/infrastructure"; import { SequelizeRepository } from "@/core/common/infrastructure";
import { Transaction } from "sequelize"; import { Transaction } from "sequelize";
import { accountMapper, IAccountMapper } from "../mappers/account.mapper"; import { accountMapper, IAccountMapper } from "../mappers/account.mapper";
import { AccountModel } from "./account.model"; import { AccountModel } from "./account.model";

View File

@ -1,4 +1,4 @@
import { IAccountRepository } from "@contexts/accounts/domain/repositories/account-repository.interface"; import { IAccountRepository } from "@/contexts/accounts/domain/repositories/account-repository.interface";
import { accountRepository } from "./account.repository"; import { accountRepository } from "./account.repository";
export * from "./account.model"; export * from "./account.model";

View File

@ -1,5 +1,5 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { ExpressController } from "core/common/presentation"; import { ExpressController } from "@/core/common/presentation";
import { CreateAccountUseCase } from "../../../application"; import { CreateAccountUseCase } from "../../../application";
import { ICreateAccountRequestDTO } from "../../dto"; import { ICreateAccountRequestDTO } from "../../dto";
import { ICreateAccountPresenter } from "./create-account.presenter"; import { ICreateAccountPresenter } from "./create-account.presenter";

View File

@ -1,5 +1,5 @@
import { Account } from "@contexts/accounts/domain"; import { Account } from "@/contexts/accounts/domain";
import { ensureBoolean, ensureNumber, ensureString } from "core/common/helpers"; import { ensureBoolean, ensureNumber, ensureString } from "@/core/common/helpers";
import { ICreateAccountResponseDTO } from "../../dto"; import { ICreateAccountResponseDTO } from "../../dto";
export interface ICreateAccountPresenter { export interface ICreateAccountPresenter {

View File

@ -1,7 +1,7 @@
import { CreateAccountUseCase } from "@contexts/accounts/application/create-account.use-case"; import { CreateAccountUseCase } from "@/contexts/accounts/application/create-account.use-case";
import { AccountService } from "@contexts/accounts/domain"; import { AccountService } from "@/contexts/accounts/domain";
import { accountRepository } from "@contexts/accounts/infraestructure"; import { accountRepository } from "@/contexts/accounts/infraestructure";
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { CreateAccountController } from "./create-account.controller"; import { CreateAccountController } from "./create-account.controller";
import { createAccountPresenter } from "./create-account.presenter"; import { createAccountPresenter } from "./create-account.presenter";

View File

@ -1,6 +1,6 @@
import { GetAccountUseCase } from "@contexts/accounts/application"; import { GetAccountUseCase } from "@/contexts/accounts/application";
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { ExpressController } from "core/common/presentation"; import { ExpressController } from "@/core/common/presentation";
import { IGetAccountPresenter } from "./get-account.presenter"; import { IGetAccountPresenter } from "./get-account.presenter";
export class GetAccountController extends ExpressController { export class GetAccountController extends ExpressController {

View File

@ -1,5 +1,5 @@
import { Account } from "@contexts/accounts/domain"; import { Account } from "@/contexts/accounts/domain";
import { ensureBoolean, ensureNumber, ensureString } from "core/common/helpers"; import { ensureBoolean, ensureNumber, ensureString } from "@/core/common/helpers";
import { IGetAccountResponseDTO } from "../../dto"; import { IGetAccountResponseDTO } from "../../dto";
export interface IGetAccountPresenter { export interface IGetAccountPresenter {

View File

@ -1,7 +1,7 @@
import { GetAccountUseCase } from "@contexts/accounts/application"; import { GetAccountUseCase } from "@/contexts/accounts/application";
import { AccountService } from "@contexts/accounts/domain"; import { AccountService } from "@/contexts/accounts/domain";
import { accountRepository } from "@contexts/accounts/infraestructure"; import { accountRepository } from "@/contexts/accounts/infraestructure";
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { GetAccountController } from "./get-account.controller"; import { GetAccountController } from "./get-account.controller";
import { getAccountPresenter } from "./get-account.presenter"; import { getAccountPresenter } from "./get-account.presenter";

View File

@ -1,7 +1,7 @@
import { ListAccountsUseCase } from "@contexts/accounts/application"; import { ListAccountsUseCase } from "@/contexts/accounts/application";
import { AccountService } from "@contexts/accounts/domain"; import { AccountService } from "@/contexts/accounts/domain";
import { accountRepository } from "@contexts/accounts/infraestructure"; import { accountRepository } from "@/contexts/accounts/infraestructure";
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { ListAccountsController } from "./list-accounts.controller"; import { ListAccountsController } from "./list-accounts.controller";
import { listAccountsPresenter } from "./list-accounts.presenter"; import { listAccountsPresenter } from "./list-accounts.presenter";

View File

@ -1,5 +1,5 @@
import { ListAccountsUseCase } from "@contexts/accounts/application"; import { ListAccountsUseCase } from "@/contexts/accounts/application";
import { ExpressController } from "core/common/presentation"; import { ExpressController } from "@/core/common/presentation";
import { IListAccountsPresenter } from "./list-accounts.presenter"; import { IListAccountsPresenter } from "./list-accounts.presenter";
export class ListAccountsController extends ExpressController { export class ListAccountsController extends ExpressController {

View File

@ -1,5 +1,5 @@
import { Account } from "@contexts/accounts/domain"; import { Account } from "@/contexts/accounts/domain";
import { Collection, ensureBoolean, ensureNumber, ensureString } from "core/common/helpers"; import { Collection, ensureBoolean, ensureNumber, ensureString } from "@/core/common/helpers";
import { IListAccountsResponseDTO } from "../../dto"; import { IListAccountsResponseDTO } from "../../dto";
export interface IListAccountsPresenter { export interface IListAccountsPresenter {

View File

@ -1,7 +1,7 @@
import { UpdateAccountUseCase } from "@contexts/accounts/application"; import { UpdateAccountUseCase } from "@/contexts/accounts/application";
import { AccountService } from "@contexts/accounts/domain"; import { AccountService } from "@/contexts/accounts/domain";
import { accountRepository } from "@contexts/accounts/infraestructure"; import { accountRepository } from "@/contexts/accounts/infraestructure";
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { UpdateAccountController } from "./update-account.controller"; import { UpdateAccountController } from "./update-account.controller";
import { updateAccountPresenter } from "./update-account.presenter"; import { updateAccountPresenter } from "./update-account.presenter";

View File

@ -1,6 +1,6 @@
import { UpdateAccountUseCase } from "@contexts/accounts/application/update-account.use-case"; import { UpdateAccountUseCase } from "@/contexts/accounts/application/update-account.use-case";
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { ExpressController } from "core/common/presentation"; import { ExpressController } from "@/core/common/presentation";
import { IUpdateAccountRequestDTO } from "../../dto"; import { IUpdateAccountRequestDTO } from "../../dto";
import { IUpdateAccountPresenter } from "./update-account.presenter"; import { IUpdateAccountPresenter } from "./update-account.presenter";

View File

@ -1,5 +1,5 @@
import { Account } from "@contexts/accounts/domain"; import { Account } from "@/contexts/accounts/domain";
import { ensureBoolean, ensureNumber, ensureString } from "core/common/helpers"; import { ensureBoolean, ensureNumber, ensureString } from "@/core/common/helpers";
import { IUpdateAccountResponseDTO } from "../../dto"; import { IUpdateAccountResponseDTO } from "../../dto";
export interface IUpdateAccountPresenter { export interface IUpdateAccountPresenter {

View File

@ -1,7 +1,7 @@
import { User } from "@contexts/auth/domain"; import { Collection, Result } from "@/core/common/helpers";
import { IUserService } from "@contexts/auth/domain/services"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { Collection, Result } from "core/common/helpers"; import { User } from "../../domain";
import { ITransactionManager } from "core/common/infrastructure/database"; import { IUserService } from "../../domain/services";
export class ListUsersUseCase { export class ListUsersUseCase {
constructor( constructor(

View File

@ -1,6 +1,6 @@
import { LoginData } from "@contexts/auth/domain"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { IAuthService } from "@contexts/auth/domain/services"; import { LoginData } from "../../domain";
import { ITransactionManager } from "core/common/infrastructure/database"; import { IAuthService } from "../../domain/services";
export class LoginUseCase { export class LoginUseCase {
constructor( constructor(

View File

@ -1,6 +1,6 @@
import { LogoutData } from "@contexts/auth/domain"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { IAuthService } from "@contexts/auth/domain/services"; import { LogoutData } from "../../domain";
import { ITransactionManager } from "core/common/infrastructure/database"; import { IAuthService } from "../../domain/services";
export class LogoutUseCase { export class LogoutUseCase {
constructor( constructor(

View File

@ -1,6 +1,6 @@
import { Token } from "@contexts/auth/domain"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { IAuthService } from "@contexts/auth/domain/services"; import { Token } from "../../domain";
import { ITransactionManager } from "core/common/infrastructure/database"; import { IAuthService } from "../../domain/services";
export class RefreshTokenUseCase { export class RefreshTokenUseCase {
constructor( constructor(

View File

@ -1,8 +1,8 @@
import { RegisterData } from "@contexts/auth/domain"; import { Result } from "@/core/common/helpers";
import { IAuthService } from "@contexts/auth/domain/services"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { Result } from "core/common/helpers"; import { logger } from "@/core/common/infrastructure/logger";
import { ITransactionManager } from "core/common/infrastructure/database"; import { RegisterData } from "../../domain";
import { logger } from "core/common/infrastructure/logger"; import { IAuthService } from "../../domain/services";
export class RegisterUseCase { export class RegisterUseCase {
constructor( constructor(

View File

@ -1,6 +1,6 @@
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { AggregateRoot, EmailAddress, UniqueID } from "core/common/domain"; import { AggregateRoot, EmailAddress, UniqueID } from "@/core/common/domain";
import { UserAuthenticatedEvent } from "../events"; import { UserAuthenticatedEvent } from "../events";
import { HashPassword, PlainPassword, Username } from "../value-objects"; import { HashPassword, PlainPassword, Username } from "../value-objects";

View File

@ -1,5 +1,5 @@
import { AggregateRoot, UniqueID } from "core/common/domain"; import { AggregateRoot, UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
export interface IRoleProps {} export interface IRoleProps {}

View File

@ -1,5 +1,5 @@
import { AggregateRoot, EmailAddress, UniqueID } from "core/common/domain"; import { AggregateRoot, EmailAddress, UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { UserAuthenticatedEvent } from "../events"; import { UserAuthenticatedEvent } from "../events";
import { Username } from "../value-objects"; import { Username } from "../value-objects";

View File

@ -1,5 +1,5 @@
import { DomainEntity, EmailAddress, UniqueID } from "core/common/domain"; import { DomainEntity, EmailAddress, UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
export interface IJWTPayloadProps { export interface IJWTPayloadProps {
tabId: UniqueID; tabId: UniqueID;

View File

@ -1,5 +1,5 @@
import { DomainEntity, EmailAddress, UniqueID } from "core/common/domain"; import { DomainEntity, EmailAddress, UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { PlainPassword } from "../value-objects"; import { PlainPassword } from "../value-objects";
export interface ILoginDataProps { export interface ILoginDataProps {

View File

@ -1,5 +1,5 @@
import { DomainEntity, EmailAddress, UniqueID } from "core/common/domain"; import { DomainEntity, EmailAddress, UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
export interface ILogoutDataProps { export interface ILogoutDataProps {
email: EmailAddress; email: EmailAddress;

View File

@ -1,5 +1,5 @@
import { DomainEntity, EmailAddress } from "core/common/domain"; import { DomainEntity, EmailAddress } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { HashPassword, Username } from "../value-objects"; import { HashPassword, Username } from "../value-objects";
export interface IRegisterDataProps { export interface IRegisterDataProps {

View File

@ -1,5 +1,5 @@
import { DomainEntity, UniqueID } from "core/common/domain"; import { DomainEntity, UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
export interface ITabContextProps { export interface ITabContextProps {
tabId: UniqueID; tabId: UniqueID;

View File

@ -1,4 +1,4 @@
import { IDomainEvent, UniqueID } from "core/common/domain"; import { IDomainEvent, UniqueID } from "@/core/common/domain";
export class UserAuthenticatedEvent implements IDomainEvent { export class UserAuthenticatedEvent implements IDomainEvent {
public readonly eventName = "UserAuthenticated"; public readonly eventName = "UserAuthenticated";

View File

@ -1,6 +1,6 @@
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { EmailAddress } from "core/common/domain"; import { EmailAddress } from "@/core/common/domain";
import { AuthenticatedUser } from "../aggregates"; import { AuthenticatedUser } from "../aggregates";
import { Username } from "../value-objects"; import { Username } from "../value-objects";

View File

@ -1,5 +1,5 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { Transaction } from "sequelize"; import { Transaction } from "sequelize";
import { TabContext } from "../entities"; import { TabContext } from "../entities";

View File

@ -1,5 +1,5 @@
import { EmailAddress, UniqueID } from "core/common/domain"; import { EmailAddress, UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { User } from "../aggregates"; import { User } from "../aggregates";
export interface IUserRepository { export interface IUserRepository {

View File

@ -1,5 +1,5 @@
import { EmailAddress } from "core/common/domain"; import { EmailAddress } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { import {
AuthenticatedUser, AuthenticatedUser,
IJWTPayload, IJWTPayload,

View File

@ -1,8 +1,8 @@
import { EmailAddress } from "core/common/domain"; import { EmailAddress } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { AuthenticatedUser, IJWTPayload, LoginData, RegisterData, TabContext, Token } from ".."; import { AuthenticatedUser, IJWTPayload, LoginData, RegisterData, TabContext, Token } from "..";
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { IAuthenticatedUserRepository, JWTPayload } from ".."; import { IAuthenticatedUserRepository, JWTPayload } from "..";
import { JwtHelper } from "../../infraestructure/passport/jwt.helper"; import { JwtHelper } from "../../infraestructure/passport/jwt.helper";
import { ITabContextRepository } from "../repositories/tab-context-repository.interface"; import { ITabContextRepository } from "../repositories/tab-context-repository.interface";

View File

@ -1,5 +1,5 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { TabContext } from "../entities"; import { TabContext } from "../entities";
export interface ITabContextService { export interface ITabContextService {

View File

@ -1,5 +1,5 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { TabContext } from "../entities"; import { TabContext } from "../entities";
import { ITabContextRepository } from "../repositories"; import { ITabContextRepository } from "../repositories";
import { ITabContextService } from "./tab-context-service.interface"; import { ITabContextService } from "./tab-context-service.interface";

View File

@ -1,5 +1,5 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { User } from "../aggregates"; import { User } from "../aggregates";
export interface IUserService { export interface IUserService {

View File

@ -1,5 +1,5 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { IUserRepository, User } from ".."; import { IUserRepository, User } from "..";
import { IUserService } from "./user-service.interface"; import { IUserService } from "./user-service.interface";

View File

@ -1,5 +1,5 @@
import { ValueObject } from "core/common/domain"; import { ValueObject } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { z } from "zod"; import { z } from "zod";
const RoleSchema = z.enum(["Admin", "User", "Manager", "Editor"]); const RoleSchema = z.enum(["Admin", "User", "Manager", "Editor"]);

View File

@ -1,6 +1,5 @@
import bcrypt from "bcrypt"; import { ValueObject } from "@/core/common/domain";
import { ValueObject } from "core/common/domain"; import { Result } from "@/core/common/helpers";
import { Result } from "core/common/helpers";
import { z } from "zod"; import { z } from "zod";
interface HashPasswordProps { interface HashPasswordProps {
@ -41,4 +40,8 @@ export class HashPassword extends ValueObject<HashPasswordProps> {
toString() { toString() {
return this.props.value; return this.props.value;
} }
toPrimitive() {
return this.props.value;
}
} }

View File

@ -1,5 +1,5 @@
import { ValueObject } from "core/common/domain"; import { ValueObject } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { z } from "zod"; import { z } from "zod";
interface PlainPasswordProps { interface PlainPasswordProps {

View File

@ -1,5 +1,5 @@
import { ValueObject } from "core/common/domain"; import { ValueObject } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { z } from "zod"; import { z } from "zod";
interface TokenProps { interface TokenProps {

View File

@ -1,5 +1,5 @@
import { ValueObject } from "core/common/domain"; import { ValueObject } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { z } from "zod"; import { z } from "zod";
interface UsernameProps { interface UsernameProps {
@ -34,4 +34,8 @@ export class Username extends ValueObject<UsernameProps> {
toString() { toString() {
return this.props.value; return this.props.value;
} }
toPrimitive() {
return this.props.value;
}
} }

View File

@ -1,5 +1,5 @@
import { AuthenticatedUser, TabContext } from "@contexts/auth/domain";
import { Request } from "express"; import { Request } from "express";
import { AuthenticatedUser, TabContext } from "../../domain";
export interface TabContextRequest extends Request { export interface TabContextRequest extends Request {
tabContext?: TabContext; tabContext?: TabContext;

View File

@ -1,7 +1,12 @@
import { AuthenticatedUser, HashPassword, Username } from "@contexts/auth/domain"; import {
import { EmailAddress, UniqueID } from "core/common/domain"; EmailAddress,
import { Result } from "core/common/helpers"; ISequelizeMapper,
import { ISequelizeMapper, MapperParamsType, SequelizeMapper } from "core/common/infrastructure"; MapperParamsType,
Result,
SequelizeMapper,
UniqueID,
} from "@/core";
import { AuthenticatedUser, HashPassword, Username } from "../../domain";
import { AuthUserCreationAttributes, AuthUserModel } from "../sequelize"; import { AuthUserCreationAttributes, AuthUserModel } from "../sequelize";
export interface IAuthenticatedUserMapper export interface IAuthenticatedUserMapper

View File

@ -1,7 +1,7 @@
import { TabContext } from "@contexts/auth/domain"; import { UniqueID } from "@/core/common/domain";
import { UniqueID } from "core/common/domain"; import { Result } from "@/core/common/helpers";
import { Result } from "core/common/helpers"; import { ISequelizeMapper, MapperParamsType, SequelizeMapper } from "@/core/common/infrastructure";
import { ISequelizeMapper, MapperParamsType, SequelizeMapper } from "core/common/infrastructure"; import { TabContext } from "../../domain";
import { TabContextCreationAttributes, TabContextModel } from "../sequelize"; import { TabContextCreationAttributes, TabContextModel } from "../sequelize";
export interface ITabContextMapper export interface ITabContextMapper

View File

@ -1,11 +1,11 @@
import { User, Username } from "@contexts/auth/domain"; import { EmailAddress, UniqueID } from "@/core/common/domain";
import { EmailAddress, UniqueID } from "core/common/domain"; import { Result } from "@/core/common/helpers";
import { Result } from "core/common/helpers";
import { import {
ISequelizeMapper, ISequelizeMapper,
MapperParamsType, MapperParamsType,
SequelizeMapper, SequelizeMapper,
} from "core/common/infrastructure/sequelize/sequelize-mapper"; } from "@/core/common/infrastructure/sequelize/sequelize-mapper";
import { User, Username } from "../../domain";
import { UserCreationAttributes, UserModel } from "../sequelize"; import { UserCreationAttributes, UserModel } from "../sequelize";
export interface IUserMapper extends ISequelizeMapper<UserModel, UserCreationAttributes, User> {} export interface IUserMapper extends ISequelizeMapper<UserModel, UserCreationAttributes, User> {}

View File

@ -1,7 +1,7 @@
import { AuthenticatedUser } from "@contexts/auth/domain"; import { UniqueID } from "@/core/common/domain";
import { UniqueID } from "core/common/domain"; import { ApiError, ExpressController } from "@/core/common/presentation";
import { ApiError, ExpressController } from "core/common/presentation"; import { AuthenticatedUser } from "../../domain";
//import { authProvider } from "@contexts/auth/infraestructure"; //import { authProvider } from "@/contexts/auth/infraestructure";
import { NextFunction, Response } from "express"; import { NextFunction, Response } from "express";
import { AuthenticatedRequest } from "../express/types"; import { AuthenticatedRequest } from "../express/types";
import { authProvider } from "../passport"; import { authProvider } from "../passport";

View File

@ -1,9 +1,12 @@
import { AuthService, TabContextService } from "@contexts/auth/domain/services"; import { getDatabase } from "@/config";
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { AuthService, TabContextService } from "../../domain/services";
import { authenticatedUserRepository, tabContextRepository } from "../sequelize"; import { authenticatedUserRepository, tabContextRepository } from "../sequelize";
import { PassportAuthProvider } from "./passport-auth-provider"; import { PassportAuthProvider } from "./passport-auth-provider";
const transactionManager = new SequelizeTransactionManager(); const database = getDatabase();
const transactionManager = new SequelizeTransactionManager(database);
const authService = new AuthService(authenticatedUserRepository, tabContextRepository); const authService = new AuthService(authenticatedUserRepository, tabContextRepository);
const tabContextService = new TabContextService(tabContextRepository); const tabContextService = new TabContextService(tabContextRepository);

View File

@ -1,13 +1,13 @@
import { NextFunction, Response } from "express"; import { NextFunction, Response } from "express";
import { TabContext } from "@contexts/auth/domain"; import { EmailAddress, UniqueID } from "@/core/common/domain";
import { IAuthService, ITabContextService } from "@contexts/auth/domain/services"; import { Result } from "@/core/common/helpers";
import { EmailAddress, UniqueID } from "core/common/domain"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { Result } from "core/common/helpers"; import { logger } from "@/core/common/infrastructure/logger";
import { ITransactionManager } from "core/common/infrastructure/database";
import { logger } from "core/common/infrastructure/logger";
import passport from "passport"; import passport from "passport";
import { ExtractJwt, Strategy as JwtStrategy } from "passport-jwt"; import { ExtractJwt, Strategy as JwtStrategy } from "passport-jwt";
import { TabContext } from "../../domain";
import { IAuthService, ITabContextService } from "../../domain/services";
import { TabContextRequest } from "../express/types"; import { TabContextRequest } from "../express/types";
const SECRET_KEY = process.env.JWT_SECRET || "supersecretkey"; const SECRET_KEY = process.env.JWT_SECRET || "supersecretkey";

View File

@ -1,8 +1,8 @@
import { AuthenticatedUser, IAuthenticatedUserRepository, Username } from "@contexts/auth/domain"; import { EmailAddress } from "@/core/common/domain";
import { EmailAddress } from "core/common/domain"; import { Result } from "@/core/common/helpers";
import { Result } from "core/common/helpers"; import { SequelizeRepository } from "@/core/common/infrastructure";
import { SequelizeRepository } from "core/common/infrastructure";
import { Transaction } from "sequelize"; import { Transaction } from "sequelize";
import { AuthenticatedUser, IAuthenticatedUserRepository, Username } from "../../domain";
import { authenticatedUserMapper, IAuthenticatedUserMapper } from "../mappers"; import { authenticatedUserMapper, IAuthenticatedUserMapper } from "../mappers";
import { AuthUserModel } from "./auth-user.model"; import { AuthUserModel } from "./auth-user.model";

View File

@ -1,8 +1,8 @@
import { ITabContextRepository, TabContext } from "@contexts/auth/domain/"; import { UniqueID } from "@/core/common/domain";
import { UniqueID } from "core/common/domain"; import { Result } from "@/core/common/helpers";
import { Result } from "core/common/helpers"; import { SequelizeRepository } from "@/core/common/infrastructure";
import { SequelizeRepository } from "core/common/infrastructure";
import { Op, Transaction } from "sequelize"; import { Op, Transaction } from "sequelize";
import { ITabContextRepository, TabContext } from "../../domain/";
import { ITabContextMapper, tabContextMapper } from "../mappers"; import { ITabContextMapper, tabContextMapper } from "../mappers";
import { TabContextModel } from "./tab-context.model"; import { TabContextModel } from "./tab-context.model";

View File

@ -1,8 +1,8 @@
import { IUserRepository, User } from "@contexts/auth/domain"; import { EmailAddress, UniqueID } from "@/core/common/domain";
import { EmailAddress, UniqueID } from "core/common/domain"; import { Collection, Result } from "@/core/common/helpers";
import { Collection, Result } from "core/common/helpers"; import { SequelizeRepository } from "@/core/common/infrastructure";
import { SequelizeRepository } from "core/common/infrastructure";
import { Transaction } from "sequelize"; import { Transaction } from "sequelize";
import { IUserRepository, User } from "../../domain";
import { IUserMapper, userMapper } from "../mappers"; import { IUserMapper, userMapper } from "../mappers";
import { UserModel } from "./user.model"; import { UserModel } from "./user.model";

View File

@ -1,7 +1,7 @@
import { ListUsersUseCase } from "@contexts/auth/application/list-users/list-users.use-case"; import { ListUsersUseCase } from "@/contexts/auth/application/list-users/list-users.use-case";
import { UserService } from "@contexts/auth/domain/services/user.service"; import { userRepository } from "@/contexts/auth/infraestructure";
import { userRepository } from "@contexts/auth/infraestructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { UserService } from "../../domain/services/user.service";
import { ListUsersController } from "./list-users.controller"; import { ListUsersController } from "./list-users.controller";
import { listUsersPresenter } from "./list-users.presenter"; import { listUsersPresenter } from "./list-users.presenter";

View File

@ -1,5 +1,5 @@
import { ListUsersUseCase } from "@contexts/auth/application"; import { ListUsersUseCase } from "@/contexts/auth/application";
import { ExpressController } from "core/common/presentation"; import { ExpressController } from "@/core/common/presentation";
import { IListUsersPresenter } from "./list-users.presenter"; import { IListUsersPresenter } from "./list-users.presenter";
export class ListUsersController extends ExpressController { export class ListUsersController extends ExpressController {

View File

@ -1,5 +1,5 @@
import { User } from "@contexts/auth/domain"; import { Collection, ensureString } from "@/core/common/helpers";
import { Collection, ensureString } from "core/common/helpers"; import { User } from "../../domain";
import { IListUsersResponseDTO } from "../../dto"; import { IListUsersResponseDTO } from "../../dto";
export interface IListUsersPresenter { export interface IListUsersPresenter {

View File

@ -1,7 +1,7 @@
import { LoginUseCase } from "@contexts/auth/application"; import { LoginUseCase } from "@/contexts/auth/application";
import { AuthService } from "@contexts/auth/domain/services"; import { authenticatedUserRepository, tabContextRepository } from "@/contexts/auth/infraestructure";
import { authenticatedUserRepository, tabContextRepository } from "@contexts/auth/infraestructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { AuthService } from "../../domain/services";
import { LoginController } from "./login.controller"; import { LoginController } from "./login.controller";
import { loginPresenter } from "./login.presenter"; import { loginPresenter } from "./login.presenter";

View File

@ -1,6 +1,6 @@
import { LoginUseCase } from "@contexts/auth/application"; import { LoginUseCase } from "@/contexts/auth/application";
import { LoginData } from "@contexts/auth/domain"; import { ExpressController } from "@/core/common/presentation";
import { ExpressController } from "core/common/presentation"; import { LoginData } from "../../domain";
import { ILoginPresenter } from "./login.presenter"; import { ILoginPresenter } from "./login.presenter";
export class LoginController extends ExpressController { export class LoginController extends ExpressController {

View File

@ -1,4 +1,4 @@
import { AuthenticatedUser, TabContext, Token } from "@contexts/auth/domain"; import { AuthenticatedUser, TabContext, Token } from "../../domain";
import { ILoginUserResponseDTO } from "../../dto"; import { ILoginUserResponseDTO } from "../../dto";
export interface ILoginPresenter { export interface ILoginPresenter {

View File

@ -1,7 +1,7 @@
import { LogoutUseCase } from "@contexts/auth/application"; import { LogoutUseCase } from "@/contexts/auth/application";
import { AuthService } from "@contexts/auth/domain/services"; import { authenticatedUserRepository, tabContextRepository } from "@/contexts/auth/infraestructure";
import { authenticatedUserRepository, tabContextRepository } from "@contexts/auth/infraestructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { AuthService } from "../../domain/services";
import { LogoutController } from "./logout.controller"; import { LogoutController } from "./logout.controller";
export const buildLogoutController = () => { export const buildLogoutController = () => {

View File

@ -1,7 +1,7 @@
import { LogoutUseCase } from "@contexts/auth/application/logout"; import { LogoutUseCase } from "@/contexts/auth/application/logout";
import { AuthenticatedUser, LogoutData, TabContext } from "@contexts/auth/domain"; import { TabContextRequest } from "@/contexts/auth/infraestructure/express/types";
import { TabContextRequest } from "@contexts/auth/infraestructure/express/types"; import { ExpressController } from "@/core/common/presentation";
import { ExpressController } from "core/common/presentation"; import { AuthenticatedUser, LogoutData, TabContext } from "../../domain";
export class LogoutController extends ExpressController { export class LogoutController extends ExpressController {
public constructor(private readonly logout: LogoutUseCase) { public constructor(private readonly logout: LogoutUseCase) {

View File

@ -1,7 +1,7 @@
import { RefreshTokenUseCase } from "@contexts/auth/application"; import { RefreshTokenUseCase } from "@/contexts/auth/application";
import { AuthService } from "@contexts/auth/domain/services"; import { authenticatedUserRepository, tabContextRepository } from "@/contexts/auth/infraestructure";
import { authenticatedUserRepository, tabContextRepository } from "@contexts/auth/infraestructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { AuthService } from "../../domain/services";
import { RefreshTokenController } from "./refresh-token.controller"; import { RefreshTokenController } from "./refresh-token.controller";
import { refreshTokenPresenter } from "./refresh-token.presenter"; import { refreshTokenPresenter } from "./refresh-token.presenter";

View File

@ -1,6 +1,6 @@
import { RefreshTokenUseCase } from "@contexts/auth/application"; import { RefreshTokenUseCase } from "@/contexts/auth/application";
import { Token } from "@contexts/auth/domain"; import { ExpressController } from "@/core/common/presentation";
import { ExpressController } from "core/common/presentation"; import { Token } from "../../domain";
import { IRefreshTokenPresenter } from "./refresh-token.presenter"; import { IRefreshTokenPresenter } from "./refresh-token.presenter";
export class RefreshTokenController extends ExpressController { export class RefreshTokenController extends ExpressController {

View File

@ -1,4 +1,4 @@
import { Token } from "@contexts/auth/domain"; import { Token } from "../../domain";
import { IRefreshTokenResponseDTO } from "../../dto"; import { IRefreshTokenResponseDTO } from "../../dto";
export interface IRefreshTokenPresenter { export interface IRefreshTokenPresenter {

View File

@ -1,7 +1,7 @@
import { RegisterUseCase } from "@contexts/auth/application/register"; import { RegisterUseCase } from "@/contexts/auth/application/register";
import { AuthService } from "@contexts/auth/domain/services"; import { authenticatedUserRepository, tabContextRepository } from "@/contexts/auth/infraestructure";
import { authenticatedUserRepository, tabContextRepository } from "@contexts/auth/infraestructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { AuthService } from "../../domain/services";
import { RegisterController } from "./register.controller"; import { RegisterController } from "./register.controller";
import { registerPresenter } from "./register.presenter"; import { registerPresenter } from "./register.presenter";

View File

@ -1,6 +1,6 @@
import { RegisterUseCase } from "@contexts/auth/application"; import { RegisterUseCase } from "@/contexts/auth/application";
import { RegisterData } from "@contexts/auth/domain"; import { ExpressController } from "@/core/common/presentation";
import { ExpressController } from "core/common/presentation"; import { RegisterData } from "../../domain";
import { IRegisterPresenter } from "./register.presenter"; import { IRegisterPresenter } from "./register.presenter";
export class RegisterController extends ExpressController { export class RegisterController extends ExpressController {

View File

@ -1,4 +1,4 @@
import { AuthenticatedUser } from "@contexts/auth/domain"; import { AuthenticatedUser } from "../../domain";
import { IRegisterUserResponseDTO } from "../../dto"; import { IRegisterUserResponseDTO } from "../../dto";
export interface IRegisterPresenter { export interface IRegisterPresenter {

View File

@ -1,5 +1,5 @@
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { ITransactionManager } from "core/common/infrastructure/database"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { Contact, IContactService } from "../domain"; import { Contact, IContactService } from "../domain";
export class ListContactsUseCase { export class ListContactsUseCase {

View File

@ -5,8 +5,8 @@ import {
PostalAddress, PostalAddress,
TINNumber, TINNumber,
UniqueID, UniqueID,
} from "core/common/domain"; } from "@/core/common/domain";
import { Maybe, Result } from "core/common/helpers"; import { Maybe, Result } from "@/core/common/helpers";
export interface IContactProps { export interface IContactProps {
reference: string; reference: string;

View File

@ -1,5 +1,5 @@
import { EmailAddress, UniqueID } from "core/common/domain"; import { EmailAddress, UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { Contact } from "../aggregates"; import { Contact } from "../aggregates";
export interface IContactRepository { export interface IContactRepository {

View File

@ -1,5 +1,5 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { Contact } from "../aggregates"; import { Contact } from "../aggregates";
export interface IContactService { export interface IContactService {

View File

@ -1,5 +1,5 @@
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { Contact } from "../aggregates"; import { Contact } from "../aggregates";
import { IContactRepository } from "../repositories"; import { IContactRepository } from "../repositories";
import { IContactService } from "./contact-service.interface"; import { IContactService } from "./contact-service.interface";

View File

@ -1,10 +1,16 @@
import { EmailAddress, PhoneNumber, PostalAddress, TINNumber, UniqueID } from "core/common/domain"; import {
import { Maybe, Result } from "core/common/helpers"; EmailAddress,
PhoneNumber,
PostalAddress,
TINNumber,
UniqueID,
} from "@/core/common/domain";
import { Maybe, Result } from "@/core/common/helpers";
import { import {
ISequelizeMapper, ISequelizeMapper,
MapperParamsType, MapperParamsType,
SequelizeMapper, SequelizeMapper,
} from "core/common/infrastructure/sequelize/sequelize-mapper"; } from "@/core/common/infrastructure/sequelize/sequelize-mapper";
import { Contact } from "../../domain"; import { Contact } from "../../domain";
import { ContactCreationAttributes, ContactModel } from "../sequelize/contact.model"; import { ContactCreationAttributes, ContactModel } from "../sequelize/contact.model";

View File

@ -1,6 +1,6 @@
import { EmailAddress, UniqueID } from "core/common/domain"; import { EmailAddress, UniqueID } from "@/core/common/domain";
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { SequelizeRepository } from "core/common/infrastructure"; import { SequelizeRepository } from "@/core/common/infrastructure";
import { Transaction } from "sequelize"; import { Transaction } from "sequelize";
import { Contact, IContactRepository } from "../../domain"; import { Contact, IContactRepository } from "../../domain";
import { contactMapper, IContactMapper } from "../mappers"; import { contactMapper, IContactMapper } from "../mappers";

View File

@ -1,4 +1,4 @@
import { SequelizeTransactionManager } from "core/common/infrastructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure";
import { ListContactsUseCase } from "../../../application"; import { ListContactsUseCase } from "../../../application";
import { ContactService } from "../../../domain"; import { ContactService } from "../../../domain";
import { contactRepository } from "../../../infraestructure"; import { contactRepository } from "../../../infraestructure";

View File

@ -1,4 +1,4 @@
import { ExpressController } from "core/common/presentation"; import { ExpressController } from "@/core/common/presentation";
import { ListContactsUseCase } from "../../../application"; import { ListContactsUseCase } from "../../../application";
import { IListContactsPresenter } from "./list-contacts.presenter"; import { IListContactsPresenter } from "./list-contacts.presenter";

View File

@ -1,4 +1,4 @@
import { Collection, ensureBoolean, ensureNumber, ensureString } from "core/common/helpers"; import { Collection, ensureBoolean, ensureNumber, ensureString } from "@/core/common/helpers";
import { Contact } from "../../../domain"; import { Contact } from "../../../domain";
import { IListContactsResponseDTO } from "../../dto"; import { IListContactsResponseDTO } from "../../dto";

View File

@ -1,8 +1,8 @@
import { ICustomerInvoiceService } from "@contexts/customer-billing/domain"; import { ICustomerInvoiceService } from "@/contexts/customer-billing/domain";
import { CustomerInvoice } from "@contexts/customer-billing/domain/aggregates"; import { CustomerInvoice } from "@/contexts/customer-billing/domain/aggregates";
import { UniqueID } from "core/common/domain"; import { UniqueID } from "@/core/common/domain";
import { Result } from "core/common/helpers"; import { Result } from "@/core/common/helpers";
import { ITransactionManager } from "core/common/infrastructure/database"; import { ITransactionManager } from "@/core/common/infrastructure/database";
export class GetCustomerInvoiceUseCase { export class GetCustomerInvoiceUseCase {
constructor( constructor(

View File

@ -1,5 +1,5 @@
import { Collection, Result } from "core/common/helpers"; import { Collection, Result } from "@/core/common/helpers";
import { ITransactionManager } from "core/common/infrastructure/database"; import { ITransactionManager } from "@/core/common/infrastructure/database";
import { CustomerInvoice, ICustomerInvoiceService } from "../domain"; import { CustomerInvoice, ICustomerInvoiceService } from "../domain";
export class ListCustomerInvoicesUseCase { export class ListCustomerInvoicesUseCase {

View File

@ -1,5 +1,5 @@
import { AggregateRoot, UniqueID, UtcDate } from "core/common/domain"; import { AggregateRoot, UniqueID, UtcDate } from "@/core/common/domain";
import { Maybe, Result } from "core/common/helpers"; import { Maybe, Result } from "@/core/common/helpers";
import { Customer, CustomerInvoiceItem } from "../entities"; import { Customer, CustomerInvoiceItem } from "../entities";
import { InvoiceStatus } from "../value-objetcs"; import { InvoiceStatus } from "../value-objetcs";

Some files were not shown because too many files have changed in this diff Show More