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,78 @@
const { NotFoundError, DatabaseError } = require('../../shared/errors');
const { Op } = require('sequelize');
class FriendshipsRepository {
constructor({ sequelize }) {
this.sequelize = sequelize;
this.Friendship = sequelize.models.Friendship;
this.User = sequelize.models.User;
}
async findByUserId(userId) {
try {
const friendships = await this.Friendship.findAll({
where: {
[Op.or]: [{ user1Id: userId }, { user2Id: userId }],
},
include: [
{ model: this.User, as: 'user1' },
{ model: this.User, as: 'user2' },
],
});
return friendships.map((friendship) => {
const friend =
friendship.user1.id === userId ? friendship.user2 : friendship.user1;
return friend;
});
} catch (error) {
throw new DatabaseError(`Failed to fetch friendships for user ${userId}`, error);
}
}
async exists(user1Id, user2Id) {
try {
const minId = Math.min(user1Id, user2Id);
const maxId = Math.max(user1Id, user2Id);
const friendship = await this.Friendship.findOne({
where: { user1Id: minId, user2Id: maxId },
});
return !!friendship;
} catch (error) {
throw new DatabaseError('Failed to check friendship existence', error);
}
}
async create(user1Id, user2Id) {
try {
const minId = Math.min(user1Id, user2Id);
const maxId = Math.max(user1Id, user2Id);
return await this.Friendship.create({
user1Id: minId,
user2Id: maxId,
});
} catch (error) {
throw new DatabaseError('Failed to create friendship', error);
}
}
async delete(user1Id, user2Id) {
try {
const minId = Math.min(user1Id, user2Id);
const maxId = Math.max(user1Id, user2Id);
const result = await this.Friendship.destroy({
where: { user1Id: minId, user2Id: maxId },
});
return result > 0;
} catch (error) {
throw new DatabaseError('Failed to delete friendship', error);
}
}
}
module.exports = FriendshipsRepository;