From 33941a23dc090610fe26daa6da8ab240fa4d77eb Mon Sep 17 00:00:00 2001 From: AV77web Date: Tue, 9 Jun 2026 13:15:32 +0200 Subject: [PATCH] modifica a docker compose --- .gitignore | 1 - dist/index.js | 14 +++++++++++++- dist/index.js.map | 2 +- docker-compose.yml | 3 ++- initdb/01_schema.sql | 42 ++++++++++++++++++++++++++++++++++++++++++ src/index.ts | 14 +++++++++++++- 6 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 initdb/01_schema.sql diff --git a/.gitignore b/.gitignore index 6a8cdb0..e14dcd2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,6 @@ dist/ # Variabili d'ambiente (MAI in git) .env .env.* -!.env.example # Log logs/ diff --git a/dist/index.js b/dist/index.js index 0a48415..ef8642f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -12,8 +12,20 @@ dotenv.config(); const app = express(); const port = Number(process.env.PORT) || 3003; app.set("trust proxy", 1); +const allowedOrigins = [ + "http://localhost:5173", + "http://127.0.0.1:5173", + process.env.FRONTEND_URL, +].filter(Boolean); app.use(cors({ - origin: process.env.FRONTEND_URL ?? "http://localhost:5173", + origin(origin, callback) { + if (!origin || allowedOrigins.includes(origin)) { + callback(null, true); + } + else { + callback(new Error("Origin non consentita")); + } + }, credentials: true, })); app.use(express.json()); diff --git a/dist/index.js.map b/dist/index.js.map index 6124ba5..c1eb521 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAE9C,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAC1B,GAAG,CAAC,GAAG,CACL,IAAI,CAAC;IACH,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,uBAAuB;IAC3D,WAAW,EAAE,IAAI;CAClB,CAAC,CACH,CAAC;AACF,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAExB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACnC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;AAChD,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AACrC,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;AACjD,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;AACzC,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AAE/C,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAEtB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;IAC/B,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAE9C,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAC1B,MAAM,cAAc,GAAG;IACrB,uBAAuB;IACvB,uBAAuB;IACvB,OAAO,CAAC,GAAG,CAAC,YAAY;CACzB,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;AAE9B,GAAG,CAAC,GAAG,CACL,IAAI,CAAC;IACH,MAAM,CAAC,MAAM,EAAE,QAAQ;QACrB,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,WAAW,EAAE,IAAI;CAClB,CAAC,CACH,CAAC;AACF,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAExB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACnC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;AAChD,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AACrC,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;AACjD,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;AACzC,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AAE/C,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAEtB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;IAC/B,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index dfa4163..1a1dbfb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,8 @@ services: env_file: - .env environment: - MYSQL_HOST: mysql + DB_HOST: mysql + DB_PORT: 3306 PORT: 3003 ports: - "127.0.0.1:3003:3003" diff --git a/initdb/01_schema.sql b/initdb/01_schema.sql new file mode 100644 index 0000000..84e3c5b --- /dev/null +++ b/initdb/01_schema.sql @@ -0,0 +1,42 @@ +USE provapratica; + +CREATE TABLE IF NOT EXISTS utenti ( + utente_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + nome VARCHAR(100) NOT NULL, + cognome VARCHAR(100) NOT NULL, + email VARCHAR(255) NOT NULL, + password_hash VARCHAR(255) NOT NULL, + ruolo ENUM('DIPENDENTE', 'RESPONSABILE_AMMINISTRATIVO') NOT NULL DEFAULT 'DIPENDENTE', + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (utente_id), + UNIQUE KEY uk_utenti_email (email) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS categorie_spesa ( + categoria_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + descrizione VARCHAR(150) NOT NULL, + PRIMARY KEY (categoria_id), + UNIQUE KEY uk_categorie_spesa_descrizione (descrizione) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS richieste_rimborso ( + richiesta_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + data_inserimento DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + data_spesa DATE NOT NULL, + categoria_id INT UNSIGNED NOT NULL, + importo DECIMAL(10, 2) NOT NULL, + descrizione VARCHAR(500) NOT NULL, + riferimento_giustificativo VARCHAR(255) NULL, + stato ENUM('IN_ATTESA', 'APPROVATA', 'RIFIUTATA', 'LIQUIDATA') NOT NULL DEFAULT 'IN_ATTESA', + dipendente_id INT UNSIGNED NOT NULL, + data_valutazione DATETIME NULL, + responsabile_valutazione_id INT UNSIGNED NULL, + motivazione_rifiuto VARCHAR(500) NULL, + data_liquidazione DATETIME NULL, + PRIMARY KEY (richiesta_id), + CONSTRAINT fk_richieste_categoria FOREIGN KEY (categoria_id) REFERENCES categorie_spesa (categoria_id), + CONSTRAINT fk_richieste_dipendente FOREIGN KEY (dipendente_id) REFERENCES utenti (utente_id), + CONSTRAINT fk_richieste_responsabile FOREIGN KEY (responsabile_valutazione_id) REFERENCES utenti (utente_id), + CONSTRAINT chk_richieste_importo_positivo CHECK (importo > 0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/src/index.ts b/src/index.ts index 04fcbc2..239b0cb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,9 +15,21 @@ const app = express(); const port = Number(process.env.PORT) || 3003; app.set("trust proxy", 1); +const allowedOrigins = [ + "http://localhost:5173", + "http://127.0.0.1:5173", + process.env.FRONTEND_URL, +].filter(Boolean) as string[]; + app.use( cors({ - origin: process.env.FRONTEND_URL ?? "http://localhost:5173", + origin(origin, callback) { + if (!origin || allowedOrigins.includes(origin)) { + callback(null, true); + } else { + callback(new Error("Origin non consentita")); + } + }, credentials: true, }) );