Initial commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
const { ValidationError } = require('../shared/errors');
|
||||
|
||||
class GroupsService {
|
||||
constructor({ groupsRepository, usersRepository }) {
|
||||
this.groupsRepository = groupsRepository;
|
||||
this.usersRepository = usersRepository;
|
||||
}
|
||||
|
||||
async getAllGroups() {
|
||||
return await this.groupsRepository.findAll({
|
||||
include: [
|
||||
{
|
||||
model: this.usersRepository.User,
|
||||
as: 'members',
|
||||
through: { attributes: [] },
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
async getGroupById(groupId) {
|
||||
return await this.groupsRepository.findById(groupId, true);
|
||||
}
|
||||
|
||||
async createGroup(groupData) {
|
||||
const { name, members } = groupData;
|
||||
|
||||
if (!name || name.trim() === '') {
|
||||
throw new ValidationError('Group name is required');
|
||||
}
|
||||
|
||||
if (!members || !Array.isArray(members) || members.length === 0) {
|
||||
throw new ValidationError('At least one member is required');
|
||||
}
|
||||
|
||||
for (const userId of members) {
|
||||
await this.usersRepository.findById(userId);
|
||||
}
|
||||
|
||||
const group = await this.groupsRepository.create({ name });
|
||||
return await this.groupsRepository.addMembers(group.id, members);
|
||||
}
|
||||
|
||||
async updateGroup(groupId, updateData) {
|
||||
const { name } = updateData;
|
||||
|
||||
if (name && name.trim() === '') {
|
||||
throw new ValidationError('Group name cannot be empty');
|
||||
}
|
||||
|
||||
return await this.groupsRepository.update(groupId, { name });
|
||||
}
|
||||
|
||||
async deleteGroup(groupId) {
|
||||
return await this.groupsRepository.delete(groupId);
|
||||
}
|
||||
|
||||
async addMembersToGroup(groupId, userIds) {
|
||||
if (!userIds || !Array.isArray(userIds) || userIds.length === 0) {
|
||||
throw new ValidationError('User IDs are required');
|
||||
}
|
||||
|
||||
for (const userId of userIds) {
|
||||
await this.usersRepository.findById(userId);
|
||||
}
|
||||
|
||||
return await this.groupsRepository.addMembers(groupId, userIds);
|
||||
}
|
||||
|
||||
async removeMemberFromGroup(groupId, userId) {
|
||||
await this.usersRepository.findById(userId);
|
||||
return await this.groupsRepository.removeMember(groupId, userId);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = GroupsService;
|
||||
Reference in New Issue
Block a user