began to refactor backend
This commit is contained in:
@@ -0,0 +1,30 @@
|
|||||||
|
import mysql from "mysql2";
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
const pool = mysql
|
||||||
|
.createPool({
|
||||||
|
host: process.env.DB_HOST,
|
||||||
|
user: process.env.DB_USER,
|
||||||
|
password: process.env.DB_PASSWORD,
|
||||||
|
database: process.env.DB_NAME,
|
||||||
|
})
|
||||||
|
.promise();
|
||||||
|
|
||||||
|
export const loginFunc = async (username, password) => {
|
||||||
|
const [rows] = await pool.query(
|
||||||
|
"SELECT id, username, first_name, last_name, role, is_admin FROM users WHERE username = ? AND password = ?",
|
||||||
|
[username, password]
|
||||||
|
);
|
||||||
|
|
||||||
|
if (rows.length === 0) {
|
||||||
|
return { success: false, reason: "invalid_credentials" };
|
||||||
|
}
|
||||||
|
|
||||||
|
const user = rows[0];
|
||||||
|
if (!user.is_admin) {
|
||||||
|
return { success: false, reason: "not_admin" };
|
||||||
|
}
|
||||||
|
|
||||||
|
return { success: true, data: user };
|
||||||
|
};
|
||||||
|
|||||||
0
backendV2/routes/admin/userDataMgmt.route.js
Normal file
0
backendV2/routes/admin/userDataMgmt.route.js
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import express from "express";
|
||||||
|
import { authenticate, generateToken } from "../services/tokenService.js";
|
||||||
|
const router = express.Router();
|
||||||
|
import nodemailer from "nodemailer";
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
// database funcs import
|
||||||
|
import { loginFunc } from "./database/userMgmt.database.js";
|
||||||
|
|
||||||
|
router.post("/login", async (req, res) => {
|
||||||
|
const result = await loginFunc(req.body.username, req.body.password);
|
||||||
|
|
||||||
|
if (result.success) {
|
||||||
|
const token = await generateToken({
|
||||||
|
username: result.data.username,
|
||||||
|
first_name: result.data.first_name,
|
||||||
|
last_name: result.data.last_name,
|
||||||
|
role: result.data.role,
|
||||||
|
});
|
||||||
|
return res.status(200).json({ message: "Login erfolgreich", token });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.reason === "not_admin") {
|
||||||
|
return res.status(403).json({ message: "Du bist kein Admin" });
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.status(401).json({ message: "Ungültige Anmeldedaten" });
|
||||||
|
});
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import mysql from "mysql2";
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
const pool = mysql
|
||||||
|
.createPool({
|
||||||
|
host: process.env.DB_HOST,
|
||||||
|
user: process.env.DB_USER,
|
||||||
|
password: process.env.DB_PASSWORD,
|
||||||
|
database: process.env.DB_NAME,
|
||||||
|
})
|
||||||
|
.promise();
|
||||||
|
|
||||||
|
export const loginFunc = async (username, password) => {
|
||||||
|
const [result] = await pool.query(
|
||||||
|
"SELECT * FROM users WHERE username = ? AND password = ?",
|
||||||
|
[username, password]
|
||||||
|
);
|
||||||
|
if (result.length > 0) return { success: true, data: result[0] };
|
||||||
|
return { success: false };
|
||||||
|
};
|
||||||
|
|||||||
3
backendV2/routes/app/loanMgmt.route.js
Normal file
3
backendV2/routes/app/loanMgmt.route.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import express from "express";
|
||||||
|
|
||||||
|
const router = express.Router();
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import express from "express";
|
||||||
|
import { authenticate, generateToken } from "../services/tokenService.js";
|
||||||
|
const router = express.Router();
|
||||||
|
import nodemailer from "nodemailer";
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
// database funcs import
|
||||||
|
import { loginFunc } from "./database/userMgmt.database.js";
|
||||||
|
|
||||||
|
router.post("/login", async (req, res) => {
|
||||||
|
const result = await loginFunc(req.body.username, req.body.password);
|
||||||
|
if (result.success) {
|
||||||
|
const token = await generateToken({
|
||||||
|
username: result.data.username,
|
||||||
|
role: result.data.role,
|
||||||
|
});
|
||||||
|
res.status(200).json({ message: "Login successful", token });
|
||||||
|
} else {
|
||||||
|
res.status(401).json({ message: "Invalid credentials" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -4,6 +4,7 @@ CREATE TABLE users (
|
|||||||
id int NOT NULL AUTO_INCREMENT,
|
id int NOT NULL AUTO_INCREMENT,
|
||||||
username varchar(100) NOT NULL UNIQUE,
|
username varchar(100) NOT NULL UNIQUE,
|
||||||
password varchar(255) NOT NULL,
|
password varchar(255) NOT NULL,
|
||||||
|
email varchar(255) NOT NULL,
|
||||||
first_name varchar(255) NOT NULL,
|
first_name varchar(255) NOT NULL,
|
||||||
last_name varchar(255) NOT NULL,
|
last_name varchar(255) NOT NULL,
|
||||||
role int NOT NULL,
|
role int NOT NULL,
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
import cors from "cors";
|
import cors from "cors";
|
||||||
import env from "dotenv";
|
import env from "dotenv";
|
||||||
|
import loansMgmtRouter from "./routes/app/loanMgmt.route.js";
|
||||||
|
import userMgmtRouter from "./routes/app/userMgmt.route.js";
|
||||||
env.config();
|
env.config();
|
||||||
const app = express();
|
const app = express();
|
||||||
const port = 8002;
|
const port = 8002;
|
||||||
|
|
||||||
app.use(cors());
|
app.use(cors());
|
||||||
|
app.use("/api/loans", loansMgmtRouter);
|
||||||
|
app.use("/api/users", userMgmtRouter);
|
||||||
// Increase body size limits to support large CSV JSON payloads
|
// Increase body size limits to support large CSV JSON payloads
|
||||||
app.use(express.urlencoded({ extended: true, limit: "10mb" }));
|
app.use(express.urlencoded({ extended: true, limit: "10mb" }));
|
||||||
app.set("view engine", "ejs");
|
app.set("view engine", "ejs");
|
||||||
|
|||||||
@@ -33,6 +33,21 @@ services:
|
|||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 3
|
retries: 3
|
||||||
|
|
||||||
|
backend_v2:
|
||||||
|
container_name: borrow_system-backend_v2
|
||||||
|
build: ./backendV2
|
||||||
|
ports:
|
||||||
|
- "8004:8004"
|
||||||
|
environment:
|
||||||
|
NODE_ENV: production
|
||||||
|
DB_HOST: mysql_v2
|
||||||
|
DB_USER: root
|
||||||
|
DB_PASSWORD: ${DB_PASSWORD_V2}
|
||||||
|
DB_NAME: borrow_system_v2
|
||||||
|
depends_on:
|
||||||
|
- mysql_v2
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
mysql:
|
mysql:
|
||||||
container_name: borrow_system-mysql
|
container_name: borrow_system-mysql
|
||||||
image: mysql:8.0
|
image: mysql:8.0
|
||||||
@@ -47,5 +62,20 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "3309:3306"
|
- "3309:3306"
|
||||||
|
|
||||||
|
mysql_v2:
|
||||||
|
container_name: borrow_system-mysql-v2
|
||||||
|
image: mysql:8.0
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD_V2}
|
||||||
|
MYSQL_DATABASE: borrow_system_v2
|
||||||
|
TZ: Europe/Berlin
|
||||||
|
volumes:
|
||||||
|
- mysql-v2-data:/var/lib/mysql
|
||||||
|
- ./mysql-timezone.cnf:/etc/mysql/conf.d/timezone.cnf:ro
|
||||||
|
ports:
|
||||||
|
- "3310:3306"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
mysql-data:
|
mysql-data:
|
||||||
|
mysql-v2-data:
|
||||||
|
|||||||
Reference in New Issue
Block a user