Added client scripts

This commit is contained in:
Lukian 2024-12-27 13:55:21 +01:00
parent 7d0406ef6e
commit c57a2511d8
14 changed files with 87 additions and 0 deletions

2
api/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/node_modules
.env

6
api/Dockerfile Normal file
View file

@ -0,0 +1,6 @@
FROM node:alpine
WORKDIR /app
COPY . .
RUN npm i
CMD ["npm", "run", "start"]

3
api/config.json Normal file
View file

@ -0,0 +1,3 @@
{
"port": 3000
}

9
api/docker-compose.yml Normal file
View file

@ -0,0 +1,9 @@
services:
api:
build:
context: .
dockerfile: Dockerfile
container_name: api
restart: always
ports:
- 80:3000

34
api/index.js Normal file
View file

@ -0,0 +1,34 @@
const express = require("express");
const fs = require("fs");
const path = require("path");
const config = require("./config");
const cookieParser = require("cookie-parser");
const cors = require("cors");
require("dotenv").config()
const app = express();
const port = config.port || 3000;
app.use(express.json());
app.use(cookieParser());
app.use(cors());
function loadRoutes(folderName) {
const routesPath = path.join(__dirname, folderName);
const files = fs.readdirSync(routesPath);
files.forEach((file) => {
if (fs.lstatSync(path.join(routesPath, file)).isDirectory()) {
loadRoutes(`${folderName}/${file}`);
return;
}
const filePath = path.join(routesPath, file);
const route = require(filePath);
app.use(`/${folderName}/${file.split(".")[0]}`, route);
});
}
loadRoutes("api");
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});

214
api/libs/mysql.js Normal file
View file

@ -0,0 +1,214 @@
const mysql = require("mysql");
function getConnection() {
return mysql.createConnection({
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DB,
});
}
function getShares(connection) {
return new Promise((resolve, reject) => {
connection.query(
`SELECT * FROM Share`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function getShare(connection, id) {
return new Promise((resolve, reject) => {
connection.query(
`SELECT * FROM Share WHERE id = ${id}`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function getShareholderShares(connection, owner_id) {
return new Promise((resolve, reject) => {
connection.query(
`SELECT * FROM Share WHERE owner_id = ${owner_id}`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function getCompanyShares(connection, id) {
return new Promise((resolve, reject) => {
connection.query(
`SELECT * FROM Share WHERE company_id = ${id}`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function setShareOwner(connection, share_id, owner_id) {
return new Promise((resolve, reject) => {
connection.query(
`UPDATE Share SET owner_id = ${owner_id} WHERE id = ${share_id}`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function addShare(connection, price, company_id) {
return new Promise((resolve, reject) => {
connection.query(
`INSERT INTO Share (price, owner_id, company_id) VALUES (${price}, -1, ${company_id})`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function getShareholders(connection) {
return new Promise((resolve, reject) => {
connection.query(
`SELECT * FROM Shareholder`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function getShareholder(connection, id) {
return new Promise((resolve, reject) => {
connection.query(
`SELECT * FROM Shareholder WHERE id = ${id}`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function setShareholderCapital(connection, id, capital) {
return new Promise((resolve, reject) => {
connection.query(
`UPDATE Shareholder SET capital = ${capital} WHERE id = ${id}`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function getCompanies(connection) {
return new Promise((resolve, reject) => {
connection.query(
`SELECT * FROM Company`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function getCompany(connection, id) {
return new Promise((resolve, reject) => {
connection.query(
`SELECT * FROM Company WHERE id = ${id}`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function setCompanyCapital(connection, id, capital ) {
return new Promise((resolve, reject) => {
connection.query(
`UPDATE Company SET capital = ${capital} WHERE id = ${id}`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
function addTransaction(connection, price, seller_id, buyer_id, share_id) {
return new Promise((resolve, reject) => {
connection.query(
`INSERT INTO Transaction (sell_price, seller_id, buyer_id, share_id) VALUES (${price}, ${seller_id}, ${buyer_id}, ${share_id})`,
(error, result) => {
if (error) {
throw(new Error(error));
}
resolve(result);
}
);
});
}
module.exports = {
getConnection,
getShares,
getShare,
getShareholderShares,
getCompanyShares,
setShareOwner,
addShare,
getShareholders,
getShareholder,
setShareholderCapital,
getCompanies,
getCompany,
setCompanyCapital,
addTransaction,
}

1494
api/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

25
api/package.json Normal file
View file

@ -0,0 +1,25 @@
{
"name": "api-template",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "nodemon index.js",
"start": "node index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^1.6.5",
"cookie-parser": "^1.4.6",
"cors": "^2.8.5",
"dotenv": "^16.4.7",
"express": "^4.18.2",
"fs": "^0.0.1-security",
"https": "^1.0.0",
"jsonwebtoken": "^9.0.2",
"mysql": "^2.18.1",
"nodemon": "^3.1.7"
}
}