Add order, shipping dock, and transaction routes with CRUD operations and Swagger documentation

- Implemented GET, POST, PUT, and DELETE endpoints for orders, shipping docks, and transactions.
- Added Swagger annotations for API documentation.
- Included error handling for database operations.
- Configured pnpm workspace to ignore built dependencies for sqlite3.
This commit is contained in:
bolade
2025-11-12 11:12:05 +01:00
parent 1703819bda
commit 7b3fd1298d
12 changed files with 3323 additions and 66 deletions
+39 -45
View File
@@ -1,4 +1,4 @@
'use strict';
"use strict";
/*Powered By: Manaknightdigital Inc. https://manaknightdigital.com/ Year: 2020*/
/**
* Sequelize File
@@ -8,62 +8,56 @@
* @author Ryan Wong
*
*/
const fs = require('fs');
const path = require('path');
let Sequelize = require('sequelize');
const fs = require("fs");
const path = require("path");
let Sequelize = require("sequelize");
const basename = path.basename(__filename);
const { DataTypes } = require('sequelize');
const config = {
DB_DATABASE: 'mysql',
DB_USERNAME: 'root',
DB_PASSWORD: 'root',
DB_ADAPTER: 'mysql',
DB_NAME: 'day_1',
DB_HOSTNAME: 'localhost',
DB_PORT: 3306,
};
const { DataTypes } = require("sequelize");
let db = {};
let sequelize = new Sequelize(config.DB_DATABASE, config.DB_USERNAME, config.DB_PASSWORD, {
dialect: config.DB_ADAPTER,
username: config.DB_USERNAME,
password: config.DB_PASSWORD,
database: config.DB_NAME,
host: config.DB_HOSTNAME,
port: config.DB_PORT,
logging: console.log,
timezone: '-04:00',
pool: {
maxConnections: 1,
minConnections: 0,
maxIdleTime: 100,
},
define: {
timestamps: false,
underscoredAll: true,
underscored: true,
},
// SQLite configuration - stores data in a file instead of MySQL server
let sequelize = new Sequelize({
dialect: "sqlite",
storage: "./database.sqlite", // Database file location
logging: console.log,
define: {
timestamps: false,
underscoredAll: true,
underscored: true,
},
});
// sequelize.sync({ force: true });
// Sync database tables
sequelize
.sync({ alter: true })
.then(() => {
console.log("Database tables synchronized");
})
.catch((err) => {
console.error("Error synchronizing database:", err);
});
fs.readdirSync(__dirname)
.filter((file) => {
return file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js';
})
.forEach((file) => {
var model = require(path.join(__dirname, file))(sequelize, DataTypes);
db[model.name] = model;
});
.filter((file) => {
return (
file.indexOf(".") !== 0 &&
file !== basename &&
file.slice(-3) === ".js"
);
})
.forEach((file) => {
var model = require(path.join(__dirname, file))(sequelize, DataTypes);
db[model.name] = model;
});
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
module.exports = db;
+45
View File
@@ -0,0 +1,45 @@
module.exports = (sequelize, DataTypes) => {
const order = sequelize.define(
"order",
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
user_id: {
type: DataTypes.INTEGER,
allowNull: false,
},
amount: {
type: DataTypes.DECIMAL(10, 2),
allowNull: false,
},
tax: {
type: DataTypes.DECIMAL(10, 2),
allowNull: false,
},
notes: {
type: DataTypes.TEXT,
allowNull: true,
},
status: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 0,
comment: "1: paid, 0: not paid",
},
created_at: DataTypes.DATE,
updated_at: DataTypes.DATE,
},
{
timestamps: true,
freezeTableName: true,
tableName: "order",
createdAt: "created_at",
updatedAt: "updated_at",
}
);
return order;
};
+33
View File
@@ -0,0 +1,33 @@
module.exports = (sequelize, DataTypes) => {
const shipping_dock = sequelize.define(
"shipping_dock",
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
status: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 1,
comment: "1: active, 0: inactive",
},
created_at: DataTypes.DATE,
updated_at: DataTypes.DATE,
},
{
timestamps: true,
freezeTableName: true,
tableName: "shipping_dock",
createdAt: "created_at",
updatedAt: "updated_at",
}
);
return shipping_dock;
};
+43
View File
@@ -0,0 +1,43 @@
module.exports = (sequelize, DataTypes) => {
const transaction = sequelize.define(
"transaction",
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
order_id: {
type: DataTypes.INTEGER,
allowNull: false,
},
user_id: {
type: DataTypes.INTEGER,
allowNull: false,
},
shipping_dock_id: {
type: DataTypes.INTEGER,
allowNull: false,
},
amount: {
type: DataTypes.DECIMAL(10, 2),
allowNull: false,
},
notes: {
type: DataTypes.TEXT,
allowNull: true,
},
created_at: DataTypes.DATE,
updated_at: DataTypes.DATE,
},
{
timestamps: true,
freezeTableName: true,
tableName: "transaction",
createdAt: "created_at",
updatedAt: "updated_at",
}
);
return transaction;
};