ExpressJs

⌘K
  1. Home
  2. Docs
  3. ExpressJs
  4. Role And Permission
  5. Entities Definition
  6. 2.UserGroup

2.UserGroup

userGroup.entity.js


const { EntitySchema } = require('typeorm');

module.exports = new EntitySchema({
    name: 'UserGroup',
    tableName: 'user_groups',
    columns: {
        id: {
            type: 'int',
            primary: true,
            generated: true,
        },
        name: {
            type: 'varchar',
            unique: true,
            nullable: false,
        },
        createdAt: {
            type: 'timestamp',
            createDate: true,
        },
        updatedAt: {
            type: 'timestamp',
            updateDate: true,
        },
    },
});

Explanation:

  • id: Unique identifier for each user group.
  • name: A unique name for the user group (e.g., “Marketing Team”, “Developers”).
  • description: Optional detailed description of the user group.

userGroup.service.js

// services/userGroup.service.js
const { AppDataSource } = require('../../../index'); // Ensure the path is correct
const UserGroup = require('../entities/userGroup.entity');

/**
 * @function formatUserGroupResponse
 * @description Formats the user group data to ensure consistent field names across all responses.
 * @param {object} userGroup - The user group object to format.
 * @returns {object} - The formatted user group object.
 */
const formatUserGroupResponse = (userGroup) => {
    if (!userGroup) return null;

    return {
        id: userGroup.id,
        name: userGroup.name,
        createdAt: userGroup.createdAt,
        updatedAt: userGroup.updatedAt,
    };
};

const createUserGroup = async (data) => {
    const userGroupRepository = AppDataSource.getRepository(UserGroup);
    const userGroup = userGroupRepository.create(data);
    const savedUserGroup = await userGroupRepository.save(userGroup);
    return formatUserGroupResponse(savedUserGroup);
};

const findUserGroupById = async (id) => {
    const userGroupRepository = AppDataSource.getRepository(UserGroup);
    const userGroup = await userGroupRepository.findOneBy({ id });
    return formatUserGroupResponse(userGroup);
};

const updateUserGroup = async (id, data) => {
    const userGroupRepository = AppDataSource.getRepository(UserGroup);
    const userGroup = await findUserGroupById(id);
    if (!userGroup) return null;

    Object.assign(userGroup, data);
    const updatedUserGroup = await userGroupRepository.save(userGroup);
    return formatUserGroupResponse(updatedUserGroup);
};

const deleteUserGroup = async (id) => {
    const userGroupRepository = AppDataSource.getRepository(UserGroup);
    const result = await userGroupRepository.delete(id);
    return result.affected;
};

const getAllUserGroups = async () => {
    const userGroupRepository = AppDataSource.getRepository(UserGroup);
    const userGroups = await userGroupRepository.find();
    return userGroups.map(formatUserGroupResponse);
};

module.exports = {
    createUserGroup,
    findUserGroupById,
    updateUserGroup,
    deleteUserGroup,
    getAllUserGroups,
};

userGroup.controller.js

// controllers/userGroup.controller.js
const userGroupService = require('../services/userGroup.service');

/**
 * @function createUserGroup
 * @description Creates a new user group.
 * @param {object} req - Request object.
 * @param {object} res - Response object.
 */
const createUserGroup = async (req, res) => {
    try {
        const userGroup = await userGroupService.createUserGroup(req.body);
        res.status(201).json(userGroup);
    } catch (error) {
        res.status(500).json({ message: 'Failed to create user group', error: error.message });
    }
};

/**
 * @function getUserGroupById
 * @description Retrieves a user group by ID.
 * @param {object} req - Request object.
 * @param {object} res - Response object.
 */
const getUserGroupById = async (req, res) => {
    try {
        const userGroup = await userGroupService.findUserGroupById(req.params.id);
        if (!userGroup) {
            return res.status(404).json({ message: 'User group not found' });
        }
        res.status(200).json(userGroup);
    } catch (error) {
        res.status(500).json({ message: 'Failed to retrieve user group', error: error.message });
    }
};

/**
 * @function updateUserGroup
 * @description Updates a user group by ID.
 * @param {object} req - Request object.
 * @param {object} res - Response object.
 */
const updateUserGroup = async (req, res) => {
    try {
        const userGroup = await userGroupService.updateUserGroup(req.params.id, req.body);
        if (!userGroup) {
            return res.status(404).json({ message: 'User group not found' });
        }
        res.status(200).json(userGroup);
    } catch (error) {
        res.status(500).json({ message: 'Failed to update user group', error: error.message });
    }
};

/**
 * @function deleteUserGroup
 * @description Deletes a user group by ID.
 * @param {object} req - Request object.
 * @param {object} res - Response object.
 */
const deleteUserGroup = async (req, res) => {
    try {
        const result = await userGroupService.deleteUserGroup(req.params.id);
        if (result === 0) {
            return res.status(404).json({ message: 'User group not found' });
        }
        res.status(204).send();
    } catch (error) {
        res.status(500).json({ message: 'Failed to delete user group', error: error.message });
    }
};

/**
 * @function getAllUserGroups
 * @description Retrieves all user groups.
 * @param {object} req - Request object.
 * @param {object} res - Response object.
 */
const getAllUserGroups = async (req, res) => {
    try {
        const userGroups = await userGroupService.getAllUserGroups();
        if (!userGroups) {
            return res.status(404).json({ message: 'No user groups found' });
        }
        res.status(200).json(userGroups);
    } catch (error) {
        res.status(500).json({
            message: 'Internal server error',
            error: error.message || 'An unexpected error occurred',
        });
    }
};

module.exports = {
    createUserGroup,
    getUserGroupById,
    updateUserGroup,
    deleteUserGroup,
    getAllUserGroups,
};
// routes/userGroup.routes.js
const express = require('express');
const router = express.Router();
const userGroupController = require('../controllers/userGroup.controller');

// Define routes with corresponding controller methods
router.get('/user-groups', userGroupController.getAllUserGroups);
router.post('/user-groups', userGroupController.createUserGroup); // Create a new user group
router.get('/user-groups/:id', userGroupController.getUserGroupById); // Get user group by ID
router.put('/user-groups/:id', userGroupController.updateUserGroup); // Update user group by ID
router.delete('/user-groups/:id', userGroupController.deleteUserGroup); // Delete user group by ID

module.exports = router;
    const userGroupRoutes = require('./modules/Authentication/routes/userGroup.routes');
    app.use('/api', userGroupRoutes);

How can we help?