diff --git a/config/config-temp.txt b/config/config-temp.txt new file mode 100644 index 0000000..0152da4 --- /dev/null +++ b/config/config-temp.txt @@ -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" + } +} diff --git a/config/config.json b/config/config.json index eab2570..740089e 100644 --- a/config/config.json +++ b/config/config.json @@ -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", diff --git a/controller/spcoImportInfoController.js b/controller/spcoImportInfoController.js new file mode 100644 index 0000000..74dec7c --- /dev/null +++ b/controller/spcoImportInfoController.js @@ -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 }); + } +}; diff --git a/controller/users.js b/controller/users.js deleted file mode 100644 index bd25d1e..0000000 --- a/controller/users.js +++ /dev/null @@ -1,9 +0,0 @@ -const { create } = require("../services/users/create"); - -async function _create(user) { - return await create(user); -} - -module.exports = { - _create, -}; diff --git a/index.js b/index.js index a81fe3b..bb8dab0 100644 --- a/index.js +++ b/index.js @@ -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."); }) diff --git a/models/spcoImportInfoModel.js b/models/spcoImportInfoModel.js new file mode 100644 index 0000000..086ec5d --- /dev/null +++ b/models/spcoImportInfoModel.js @@ -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, + } + ); +}; diff --git a/models/user.js b/models/user.js deleted file mode 100644 index df44a73..0000000 --- a/models/user.js +++ /dev/null @@ -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, - } - ); -}; diff --git a/routes/auth.js b/routes/auth.js deleted file mode 100644 index 912515b..0000000 --- a/routes/auth.js +++ /dev/null @@ -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; diff --git a/routes/db.js b/routes/db.js new file mode 100644 index 0000000..b9b5dd7 --- /dev/null +++ b/routes/db.js @@ -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; diff --git a/routes/spcoImportInfoRoutes.js b/routes/spcoImportInfoRoutes.js new file mode 100644 index 0000000..13f746c --- /dev/null +++ b/routes/spcoImportInfoRoutes.js @@ -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; diff --git a/services/spcoImportInfoService.js b/services/spcoImportInfoService.js new file mode 100644 index 0000000..93ae449 --- /dev/null +++ b/services/spcoImportInfoService.js @@ -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, +}; diff --git a/services/users/create.js b/services/users/create.js deleted file mode 100644 index cd2745c..0000000 --- a/services/users/create.js +++ /dev/null @@ -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, -};