User সার্ভিসে হেল্পার মেথড ব্যবহার করা (userService.js)
userHelper.js ফাইলের হেল্পার মেথডগুলো এখন userService.js এ ব্যবহার করবো, যা কোড আরও সংক্ষিপ্ত এবং পরিষ্কার করবে।
// services/userService.js
const User = require("../models/User");
const { isUserExistsByEmail, findUserById, validateUserUpdateOrDelete } = require("../helpers/userHelper");
const ApiError = require("../utils/ApiError");
const HTTP_STATUS_CODES = require("../constants/httpStatus");
const userService = {
/**
* Create a user
* @param {Object} userData - User information
* @param {Object} [options] - Optional transaction object
* @returns {Promise<User>}
*/
createUser: async (userData, options = {}) => {
const userExists = await isUserExistsByEmail(userData.email);
if (userExists) {
throw new ApiError(
HTTP_STATUS_CODES.BAD_REQUEST,
"User with this email already exists"
);
}
return User.create(userData, options);
},
/**
* Get all users
* @returns {Promise<User[]>} - List of users
*/
getAllUsers : async () => {
try {
const users = await User.findAll(); // Ensure `User` is correctly defined here
return users;
} catch (error) {
console.error("Error fetching all users:", error);
throw error;
}
},
/**
* Get a user by ID
* @param {number} userId - User's ID
* @returns {Promise<User>}
*/
getUserById: async (userId) => {
return await User.findByPk(userId); // Use `findByPk` to fetch user by ID
},
/**
* Get a user by email
* @param {string} email - User's email
* @returns {Promise<User>}
*/
getUserByEmail: async (email) => {
return await findUserById(email);
},
/**
* Update a user by ID
* @param {number} userId - User ID
* @param {Object} updateData - Data to update
* @returns {Promise<number>} - Number of affected rows
*/
updateUser: async (userId, updateData) => {
await validateUserUpdateOrDelete(userId);
const [affectedRows] = await User.update(updateData, { where: { id: userId } });
return affectedRows;
},
/**
* Delete a user by ID
* @param {number} userId - User ID
* @returns {Promise<number>} - Number of deleted rows
*/
deleteUser: async (userId) => {
await validateUserUpdateOrDelete(userId);
const deletedRows = await User.destroy({ where: { id: userId } });
return deletedRows;
},
};
module.exports = userService;
এইভাবে ব্যবহারের সুবিধা
- কোড পুনরায় ব্যবহার: হেল্পার মেথডগুলোকে বারবার লেখার প্রয়োজন নেই; এগুলো যে কোনো জায়গায় সহজেই পুনরায় ব্যবহার করা যায়।
- কোড ক্লিন রাখা:
userService.jsফাইল এখন আরও পরিষ্কার, কারণ এখানে মূল সার্ভিসের লজিক এবং প্রক্রিয়াগুলোই রাখা হয়েছে। - সহজ পরিবর্তন: যদি কোনো হেল্পার মেথডে পরিবর্তন দরকার হয়, আমরা শুধু হেল্পার ফাইলে পরিবর্তন করলেই হবে।
- ত্রুটি হ্যান্ডলিং:
ApiErrorএবংHTTP_STATUS_CODESব্যবহারের মাধ্যমে সুনির্দিষ্ট এবং কাস্টম এরর মেসেজ তৈরি করা যায়, যা উন্নত এরর ডিবাগিং এবং হ্যান্ডলিং সক্ষম করে।
এভাবে আপনার প্রজেক্টে হেল্পার ফাইলগুলো আলাদা রেখে কাজ করলে কোডের মেইনটেনেবিলিটি এবং রিডেবিলিটি আরও ভালো হবে।