Initial commit
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
const { NotFoundError, DatabaseError } = require('../../shared/errors');
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
class FriendRequestsRepository {
|
||||
constructor({ sequelize }) {
|
||||
this.sequelize = sequelize;
|
||||
this.FriendRequest = sequelize.models.FriendRequest;
|
||||
this.User = sequelize.models.User;
|
||||
}
|
||||
|
||||
async findById(id) {
|
||||
try {
|
||||
const request = await this.FriendRequest.findByPk(id, {
|
||||
include: [
|
||||
{ model: this.User, as: 'fromUser' },
|
||||
{ model: this.User, as: 'toUser' },
|
||||
],
|
||||
});
|
||||
if (!request) {
|
||||
throw new NotFoundError('Friend request not found');
|
||||
}
|
||||
return request;
|
||||
} catch (error) {
|
||||
if (error instanceof NotFoundError) throw error;
|
||||
throw new DatabaseError(`Failed to fetch friend request with id ${id}`, error);
|
||||
}
|
||||
}
|
||||
|
||||
async findPendingByUserId(userId) {
|
||||
try {
|
||||
return await this.FriendRequest.findAll({
|
||||
where: {
|
||||
toUserId: userId,
|
||||
status: 'PENDING',
|
||||
},
|
||||
include: [
|
||||
{ model: this.User, as: 'fromUser' },
|
||||
{ model: this.User, as: 'toUser' },
|
||||
],
|
||||
});
|
||||
} catch (error) {
|
||||
throw new DatabaseError(
|
||||
`Failed to fetch pending requests for user ${userId}`,
|
||||
error
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async findExisting(fromUserId, toUserId) {
|
||||
try {
|
||||
return await this.FriendRequest.findOne({
|
||||
where: {
|
||||
[Op.or]: [
|
||||
{ fromUserId, toUserId },
|
||||
{ fromUserId: toUserId, toUserId: fromUserId },
|
||||
],
|
||||
status: 'PENDING',
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
throw new DatabaseError('Failed to check existing friend request', error);
|
||||
}
|
||||
}
|
||||
|
||||
async create(fromUserId, toUserId) {
|
||||
try {
|
||||
return await this.FriendRequest.create({
|
||||
fromUserId,
|
||||
toUserId,
|
||||
status: 'PENDING',
|
||||
});
|
||||
} catch (error) {
|
||||
throw new DatabaseError('Failed to create friend request', error);
|
||||
}
|
||||
}
|
||||
|
||||
async updateStatus(id, status) {
|
||||
try {
|
||||
const request = await this.findById(id);
|
||||
return await request.update({ status });
|
||||
} catch (error) {
|
||||
if (error instanceof NotFoundError) throw error;
|
||||
throw new DatabaseError('Failed to update friend request status', error);
|
||||
}
|
||||
}
|
||||
|
||||
async delete(id) {
|
||||
try {
|
||||
const request = await this.findById(id);
|
||||
await request.destroy();
|
||||
return true;
|
||||
} catch (error) {
|
||||
if (error instanceof NotFoundError) throw error;
|
||||
throw new DatabaseError('Failed to delete friend request', error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = FriendRequestsRepository;
|
||||
Reference in New Issue
Block a user