import "dotenv/config"; import cors from "cors"; import express, { json, urlencoded } from "express"; import swaggerUi from "swagger-ui-express"; import swaggerDocument from "./swagger.json"; import error from "./middlewares/error"; import { RegisterRoutes } from "./routes"; import logMiddleware from "./middlewares/log"; import { addUserRoles, createUser, getRoleByName, listUser } from "./services/keycloak"; import prisma from "./db"; const APP_HOST = process.env.APP_HOST || "0.0.0.0"; const APP_PORT = +(process.env.APP_PORT || 3000); (async () => { const app = express(); let users = await (async () => { let list = await listUser(); while (!list) { list = await listUser(); await new Promise((resolve) => setTimeout(resolve, 1000)); } return list; })(); if (users.length === 0) { const role = await getRoleByName("system"); const userId = await createUser("admin", "1234", { firstName: "Admin", lastName: "System", email: "admin@jws.local", requiredActions: ["UPDATE_PASSWORD"], enabled: true, }); if (!userId || typeof userId !== "string") { throw new Error("Error create user with keycloak service."); } if (role) await addUserRoles(userId, [role]); await prisma.user.create({ include: { province: true, district: true, subDistrict: true }, data: { id: userId, email: "admin@jws.local", gender: "", address: "", addressEN: "", zipCode: "", userType: "USER", userRole: "system", telephoneNo: "", firstName: "Admin", firstNameEN: "Admin", lastName: "System", lastNameEN: "System", statusOrder: 0, username: "admin", }, }); } app.use(cors()); app.use(json()); app.use(urlencoded({ extended: true })); app.use(logMiddleware); app.use("/", express.static("static")); app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument)); RegisterRoutes(app); app.get("*", (_, res) => res.status(404).send({ status: 404, message: "Route not found.", devMessage: "unknown_url", }), ); app.use(error); app.listen(APP_PORT, APP_HOST, () => console.log(`Listening on: http://localhost:${APP_PORT}`)); })();