pawa-user
Version:
A user management service for Cosmo Pawa, handling authentication and authorization.
57 lines (44 loc) • 1.83 kB
JavaScript
const { initializeDatabase, connectDB } = require("./config/database");
const UserModel = require("./models/user");
const UserActivityModel = require("./models/userActivity");
const userController = require("./controllers/userController");
const authController = require("./controllers/authController");
const { DataTypes } = require('sequelize');
let initialized = false;
let User, UserActivity;
const initialize = (config) => {
if (initialized) {
console.warn("pawa-user module already initialized. Skipping.");
return;
}
if (!config || !config.dbConfig || !config.jwtSecret) {
throw new Error("pawa-user: Missing configuration. Please provide dbConfig and jwtSecret.");
}
const { sequelize } = initializeDatabase(config.dbConfig);
// Initialize models using the sequelize instance
User = UserModel(sequelize, DataTypes);
UserActivity = UserActivityModel(sequelize, DataTypes);
// Define associations after models are initialized
User.hasMany(UserActivity, { foreignKey: "userId" });
UserActivity.belongsTo(User, { foreignKey: "userId" });
// Inject models into userController
userController.setModels(User, UserActivity);
authController.setModels(User, UserActivity);
authController.setJwtSecret(config.jwtSecret);
initialized = true;
};
module.exports = {
initialize,
connectDB,
get User() { return User; },
get UserActivity() { return UserActivity; },
createUser: userController.createUser,
getAllUsers: userController.getAllUsers,
getUserById: userController.getUserById,
getUserActivity: userController.getUserActivity,
registerUser: authController.registerUser,
loginUser: authController.loginUser,
logoutUser: authController.logoutUser,
authenticateToken: authController.authenticateToken,
refreshToken: authController.refreshToken,
};