From 5b73b44e79e368c3081a430f66de93ab37d1a597 Mon Sep 17 00:00:00 2001 From: Theis Gaedigk Date: Sun, 2 Nov 2025 21:19:02 +0100 Subject: [PATCH] refactored apiKeys table structure and added new route files for loans and user management --- .../app/database/database.loansMgmt.route.js | 0 .../app/database/database.userMgmt.route.js | 0 backendV2/scheme.xlsx | Bin 12068 -> 12115 bytes backendV2/schemeV2.sql | 4 +++- 4 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 backendV2/routes/app/database/database.loansMgmt.route.js create mode 100644 backendV2/routes/app/database/database.userMgmt.route.js diff --git a/backendV2/routes/app/database/database.loansMgmt.route.js b/backendV2/routes/app/database/database.loansMgmt.route.js new file mode 100644 index 0000000..e69de29 diff --git a/backendV2/routes/app/database/database.userMgmt.route.js b/backendV2/routes/app/database/database.userMgmt.route.js new file mode 100644 index 0000000..e69de29 diff --git a/backendV2/scheme.xlsx b/backendV2/scheme.xlsx index 0c78e654f21850988b3b33d3ded469be7ebffafa..6ccfd7c21205f4f0e9083dbf04e011d2da31b4d9 100644 GIT binary patch delta 3183 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 diff --git a/backendV2/schemeV2.sql b/backendV2/schemeV2.sql index c8dbf6f..79c0c90 100644 --- a/backendV2/schemeV2.sql +++ b/backendV2/schemeV2.sql @@ -47,10 +47,12 @@ CREATE TABLE items ( CREATE TABLE apiKeys ( id int NOT NULL AUTO_INCREMENT, - api_key int NOT NULL UNIQUE, + api_key CHAR(15) NOT NULL UNIQUE, username VARCHAR(100) NOT NULL, + last_used_at timestamp DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, entry_created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), + CONSTRAINT chk_api_key_len CHECK (CHAR_LENGTH(api_key) = 15), CONSTRAINT fk_apikeys_username FOREIGN KEY (username) REFERENCES users(username) ON UPDATE CASCADE