feat(db): basic db connection done

This commit is contained in:
2024-10-25 21:41:26 +02:00
parent 59c0f05b4f
commit 0379fd4e28
7 changed files with 217 additions and 7 deletions

View File

@@ -10,7 +10,8 @@
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^16.4.5"
"dotenv": "^16.4.5",
"mysql2": "^3.11.3"
},
"devDependencies": {
"@types/cors": "^2.8.17",
@@ -277,6 +278,15 @@
"dev": true,
"license": "MIT"
},
"node_modules/aws-ssl-profiles": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
"integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==",
"license": "MIT",
"engines": {
"node": ">= 6.0.0"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -496,6 +506,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/denque": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
"integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
"license": "Apache-2.0",
"engines": {
"node": ">=0.10"
}
},
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -716,6 +735,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/generate-function": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
"integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
"license": "MIT",
"dependencies": {
"is-property": "^1.0.2"
}
},
"node_modules/get-intrinsic": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
@@ -924,6 +952,42 @@
"node": ">=0.12.0"
}
},
"node_modules/is-property": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==",
"license": "MIT"
},
"node_modules/long": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
"integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==",
"license": "Apache-2.0"
},
"node_modules/lru-cache": {
"version": "7.18.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
"integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
"license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/lru.min": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.1.tgz",
"integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==",
"license": "MIT",
"engines": {
"bun": ">=1.0.0",
"deno": ">=1.30.0",
"node": ">=8.0.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wellwelwel"
}
},
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
@@ -1017,6 +1081,50 @@
"dev": true,
"license": "MIT"
},
"node_modules/mysql2": {
"version": "3.11.3",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.3.tgz",
"integrity": "sha512-Qpu2ADfbKzyLdwC/5d4W7+5Yz7yBzCU05YWt5npWzACST37wJsB23wgOSo00qi043urkiRwXtEvJc9UnuLX/MQ==",
"license": "MIT",
"dependencies": {
"aws-ssl-profiles": "^1.1.1",
"denque": "^2.1.0",
"generate-function": "^2.3.1",
"iconv-lite": "^0.6.3",
"long": "^5.2.1",
"lru.min": "^1.0.0",
"named-placeholders": "^1.1.3",
"seq-queue": "^0.0.5",
"sqlstring": "^2.3.2"
},
"engines": {
"node": ">= 8.0"
}
},
"node_modules/mysql2/node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/named-placeholders": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
"integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
"license": "MIT",
"dependencies": {
"lru-cache": "^7.14.1"
},
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -1257,7 +1365,6 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true,
"license": "MIT"
},
"node_modules/semver": {
@@ -1315,6 +1422,11 @@
"dev": true,
"license": "MIT"
},
"node_modules/seq-queue": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
},
"node_modules/serve-static": {
"version": "1.16.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
@@ -1388,6 +1500,15 @@
"node": ">=10"
}
},
"node_modules/sqlstring": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
"integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",

View File

@@ -21,6 +21,7 @@
},
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^16.4.5"
"dotenv": "^16.4.5",
"mysql2": "^3.11.3"
}
}

28
back-express/src/db.ts Normal file
View File

@@ -0,0 +1,28 @@
import mysql, { QueryError } from "mysql2/promise";
import { ResponseError } from "./utils/error/response-error.model";
const db_pool = mysql.createPool({
host: "localhost",
port: 3307,
user: "dbuser",
password: "securepassword",
database: "path",
});
async function DB_Query<T>(
query: string,
): Promise<Partial<T>[] | ResponseError> {
try {
const [results, _fields] = await db_pool.query(query);
return results as T[];
} catch (e) {
const queryError = e as QueryError;
throw new ResponseError({
code: queryError.code,
number: queryError.errno,
detail: queryError.message,
});
}
}
export { db_pool as db_connection, DB_Query as db_query };

View File

@@ -2,8 +2,10 @@ import express from "express";
import { defaultRoute } from "./defaultRoute";
import { exampleRoutes } from "./example/example.routes";
import { userRoutes } from "./users/users.routes";
export const routes = express.Router();
routes.use("/", defaultRoute);
routes.use("/example", exampleRoutes);
routes.use("/users", userRoutes);

View File

@@ -0,0 +1,20 @@
import { Router } from "express";
import UserService from "./users.service";
import { ResponseError } from "../../utils/error/response-error.model";
export const userRoutes = Router();
const userService = new UserService();
userRoutes.get("/", async (req, res) => {
try {
const response = await userService.getAllUsers();
// console.log("__DB_DATA", data);
res.status(200);
res.send(response);
} catch (e) {
// const response_error = new ResponseError(e);
res.status(400);
res.send(e);
}
});

View File

@@ -1,11 +1,35 @@
import { db_connection, db_query } from "../../db";
class UserService {
constructor() {}
getAllUsers() {}
getUserById(id: number) {
return 3;
async getTestUsers() {
const data = await db_connection.execute("select * from user");
return data;
}
async getAllUsers() {
try {
const data = await db_query("select * from user where user.id == 3");
return { value: data, example: "algo" };
} catch (e) {
return e;
}
}
// getUserById(id: number) {
// return new Promise((resolve, reject) =>
// db_connection.query("select * from user", (err, rows, fields) => {
// console.log(rows);
// if (err) {
// console.error("Mysql Error on User SELECT: ", err);
// reject(err);
// } else {
// resolve(rows);
// }
// }),
// );
// }
}
export default UserService;

View File

@@ -0,0 +1,14 @@
export class ResponseError extends Error {
constructor(
public error: {
code: string | number;
number?: number;
detail?: string;
status?: number;
suggestion?: string;
},
public timestamp: number = Date.now(),
) {
super();
}
}