Fix: cast DB row to AuthTokenPayload in findUser\n\nCast database RowDataPacket to AuthTokenPayload so generateToken receives the correct type.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
+20
-22
@@ -1,5 +1,8 @@
|
||||
import mysql from "mysql2";
|
||||
import dotenv from "dotenv";
|
||||
import {PRODUCT_ERROR_CODE} from "@stockhome/shared";
|
||||
import {returnErrorCode} from "../../../services/helperFuncs.js";
|
||||
|
||||
dotenv.config();
|
||||
|
||||
const pool = mysql
|
||||
@@ -20,12 +23,7 @@ export const newProduct = async (
|
||||
expiry_date,
|
||||
bottling_date,
|
||||
) => {
|
||||
let newPrice;
|
||||
if (price == "") {
|
||||
newPrice = null;
|
||||
} else {
|
||||
newPrice = price;
|
||||
}
|
||||
const newPrice = price !== "" ? price : null;
|
||||
|
||||
const [result] = await pool.query(
|
||||
"INSERT INTO products (name, description, price, amount, storage_location, expiry_date, bottling_date) VALUES (?, ?, ?, ?, UUID_TO_BIN(?), ?, ?)",
|
||||
@@ -41,10 +39,10 @@ export const newProduct = async (
|
||||
);
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return { code: "sp001" }; // success
|
||||
} else {
|
||||
return { code: "ep001" }; // error
|
||||
return { code: "sp001" };
|
||||
}
|
||||
|
||||
return returnErrorCode(PRODUCT_ERROR_CODE.PRODUCT_NOT_CREATED);
|
||||
};
|
||||
|
||||
export const productDetails = async (uuid) => {
|
||||
@@ -68,9 +66,9 @@ export const productDetails = async (uuid) => {
|
||||
|
||||
if (result.length > 0) {
|
||||
return { code: "sp003", data: result[0] };
|
||||
} else {
|
||||
return { code: "ep003" };
|
||||
}
|
||||
|
||||
return returnErrorCode(PRODUCT_ERROR_CODE.PRODUCT_NOT_FOUND);
|
||||
};
|
||||
|
||||
export const allProducts = async () => {
|
||||
@@ -95,9 +93,9 @@ export const allProducts = async () => {
|
||||
|
||||
if (result.length > 0) {
|
||||
return { code: "sp002", data: result };
|
||||
} else {
|
||||
return { code: "ep002" };
|
||||
}
|
||||
|
||||
return returnErrorCode(PRODUCT_ERROR_CODE.NO_PRODUCTS_FOUND);
|
||||
};
|
||||
|
||||
export const setAmount = async (itemUUID, amount) => {
|
||||
@@ -109,10 +107,10 @@ export const setAmount = async (itemUUID, amount) => {
|
||||
);
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return { code: "sp004" }; // success
|
||||
} else {
|
||||
return { code: "ep004" }; // error
|
||||
return { code: "sp004" };
|
||||
}
|
||||
|
||||
return returnErrorCode(PRODUCT_ERROR_CODE.PRODUCT_AMOUNT_NOT_UPDATED);
|
||||
};
|
||||
|
||||
export const updateItem = async (itemUUID, newValues) => {
|
||||
@@ -133,10 +131,10 @@ export const updateItem = async (itemUUID, newValues) => {
|
||||
);
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return { code: "sp005" }; // success
|
||||
} else {
|
||||
return { code: "ep005" }; // error
|
||||
return { code: "sp005" };
|
||||
}
|
||||
|
||||
return returnErrorCode(PRODUCT_ERROR_CODE.PRODUCT_NOT_UPDATED);
|
||||
};
|
||||
|
||||
export const deleteProduct = async (uuid) => {
|
||||
@@ -146,8 +144,8 @@ export const deleteProduct = async (uuid) => {
|
||||
);
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return { code: "sp006" }; // success
|
||||
} else {
|
||||
return { code: "ep006" }; // error
|
||||
return { code: "sp006" };
|
||||
}
|
||||
|
||||
return returnErrorCode(PRODUCT_ERROR_CODE.PRODUCT_NOT_DELETED);
|
||||
};
|
||||
+10
-8
@@ -1,5 +1,7 @@
|
||||
import mysql from "mysql2";
|
||||
import dotenv from "dotenv";
|
||||
import {STORAGE_ERROR_CODE} from "@stockhome/shared";
|
||||
import {returnErrorCode} from "../../../services/helperFuncs.js";
|
||||
dotenv.config();
|
||||
|
||||
const pool = mysql
|
||||
@@ -18,9 +20,9 @@ export const allStorages = async () => {
|
||||
|
||||
if (result.length > 0) {
|
||||
return { code: "ss001", data: result };
|
||||
} else {
|
||||
return { code: "es001" };
|
||||
}
|
||||
|
||||
return returnErrorCode(STORAGE_ERROR_CODE.NO_STORAGE_LOCATIONS_FOUND);
|
||||
};
|
||||
|
||||
export const newStorage = async (name, description) => {
|
||||
@@ -31,9 +33,9 @@ export const newStorage = async (name, description) => {
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return { code: "ss002" };
|
||||
} else {
|
||||
return { code: "es002" };
|
||||
}
|
||||
|
||||
return returnErrorCode(STORAGE_ERROR_CODE.STORAGE_NOT_CREATED);
|
||||
};
|
||||
|
||||
export const updateStorage = async (uuid, values) => {
|
||||
@@ -44,9 +46,9 @@ export const updateStorage = async (uuid, values) => {
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return { code: "ss003" };
|
||||
} else {
|
||||
return { code: "es003" };
|
||||
}
|
||||
|
||||
return returnErrorCode(STORAGE_ERROR_CODE.STORAGE_NOT_UPDATED);
|
||||
};
|
||||
|
||||
export const deleteStorage = async (uuid) => {
|
||||
@@ -57,7 +59,7 @@ export const deleteStorage = async (uuid) => {
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return { code: "ss004" };
|
||||
} else {
|
||||
return { code: "es004" };
|
||||
}
|
||||
|
||||
return returnErrorCode(STORAGE_ERROR_CODE.STORAGE_NOT_DELETED);
|
||||
};
|
||||
@@ -1,91 +0,0 @@
|
||||
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 findUser = async (username, password) => {
|
||||
const [result] = await pool.query(
|
||||
"SELECT BIN_TO_UUID(uuid) AS uuid, username, first_name, last_name, email, is_admin, is_active, last_login FROM users WHERE username = ? AND password = ?;",
|
||||
[username, password],
|
||||
);
|
||||
|
||||
if (result.length <= 0) {
|
||||
return { code: "eu001" }; // username or password is wrong
|
||||
}
|
||||
|
||||
if (!result[0].is_active) {
|
||||
return { code: "eu002" }; // user is deactivated
|
||||
}
|
||||
|
||||
return { code: "su001", data: result[0] }; // user found
|
||||
};
|
||||
|
||||
export const loginUser = async (username) => {
|
||||
const [result] = await pool.query(
|
||||
"UPDATE users SET last_login = NOW() WHERE username = ?;",
|
||||
[username],
|
||||
);
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return { code: "su002" };
|
||||
} else {
|
||||
return { code: "eu003" };
|
||||
}
|
||||
};
|
||||
|
||||
export const updateSettings = async (payload) => {
|
||||
const appName = payload["app-name"];
|
||||
const currency = payload.currency;
|
||||
|
||||
const [result] = await pool.query(
|
||||
`UPDATE app_settings
|
||||
SET value = CASE name
|
||||
WHEN "app-name" THEN ?
|
||||
WHEN "currency" THEN ?
|
||||
ELSE value
|
||||
END
|
||||
WHERE name IN ("app-name", "currency");`,
|
||||
[appName, currency],
|
||||
);
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return { code: "su003" };
|
||||
} else {
|
||||
return { code: "eu004" };
|
||||
}
|
||||
};
|
||||
|
||||
export const getSettings = async () => {
|
||||
const [result] = await pool.query(`SELECT * FROM app_settings;`);
|
||||
|
||||
if (result.length > 0) {
|
||||
return { code: "su004", result };
|
||||
} else {
|
||||
return { code: "eu005" };
|
||||
}
|
||||
};
|
||||
|
||||
export const changePassword = async (
|
||||
username,
|
||||
currentPasswordUser,
|
||||
newPassword,
|
||||
) => {
|
||||
const [result] = await pool.query(
|
||||
`UPDATE users SET password = ? WHERE username = ? AND password = ?;`,
|
||||
[newPassword, username, currentPasswordUser],
|
||||
);
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return { code: "su005" };
|
||||
} else {
|
||||
return { code: "eu006" };
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,132 @@
|
||||
import mysql, {type ResultSetHeader, type RowDataPacket} from "mysql2/promise";
|
||||
import dotenv from "dotenv";
|
||||
import {GENERAL_ERROR_CODE, USER_ERROR_CODE} from "@stockhome/shared";
|
||||
import {returnErrorCode} from "../../../services/helperFuncs.js";
|
||||
import type { AuthTokenPayload } from "../../../services/tokenService";
|
||||
|
||||
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!,
|
||||
});
|
||||
|
||||
export const findUser = async (username: string, password: string) => {
|
||||
const [result] = await pool.query<RowDataPacket[]>(
|
||||
"SELECT BIN_TO_UUID(uuid) AS uuid, username, first_name, last_name, email, is_admin, is_active, last_login FROM users WHERE username = ? AND password = ?;",
|
||||
[username, password],
|
||||
);
|
||||
|
||||
const userRow = result[0];
|
||||
|
||||
if (!userRow) {
|
||||
return returnErrorCode(USER_ERROR_CODE.WRONG_USERNAME_PASSWORD);
|
||||
}
|
||||
|
||||
// Cast DB row to AuthTokenPayload for token generation / typing
|
||||
const user = userRow as unknown as AuthTokenPayload;
|
||||
|
||||
if (!user.is_active) {
|
||||
return returnErrorCode(USER_ERROR_CODE.USER_IS_DEACTIVATED);
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
code: "SU001",
|
||||
data: user,
|
||||
message: "Successfully found user.",
|
||||
};
|
||||
};
|
||||
|
||||
export const loginUser = async (username: string) => {
|
||||
const [result] = await pool.query<ResultSetHeader>(
|
||||
"UPDATE users SET last_login = NOW() WHERE username = ?;",
|
||||
[username],
|
||||
);
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return {
|
||||
success: true,
|
||||
code: "SU002",
|
||||
data: null,
|
||||
message: "Successfully logged in user.",
|
||||
};
|
||||
} else {
|
||||
return returnErrorCode(GENERAL_ERROR_CODE.UNEXPECTED_SERVER_ERROR);
|
||||
}
|
||||
};
|
||||
|
||||
export const updateSettings = async (payload: {
|
||||
"app-name": string;
|
||||
currency: string;
|
||||
}) => {
|
||||
const appName = payload["app-name"];
|
||||
const currency = payload.currency;
|
||||
|
||||
const [result] = await pool.query<ResultSetHeader>(
|
||||
`UPDATE app_settings
|
||||
SET value = CASE name
|
||||
WHEN "app-name" THEN ?
|
||||
WHEN "currency" THEN ?
|
||||
ELSE value
|
||||
END
|
||||
WHERE name IN ("app-name", "currency");`,
|
||||
[appName, currency],
|
||||
);
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return {
|
||||
success: true,
|
||||
code: "SU003",
|
||||
data: null,
|
||||
message: "Successfully updated settings.",
|
||||
};
|
||||
} else {
|
||||
return returnErrorCode(GENERAL_ERROR_CODE.UNEXPECTED_SERVER_ERROR);
|
||||
}
|
||||
};
|
||||
|
||||
export const getSettings = async () => {
|
||||
const [result] = await pool.query<RowDataPacket[]>(
|
||||
`SELECT *
|
||||
FROM app_settings;`,
|
||||
);
|
||||
|
||||
if (result.length > 0) {
|
||||
return {
|
||||
success: true,
|
||||
code: "SU004",
|
||||
data: result,
|
||||
message: "Successfully fetched settings.",
|
||||
};
|
||||
} else {
|
||||
return returnErrorCode(GENERAL_ERROR_CODE.UNEXPECTED_SERVER_ERROR);
|
||||
}
|
||||
};
|
||||
|
||||
export const changePassword = async (
|
||||
username: string,
|
||||
currentPasswordUser: string,
|
||||
newPassword: string,
|
||||
) => {
|
||||
const [result] = await pool.query<ResultSetHeader>(
|
||||
`UPDATE users
|
||||
SET password = ?
|
||||
WHERE username = ?
|
||||
AND password = ?;`,
|
||||
[newPassword, username, currentPasswordUser],
|
||||
);
|
||||
|
||||
if (result.affectedRows > 0) {
|
||||
return {
|
||||
success: true,
|
||||
code: "SU005",
|
||||
data: null,
|
||||
message: "Successfully fetched settings.",
|
||||
};
|
||||
} else {
|
||||
return returnErrorCode(GENERAL_ERROR_CODE.UNEXPECTED_SERVER_ERROR);
|
||||
}
|
||||
};
|
||||
@@ -1,6 +1,6 @@
|
||||
import express from "express";
|
||||
import dotenv from "dotenv";
|
||||
import { authenticate } from "../../services/tokenService.js";
|
||||
import {authenticate} from "../../services/tokenService.js";
|
||||
import {
|
||||
allProducts,
|
||||
deleteProduct,
|
||||
@@ -8,7 +8,9 @@ import {
|
||||
productDetails,
|
||||
setAmount,
|
||||
updateItem,
|
||||
} from "./database/products.database.js";
|
||||
} from "./database/products.database.ts";
|
||||
import {PRODUCT_ERROR_CODE} from "@stockhome/shared";
|
||||
|
||||
dotenv.config();
|
||||
const router = express.Router();
|
||||
|
||||
@@ -33,45 +35,50 @@ router.post("/new-product", authenticate, async (req, res) => {
|
||||
bottling_date,
|
||||
);
|
||||
|
||||
if (result.code === "ep001") {
|
||||
res.status(406).json({
|
||||
success: false,
|
||||
code: "ep001",
|
||||
data: null,
|
||||
message: "Error while creating product",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "sp001") {
|
||||
res.status(201).json({
|
||||
return res.status(201).json({
|
||||
success: true,
|
||||
code: "sp001",
|
||||
data: null,
|
||||
message: "",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.get("/all-products", authenticate, async (req, res) => {
|
||||
const result = await allProducts();
|
||||
|
||||
if (result.code === "ep002") {
|
||||
res.status(406).json({
|
||||
success: false,
|
||||
code: "ep002",
|
||||
data: null,
|
||||
message: "Error while fetching products",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "sp002") {
|
||||
res.status(200).json({
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
code: "sp002",
|
||||
data: result.data,
|
||||
message: "",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === PRODUCT_ERROR_CODE.NO_PRODUCTS_FOUND[0]) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.get("/view", async (req, res) => {
|
||||
@@ -79,23 +86,30 @@ router.get("/view", async (req, res) => {
|
||||
|
||||
const result = await productDetails(uuid);
|
||||
|
||||
if (result.code === "ep003") {
|
||||
res.status(406).json({
|
||||
success: false,
|
||||
code: "ep003",
|
||||
data: null,
|
||||
message: "Error while fetching product",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "sp003") {
|
||||
res.status(200).json({
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
code: "sp003",
|
||||
data: result.data,
|
||||
message: "",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === PRODUCT_ERROR_CODE.PRODUCT_NOT_FOUND[0]) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.put("/mutate/set-amount", authenticate, async (req, res) => {
|
||||
@@ -104,23 +118,21 @@ router.put("/mutate/set-amount", authenticate, async (req, res) => {
|
||||
|
||||
const result = await setAmount(itemUUID, amount);
|
||||
|
||||
if (result.code === "ep004") {
|
||||
res.status(406).json({
|
||||
success: false,
|
||||
code: "ep004",
|
||||
data: null,
|
||||
message: "Error while updating product amount",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "sp004") {
|
||||
res.status(200).json({
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
code: "sp004",
|
||||
data: null,
|
||||
message: "",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.post("/mutate/update-item", async (req, res) => {
|
||||
@@ -129,23 +141,21 @@ router.post("/mutate/update-item", async (req, res) => {
|
||||
|
||||
const result = await updateItem(itemUUID, newValues);
|
||||
|
||||
if (result.code === "ep005") {
|
||||
res.status(406).json({
|
||||
success: false,
|
||||
code: "ep005",
|
||||
data: null,
|
||||
message: "Error while updating product",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "sp005") {
|
||||
res.status(200).json({
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
code: "sp005",
|
||||
data: null,
|
||||
message: "",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.post("/delete-selection", authenticate, async (req, res) => {
|
||||
@@ -154,27 +164,27 @@ router.post("/delete-selection", authenticate, async (req, res) => {
|
||||
|
||||
for (const uuid of uuidArray) {
|
||||
const response = await deleteProduct(uuid);
|
||||
if (response.code === "ep006" || !response) {
|
||||
if (!response || response.code !== "sp006") {
|
||||
isError = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isError === false) {
|
||||
res.status(202).json({
|
||||
return res.status(202).json({
|
||||
success: true,
|
||||
code: "sp006",
|
||||
data: null,
|
||||
message: "",
|
||||
});
|
||||
} else {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
code: "ep006",
|
||||
data: null,
|
||||
message: "",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: PRODUCT_ERROR_CODE.PRODUCT_NOT_DELETED[0],
|
||||
data: null,
|
||||
message: PRODUCT_ERROR_CODE.PRODUCT_NOT_DELETED[1],
|
||||
});
|
||||
});
|
||||
|
||||
export default router;
|
||||
@@ -1,35 +1,39 @@
|
||||
import express from "express";
|
||||
import dotenv from "dotenv";
|
||||
import { authenticate } from "../../services/tokenService.js";
|
||||
import {
|
||||
allStorages,
|
||||
newStorage,
|
||||
updateStorage,
|
||||
deleteStorage,
|
||||
} from "./database/storage.database.js";
|
||||
import {authenticate} from "../../services/tokenService.js";
|
||||
import {allStorages, deleteStorage, newStorage, updateStorage,} from "./database/storage.database.ts";
|
||||
import {STORAGE_ERROR_CODE} from "@stockhome/shared";
|
||||
|
||||
dotenv.config();
|
||||
const router = express.Router();
|
||||
|
||||
router.get("/all-storages", authenticate, async (req, res) => {
|
||||
const result = await allStorages();
|
||||
|
||||
if (result.code === "es001") {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
code: "es001",
|
||||
data: null,
|
||||
message: "unexpected server error",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "ss001") {
|
||||
res.status(200).json({
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
code: "ss001",
|
||||
data: result.data,
|
||||
message: "",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === STORAGE_ERROR_CODE.NO_STORAGE_LOCATIONS_FOUND[0]) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.post("/new-storage", authenticate, async (req, res) => {
|
||||
@@ -38,13 +42,12 @@ router.post("/new-storage", authenticate, async (req, res) => {
|
||||
let desc = description;
|
||||
|
||||
if (!name) {
|
||||
res.status(400).json({
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
code: "es000",
|
||||
code: STORAGE_ERROR_CODE.INVALID_REQUEST_BODY[0],
|
||||
data: null,
|
||||
message: "invalid request body",
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (description == "") {
|
||||
@@ -53,23 +56,21 @@ router.post("/new-storage", authenticate, async (req, res) => {
|
||||
|
||||
const result = await newStorage(name, desc);
|
||||
|
||||
if (result.code === "es002") {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
code: "es002",
|
||||
data: null,
|
||||
message: "unexpected server error",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "ss002") {
|
||||
res.status(201).json({
|
||||
return res.status(201).json({
|
||||
success: true,
|
||||
code: "ss002",
|
||||
data: null,
|
||||
message: "",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.post("/update-storage", authenticate, async (req, res) => {
|
||||
@@ -78,23 +79,21 @@ router.post("/update-storage", authenticate, async (req, res) => {
|
||||
|
||||
const result = await updateStorage(storageUUID, values);
|
||||
|
||||
if (result.code === "es003") {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
code: "es003",
|
||||
data: null,
|
||||
message: "unexpected server error",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "ss003") {
|
||||
res.status(201).json({
|
||||
return res.status(201).json({
|
||||
success: true,
|
||||
code: "ss003",
|
||||
data: null,
|
||||
message: "",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.delete("/delete", authenticate, async (req, res) => {
|
||||
@@ -102,23 +101,21 @@ router.delete("/delete", authenticate, async (req, res) => {
|
||||
|
||||
const result = await deleteStorage(uuid);
|
||||
|
||||
if (result.code === "es004") {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
code: "es004",
|
||||
data: null,
|
||||
message: "unexpected server error",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "ss004") {
|
||||
res.status(201).json({
|
||||
return res.status(201).json({
|
||||
success: true,
|
||||
code: "ss004",
|
||||
data: null,
|
||||
message: "",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
export default router;
|
||||
@@ -1,135 +0,0 @@
|
||||
import express from "express";
|
||||
import dotenv from "dotenv";
|
||||
import { authenticate, generateToken } from "../../services/tokenService.js";
|
||||
import {
|
||||
findUser,
|
||||
loginUser,
|
||||
updateSettings,
|
||||
getSettings,
|
||||
changePassword,
|
||||
} from "./database/users.database.js";
|
||||
dotenv.config();
|
||||
const router = express.Router();
|
||||
|
||||
router.post("/verify-token", authenticate, async (req, res) => {
|
||||
res.sendStatus(200);
|
||||
});
|
||||
|
||||
router.post("/update-app-settings", authenticate, async (req, res) => {
|
||||
const appName = req.body.appName;
|
||||
const currency = req.body.currency;
|
||||
|
||||
const result = await updateSettings(req.body);
|
||||
|
||||
if (result.code === "su003") {
|
||||
res.status(201).json({
|
||||
success: true,
|
||||
code: "su003",
|
||||
data: result.data,
|
||||
message: null,
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "eu004") {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
code: "eu004",
|
||||
data: null,
|
||||
message: "Unexpected server error",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/settings", authenticate, async (req, res) => {
|
||||
const result = await getSettings();
|
||||
|
||||
if (result.code === "su004") {
|
||||
res.status(201).json({
|
||||
success: true,
|
||||
code: "su004",
|
||||
data: result.result,
|
||||
message: null,
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "eu005") {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
code: "eu005",
|
||||
data: null,
|
||||
message: "Unexpected server error",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/login", async (req, res) => {
|
||||
const username = req.body.username;
|
||||
const password = req.body.password;
|
||||
|
||||
const result = await findUser(username, password);
|
||||
|
||||
if (result.code === "eu001") {
|
||||
res.status(404).json({
|
||||
success: false,
|
||||
code: "eu001",
|
||||
data: null,
|
||||
message: "username oder password is wrong",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "eu002") {
|
||||
res.status(403).json({
|
||||
success: false,
|
||||
code: "eu002",
|
||||
data: null,
|
||||
message: "user is deactivated",
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "su001") {
|
||||
const token = await generateToken(result.data);
|
||||
const login = await loginUser(result.data.username);
|
||||
|
||||
if (login.code === "eu003") {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
code: "eu003",
|
||||
data: null,
|
||||
message: "Unexpected server error. Please contact system admin.",
|
||||
});
|
||||
}
|
||||
|
||||
res.status(202).json({
|
||||
success: true,
|
||||
code: "su001",
|
||||
data: {
|
||||
token,
|
||||
},
|
||||
message: "User token generated successfully",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/change-password", authenticate, async (req, res) => {
|
||||
const currentPassword = req.body.currentPassword;
|
||||
const newPassword = req.body.newPassword;
|
||||
const username = req.user.username;
|
||||
|
||||
const result = await changePassword(username, currentPassword, newPassword);
|
||||
|
||||
if (result.code === "su005") {
|
||||
res.status(202).json({
|
||||
success: true,
|
||||
code: result.code,
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "eu006") {
|
||||
res.status(406).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export default router;
|
||||
@@ -0,0 +1,129 @@
|
||||
import express from "express";
|
||||
import dotenv from "dotenv";
|
||||
import {authenticate, generateToken} from "../../services/tokenService.js";
|
||||
import {changePassword, findUser, getSettings, loginUser, updateSettings,} from "./database/users.database.ts";
|
||||
|
||||
dotenv.config();
|
||||
const router = express.Router();
|
||||
|
||||
router.post("/verify-token", authenticate, async (req, res) => {
|
||||
res.sendStatus(200);
|
||||
});
|
||||
|
||||
router.post("/update-app-settings", authenticate, async (req, res) => {
|
||||
const result = await updateSettings(req.body);
|
||||
|
||||
if (result.code === "su003") {
|
||||
return res.status(201).json({
|
||||
success: true,
|
||||
code: "su003",
|
||||
data: result.data,
|
||||
message: null,
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.get("/settings", authenticate, async (req, res) => {
|
||||
const result = await getSettings();
|
||||
|
||||
if (result.code === "su004") {
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
code: "su004",
|
||||
data: result.data,
|
||||
message: null,
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.post("/login", async (req, res) => {
|
||||
const username = req.body.username;
|
||||
const password = req.body.password;
|
||||
|
||||
const result = await findUser(username, password);
|
||||
|
||||
if (result.code === "EU001") {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "EU002") {
|
||||
return res.status(403).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
}
|
||||
|
||||
if (result.code === "su001") {
|
||||
const token = await generateToken(result.data);
|
||||
const login = await loginUser(result.data.username);
|
||||
|
||||
if (login.code !== "su002") {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: login.code,
|
||||
data: null,
|
||||
message: login.message,
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(202).json({
|
||||
success: true,
|
||||
code: "su001",
|
||||
data: {
|
||||
token,
|
||||
},
|
||||
message: "User token generated successfully",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
data: null,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
router.post("/change-password", authenticate, async (req, res) => {
|
||||
const currentPassword = req.body.currentPassword;
|
||||
const newPassword = req.body.newPassword;
|
||||
const username = req.user.username;
|
||||
|
||||
const result = await changePassword(username, currentPassword, newPassword);
|
||||
|
||||
if (result.code === "su005") {
|
||||
return res.status(202).json({
|
||||
success: true,
|
||||
code: result.code,
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
code: result.code,
|
||||
message: result.message,
|
||||
});
|
||||
});
|
||||
|
||||
export default router;
|
||||
@@ -0,0 +1,9 @@
|
||||
export const returnErrorCode = (errorKey) => {
|
||||
if (!Array.isArray(errorKey) || errorKey.length < 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return {code: errorKey[0], message: errorKey[1], data: null};
|
||||
};
|
||||
|
||||
export default returnErrorCode;
|
||||
Reference in New Issue
Block a user