ADD api test

This commit is contained in:
githubna-ilham 2024-10-23 15:58:38 +07:00
parent 722cd440e8
commit b7f9f07963
12 changed files with 415 additions and 81 deletions

32
config/config-temp.txt Normal file

@ -0,0 +1,32 @@
{
"development": {
"username": "C##pena",
"password": "cobalagi",
"database": "XE",
"host": "127.0.0.1",
"dialect": "oracle",
"logging": false
},
// "development": {
// "username": "system",
// "password": "welcome1",
// "database": "pdbsoadev",
// "host": "10.216.100.100",
// "dialect": "oracle",
// "logging": false
// },
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}

@ -1,11 +1,16 @@
{
"development": {
"username": "C##pena",
"password": "cobalagi",
"database": "XE",
"host": "127.0.0.1",
"username": "system",
"password": "welcome1",
"database": "pdbsoadev",
"host": "10.216.100.100",
"dialect": "oracle",
"logging": false
"logging": false,
"dialectOptions": {
"oracle": {
"schema": "SOA_ADM_DASHBOARD"
}
}
},
"test": {
"username": "root",

@ -0,0 +1,58 @@
const spcoImportInfoService = require("../services/spcoImportInfoService");
const { sequelize } = require("../models");
// exports.getAllImportInfo = async (req, res) => {
// try {
// const importInfo = await spcoImportInfoService.getAllImportInfo();
// res.status(200).json(importInfo);
// } catch (error) {
// res
// .status(500)
// .json({ message: "Error fetching data", error: error.message });
// }
// };
exports.getAllImportInfo = async (req, res) => {
try {
// Ambil parameter limit dan page dari request query, atau gunakan nilai default
const limit = parseInt(req.query.limit) || 10; // Default 10 item per page
const page = parseInt(req.query.page) || 1; // Default halaman 1
const offset = (page - 1) * limit; // Hitung offset untuk pagination
// Panggil service dan tambahkan pagination
const importInfo = await spcoImportInfoService.getAllImportInfo(
limit,
offset
);
res.status(200).json({
data: importInfo.rows, // Data yang diambil
currentPage: page, // Halaman saat ini
totalItems: importInfo.count, // Total data
totalPages: Math.ceil(importInfo.count / limit), // Total halaman
});
} catch (error) {
res
.status(500)
.json({ message: "Error fetching data", error: error.message });
}
};
exports.testRawSQL = async (req, res) => {
try {
// Menjalankan SQL mentah untuk melihat data dari tabel
const results = await sequelize.query(
"SELECT * FROM SOA_ADM_DASHBOARD.SPCO_IMPORT_INFO",
{
type: sequelize.QueryTypes.SELECT, // Menentukan tipe query SELECT
}
);
res.status(200).json(results); // Mengirimkan hasil query ke client
} catch (err) {
res
.status(500)
.json({ message: "Error executing raw SQL", error: err.message });
}
};

@ -1,9 +0,0 @@
const { create } = require("../services/users/create");
async function _create(user) {
return await create(user);
}
module.exports = {
_create,
};

@ -1,22 +1,27 @@
const port = process.env.PORT || 3000,
express = require("express"),
app = express(),
db = require("./models"),
cors = require("cors"),
bodyParser = require("body-parser");
const port = process.env.PORT || 3000;
const express = require("express");
const app = express();
const db = require("./models");
const cors = require("cors");
const bodyParser = require("body-parser");
// Middleware untuk CORS dan body-parser
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use("/auth", require("./routes/auth"));
const spcoImportInfoRoutes = require("./routes/spcoImportInfoRoutes");
app.use("/db", require("./routes/db"));
app.use("/api", spcoImportInfoRoutes); //
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
db.sequelize
.sync({ force: false })
// .sync({ sync: true })
.authenticate()
.then(() => {
console.log("Connection has been established successfully.");
})

@ -0,0 +1,255 @@
const Sequelize = require("sequelize-oracle");
const { all } = require("sequelize-oracle/lib/promise");
module.exports = (sequelize, DataTypes) => {
return sequelize.define(
"SPCO_IMPORT_INFO",
{
SESSION_ID: {
type: "NUMBER",
allowNull: false,
primaryKey: true,
},
CREATED_BY: {
type: "NUMBER",
allowNull: false,
},
CREATION_DATE: {
type: Sequelize.DATEONLY,
allowNull: false,
},
SEQ_NO: {
type: "NUMBER",
allowNull: false,
},
FILE_NAME: {
type: Sequelize.STRING(500),
},
ACCESS_ID: {
type: "NUMBER",
},
FILE_ID: {
type: "NUMBER",
},
STATUS_CODE: {
type: Sequelize.STRING(1),
defaultValue: "N",
},
MODULE_CODE: {
type: Sequelize.STRING(100),
},
PROCESS_CODE: {
type: Sequelize.STRING(100),
},
ATTRIBUTE1: { type: Sequelize.STRING(500) },
ATTRIBUTE2: { type: Sequelize.STRING(500) },
ATTRIBUTE3: { type: Sequelize.STRING(500) },
ATTRIBUTE4: { type: Sequelize.STRING(500) },
ATTRIBUTE5: { type: Sequelize.STRING(500) },
ATTRIBUTE6: { type: Sequelize.STRING(500) },
ATTRIBUTE7: { type: Sequelize.STRING(500) },
ATTRIBUTE8: { type: Sequelize.STRING(500) },
ATTRIBUTE9: { type: Sequelize.STRING(500) },
ATTRIBUTE10: { type: Sequelize.STRING(500) },
ATTRIBUTE11: { type: Sequelize.STRING(500) },
ATTRIBUTE12: { type: Sequelize.STRING(500) },
ATTRIBUTE13: { type: Sequelize.STRING(500) },
ATTRIBUTE14: { type: Sequelize.STRING(500) },
ATTRIBUTE15: { type: Sequelize.STRING(500) },
ATTRIBUTE16: { type: Sequelize.STRING(500) },
ATTRIBUTE17: { type: Sequelize.STRING(500) },
ATTRIBUTE18: { type: Sequelize.STRING(500) },
ATTRIBUTE19: { type: Sequelize.STRING(500) },
ATTRIBUTE20: { type: Sequelize.STRING(500) },
ATTRIBUTE21: { type: Sequelize.STRING(500) },
ATTRIBUTE22: { type: Sequelize.STRING(500) },
ATTRIBUTE23: { type: Sequelize.STRING(500) },
ATTRIBUTE24: { type: Sequelize.STRING(500) },
ATTRIBUTE25: { type: Sequelize.STRING(500) },
ATTRIBUTE26: { type: Sequelize.STRING(500) },
ATTRIBUTE27: { type: Sequelize.STRING(500) },
ATTRIBUTE28: { type: Sequelize.STRING(500) },
ATTRIBUTE29: { type: Sequelize.STRING(500) },
ATTRIBUTE30: { type: Sequelize.STRING(500) },
ATTRIBUTE31: { type: Sequelize.STRING(500) },
ATTRIBUTE32: { type: Sequelize.STRING(500) },
ATTRIBUTE33: { type: Sequelize.STRING(500) },
ATTRIBUTE34: { type: Sequelize.STRING(500) },
ATTRIBUTE35: { type: Sequelize.STRING(500) },
ATTRIBUTE36: { type: Sequelize.STRING(500) },
ATTRIBUTE37: { type: Sequelize.STRING(500) },
ATTRIBUTE38: { type: Sequelize.STRING(500) },
ATTRIBUTE39: { type: Sequelize.STRING(500) },
ATTRIBUTE40: { type: Sequelize.STRING(500) },
ATTRIBUTE41: { type: Sequelize.STRING(500) },
ATTRIBUTE42: { type: Sequelize.STRING(500) },
ATTRIBUTE43: { type: Sequelize.STRING(500) },
ATTRIBUTE44: { type: Sequelize.STRING(500) },
ATTRIBUTE45: { type: Sequelize.STRING(500) },
ATTRIBUTE46: { type: Sequelize.STRING(500) },
ATTRIBUTE47: { type: Sequelize.STRING(500) },
ATTRIBUTE48: { type: Sequelize.STRING(500) },
ATTRIBUTE49: { type: Sequelize.STRING(500) },
ATTRIBUTE50: { type: Sequelize.STRING(500) },
ATTRIBUTE51: { type: Sequelize.STRING(500) },
ATTRIBUTE52: { type: Sequelize.STRING(500) },
ATTRIBUTE53: { type: Sequelize.STRING(500) },
ATTRIBUTE54: { type: Sequelize.STRING(500) },
ATTRIBUTE55: { type: Sequelize.STRING(500) },
ATTRIBUTE56: { type: Sequelize.STRING(500) },
ATTRIBUTE57: { type: Sequelize.STRING(500) },
ATTRIBUTE58: { type: Sequelize.STRING(500) },
ATTRIBUTE59: { type: Sequelize.STRING(500) },
ATTRIBUTE60: { type: Sequelize.STRING(500) },
ATTRIBUTE61: { type: Sequelize.STRING(500) },
ATTRIBUTE62: { type: Sequelize.STRING(500) },
ATTRIBUTE63: { type: Sequelize.STRING(500) },
ATTRIBUTE64: { type: Sequelize.STRING(500) },
ATTRIBUTE65: { type: Sequelize.STRING(500) },
ATTRIBUTE66: { type: Sequelize.STRING(500) },
ATTRIBUTE67: { type: Sequelize.STRING(500) },
ATTRIBUTE68: { type: Sequelize.STRING(500) },
ATTRIBUTE69: { type: Sequelize.STRING(500) },
ATTRIBUTE70: { type: Sequelize.STRING(500) },
ATTRIBUTE71: { type: Sequelize.STRING(500) },
ATTRIBUTE72: { type: Sequelize.STRING(500) },
ATTRIBUTE73: { type: Sequelize.STRING(500) },
ATTRIBUTE74: { type: Sequelize.STRING(500) },
ATTRIBUTE75: { type: Sequelize.STRING(500) },
ATTRIBUTE76: { type: Sequelize.STRING(500) },
ATTRIBUTE77: { type: Sequelize.STRING(500) },
ATTRIBUTE78: { type: Sequelize.STRING(500) },
ATTRIBUTE79: { type: Sequelize.STRING(500) },
ATTRIBUTE80: { type: Sequelize.STRING(500) },
ATTRIBUTE81: { type: Sequelize.STRING(500) },
ATTRIBUTE82: { type: Sequelize.STRING(500) },
ATTRIBUTE83: { type: Sequelize.STRING(500) },
ATTRIBUTE84: { type: Sequelize.STRING(500) },
ATTRIBUTE85: { type: Sequelize.STRING(500) },
ATTRIBUTE86: { type: Sequelize.STRING(500) },
ATTRIBUTE87: { type: Sequelize.STRING(500) },
ATTRIBUTE88: { type: Sequelize.STRING(500) },
ATTRIBUTE89: { type: Sequelize.STRING(500) },
ATTRIBUTE90: { type: Sequelize.STRING(500) },
ATTRIBUTE91: { type: Sequelize.STRING(500) },
ATTRIBUTE92: { type: Sequelize.STRING(500) },
ATTRIBUTE93: { type: Sequelize.STRING(500) },
ATTRIBUTE94: { type: Sequelize.STRING(500) },
ATTRIBUTE95: { type: Sequelize.STRING(500) },
ATTRIBUTE96: { type: Sequelize.STRING(500) },
ATTRIBUTE97: { type: Sequelize.STRING(500) },
ATTRIBUTE98: { type: Sequelize.STRING(500) },
ATTRIBUTE99: { type: Sequelize.STRING(500) },
ATTRIBUTE100: { type: Sequelize.STRING(500) },
ATTRIBUTE101: { type: Sequelize.STRING(500) },
ATTRIBUTE102: { type: Sequelize.STRING(500) },
ATTRIBUTE103: { type: Sequelize.STRING(500) },
ATTRIBUTE104: { type: Sequelize.STRING(500) },
ATTRIBUTE105: { type: Sequelize.STRING(500) },
ATTRIBUTE106: { type: Sequelize.STRING(500) },
ATTRIBUTE107: { type: Sequelize.STRING(500) },
ATTRIBUTE108: { type: Sequelize.STRING(500) },
ATTRIBUTE109: { type: Sequelize.STRING(500) },
ATTRIBUTE110: { type: Sequelize.STRING(500) },
ATTRIBUTE111: { type: Sequelize.STRING(500) },
ATTRIBUTE112: { type: Sequelize.STRING(500) },
ATTRIBUTE113: { type: Sequelize.STRING(500) },
ATTRIBUTE114: { type: Sequelize.STRING(500) },
ATTRIBUTE115: { type: Sequelize.STRING(500) },
ATTRIBUTE116: { type: Sequelize.STRING(500) },
ATTRIBUTE117: { type: Sequelize.STRING(500) },
ATTRIBUTE118: { type: Sequelize.STRING(500) },
ATTRIBUTE119: { type: Sequelize.STRING(500) },
ATTRIBUTE120: { type: Sequelize.STRING(500) },
ATTRIBUTE121: { type: Sequelize.STRING(500) },
ATTRIBUTE122: { type: Sequelize.STRING(500) },
ATTRIBUTE123: { type: Sequelize.STRING(500) },
ATTRIBUTE124: { type: Sequelize.STRING(500) },
ATTRIBUTE125: { type: Sequelize.STRING(500) },
ATTRIBUTE126: { type: Sequelize.STRING(500) },
ATTRIBUTE127: { type: Sequelize.STRING(500) },
ATTRIBUTE128: { type: Sequelize.STRING(500) },
ATTRIBUTE129: { type: Sequelize.STRING(500) },
ATTRIBUTE130: { type: Sequelize.STRING(500) },
ATTRIBUTE131: { type: Sequelize.STRING(500) },
ATTRIBUTE132: { type: Sequelize.STRING(500) },
ATTRIBUTE133: { type: Sequelize.STRING(500) },
ATTRIBUTE134: { type: Sequelize.STRING(500) },
ATTRIBUTE135: { type: Sequelize.STRING(500) },
ATTRIBUTE136: { type: Sequelize.STRING(500) },
ATTRIBUTE137: { type: Sequelize.STRING(500) },
ATTRIBUTE138: { type: Sequelize.STRING(500) },
ATTRIBUTE139: { type: Sequelize.STRING(500) },
ATTRIBUTE140: { type: Sequelize.STRING(500) },
ATTRIBUTE141: { type: Sequelize.STRING(500) },
ATTRIBUTE142: { type: Sequelize.STRING(500) },
ATTRIBUTE143: { type: Sequelize.STRING(500) },
ATTRIBUTE144: { type: Sequelize.STRING(500) },
ATTRIBUTE145: { type: Sequelize.STRING(500) },
ATTRIBUTE146: { type: Sequelize.STRING(500) },
ATTRIBUTE147: { type: Sequelize.STRING(500) },
ATTRIBUTE148: { type: Sequelize.STRING(500) },
ATTRIBUTE149: { type: Sequelize.STRING(500) },
ATTRIBUTE150: { type: Sequelize.STRING(500) },
ATTRIBUTE151: { type: Sequelize.STRING(500) },
ATTRIBUTE152: { type: Sequelize.STRING(500) },
ATTRIBUTE153: { type: Sequelize.STRING(500) },
ATTRIBUTE154: { type: Sequelize.STRING(500) },
ATTRIBUTE155: { type: Sequelize.STRING(500) },
ATTRIBUTE156: { type: Sequelize.STRING(500) },
ATTRIBUTE157: { type: Sequelize.STRING(500) },
ATTRIBUTE158: { type: Sequelize.STRING(500) },
ATTRIBUTE159: { type: Sequelize.STRING(500) },
ATTRIBUTE160: { type: Sequelize.STRING(500) },
ATTRIBUTE161: { type: Sequelize.STRING(500) },
ATTRIBUTE162: { type: Sequelize.STRING(500) },
ATTRIBUTE163: { type: Sequelize.STRING(500) },
ATTRIBUTE164: { type: Sequelize.STRING(500) },
ATTRIBUTE165: { type: Sequelize.STRING(500) },
ATTRIBUTE166: { type: Sequelize.STRING(500) },
ATTRIBUTE167: { type: Sequelize.STRING(500) },
ATTRIBUTE168: { type: Sequelize.STRING(500) },
ATTRIBUTE169: { type: Sequelize.STRING(500) },
ATTRIBUTE170: { type: Sequelize.STRING(500) },
ATTRIBUTE171: { type: Sequelize.STRING(500) },
ATTRIBUTE172: { type: Sequelize.STRING(500) },
ATTRIBUTE173: { type: Sequelize.STRING(500) },
ATTRIBUTE174: { type: Sequelize.STRING(500) },
ATTRIBUTE175: { type: Sequelize.STRING(500) },
ATTRIBUTE176: { type: Sequelize.STRING(500) },
ATTRIBUTE177: { type: Sequelize.STRING(500) },
ATTRIBUTE178: { type: Sequelize.STRING(500) },
ATTRIBUTE179: { type: Sequelize.STRING(500) },
ATTRIBUTE180: { type: Sequelize.STRING(500) },
ATTRIBUTE181: { type: Sequelize.STRING(500) },
ATTRIBUTE182: { type: Sequelize.STRING(500) },
ATTRIBUTE183: { type: Sequelize.STRING(500) },
ATTRIBUTE184: { type: Sequelize.STRING(500) },
ATTRIBUTE185: { type: Sequelize.STRING(500) },
ATTRIBUTE186: { type: Sequelize.STRING(500) },
ATTRIBUTE187: { type: Sequelize.STRING(500) },
ATTRIBUTE188: { type: Sequelize.STRING(500) },
ATTRIBUTE189: { type: Sequelize.STRING(500) },
ATTRIBUTE190: { type: Sequelize.STRING(500) },
ATTRIBUTE191: { type: Sequelize.STRING(500) },
ATTRIBUTE192: { type: Sequelize.STRING(500) },
ATTRIBUTE193: { type: Sequelize.STRING(500) },
ATTRIBUTE194: { type: Sequelize.STRING(500) },
ATTRIBUTE195: { type: Sequelize.STRING(500) },
ATTRIBUTE196: { type: Sequelize.STRING(500) },
ATTRIBUTE197: { type: Sequelize.STRING(500) },
ATTRIBUTE198: { type: Sequelize.STRING(500) },
ATTRIBUTE199: { type: Sequelize.STRING(500) },
ATTRIBUTE200: { type: Sequelize.STRING(500) },
},
{
tableName: "SPCO_IMPORT_INFO",
underscored: true,
paranoid: true,
frezeTableName: true,
timestamps: false,
schema: "SOA_ADM_DASHBOARD",
primaryKey: false,
}
);
};

@ -1,28 +0,0 @@
const Sequelize = require("sequelize-oracle");
module.exports = (sequelize, DataTypes) => {
return sequelize.define(
"user",
{
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
username: {
type: Sequelize.STRING,
allowNull: false,
},
password: {
type: Sequelize.STRING,
required: true,
allowNull: false,
len: [8, 20],
},
},
{
underscored: true,
paranoid: true,
}
);
};

@ -1,14 +0,0 @@
const express = require("express"),
router = express.Router(),
{ _create } = require("../controller/users");
router.post("/signup", async (req, res) => {
try {
const user = await _create(req.body);
res.status(201).send(user);
} catch (error) {
res.status(400).send(error.message);
}
});
module.exports = router;

13
routes/db.js Normal file

@ -0,0 +1,13 @@
const express = require("express");
const router = express.Router();
//check connection database
router.get("/", async (req, res) => {
try {
res.status(200).send("Connection has been established successfully.");
} catch (error) {
res.status(400).send(error.message);
}
});
module.exports = router;

@ -0,0 +1,16 @@
const express = require("express");
const router = express.Router();
const spcoImportInfoController = require("../controller/spcoImportInfoController");
// Route for getting all SPCO_IMPORT_INFO data return hello world
// router.get("/spco-import-info", async (req, res) => {
// try {
// res.status(200).send("Hello World");
// } catch (error) {
// res.status(400).send(error.message);
// }
// });
router.get("/spco-import-info", spcoImportInfoController.getAllImportInfo);
router.get("/spco-import-test", spcoImportInfoController.testRawSQL);
module.exports = router;

@ -0,0 +1,18 @@
const { SPCO_IMPORT_INFO } = require("../models");
// Service to get all records
const getAllImportInfo = async (limit, offset) => {
try {
// return await SPCO_IMPORT_INFO.findAll();
return await SPCO_IMPORT_INFO.findAndCountAll({
limit: limit,
offset: offset,
});
} catch (error) {
throw new Error("Error fetching data: " + error.message);
}
};
module.exports = {
getAllImportInfo,
};

@ -1,17 +0,0 @@
const db = require("../../models");
const bcrypt = require("bcrypt");
async function create(user) {
if (!user.username || !user.password) {
throw new Error("Username and password are required");
}
return await db.user.create({
...user,
password: bcrypt.hashSync(user.password, 10),
});
}
module.exports = {
create,
};