Initial commit

This commit is contained in:
Lorenzo Sanesi
2026-03-26 22:46:03 +01:00
commit 18e0e04700
80 changed files with 13114 additions and 0 deletions
@@ -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;