Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
702cdfe
refactor User Model (#8)
MaelChanon Nov 16, 2023
aebd3cb
refactor de la mise en place de la stratégie (#9)
MaelChanon Nov 20, 2023
806bdac
Feature/profile upload (#11)
MaelChanon Dec 4, 2023
1c22365
version updating (#10)
MaelChanon Dec 4, 2023
69a0de7
test correction
MaelChanon Dec 5, 2023
361b7ff
Update package.json
MaelChanon Dec 5, 2023
393eaf6
Feature/generate auth request (#14)
MaelChanon Dec 11, 2023
0403c7e
features/getToken
MaelChanon Dec 19, 2023
fade0c2
added static image server (#16)
MaelChanon Dec 19, 2023
4d679d5
registering refactor (#17)
MaelChanon Dec 29, 2023
3eade89
correction
MaelChanon Dec 29, 2023
6a94766
coverage feature (#18)
MaelChanon Dec 29, 2023
1968a86
Feature/fetch artiste (#13)
MaelChanon Jan 3, 2024
4f049c2
save (#19)
MaelChanon Jan 7, 2024
1d839cd
Fix/mac compatibility (#20)
MaelChanon Jan 9, 2024
e35b7a0
test + cors (#21)
MaelChanon Jan 9, 2024
0262cd8
Feature/fetch chansonà correction (#22)
MaelChanon Jan 15, 2024
19f3b30
search refactor (#23)
MaelChanon Jan 16, 2024
ba87150
added follow endpoint (#24)
MaelChanon Jan 17, 2024
d68a4f5
search & test correction
MaelChanon Jan 20, 2024
373f538
quick fix
MaelChanon Jan 28, 2024
6ed8538
correction
MaelChanon Jan 29, 2024
d9feea5
test improvement (#26)
MaelChanon Jan 29, 2024
1f1191d
searchbar changement metier (#27)
MaelChanon Jan 29, 2024
02a9ddb
Feature/fetch artist songs (#28)
Hiyorie Feb 3, 2024
c0c1b4c
correction (#29)
MaelChanon Feb 3, 2024
3a78b0e
re ajout test fetch artist songs (#31)
MaelChanon Feb 5, 2024
178e98a
added single to serialisation (#32)
MaelChanon Feb 5, 2024
a6310e7
added compilation to serilization
MaelChanon Feb 6, 2024
9b654c9
Fix/auth sytem (#33)
MaelChanon Feb 11, 2024
dc36825
auth with spotify
MaelChanon Feb 13, 2024
948237f
fix db (#35)
MaelChanon Feb 13, 2024
0ecd643
Gestion relation amis (#34)
yousrah24 Feb 13, 2024
8c7b484
Feature/review-endpoints (#36)
MaelChanon Feb 27, 2024
af126dc
ajout de l'id + modification du type pour faire appraitre appears_on
yousrah24 Mar 7, 2024
bbe7c62
ajout de l'id + modification du type pour faire appraitre appears_on
yousrah24 Mar 7, 2024
379af78
Feature/artist pagej (#37)
MaelChanon Mar 11, 2024
283563c
swagger correction (#38)
MaelChanon Mar 11, 2024
24e264b
added like oeuvre endpoint (#39)
MaelChanon Mar 12, 2024
6323a60
correction getUserByConfirmToken (#40)
MaelChanon Mar 12, 2024
9795aca
removed limit (#41)
MaelChanon Mar 12, 2024
22501cc
isUser correction
MaelChanon Mar 12, 2024
70e5f29
correction (#42)
MaelChanon Mar 12, 2024
8e72539
replaced email by user in signin (#43)
MaelChanon Mar 19, 2024
02b54f1
corrected createdAt date for reviews (#44)
MaelChanon Mar 19, 2024
73ee184
added getOeuvre review (#45)
MaelChanon Mar 19, 2024
07c6d34
Fix/get oeuvre fav (#46)
MaelChanon Mar 24, 2024
f1b6982
Fix/get oeuvre reviews (#47)
MaelChanon Mar 25, 2024
f7aeddd
correction des erreurs + ajout de review count pour les oeuvres
yousrah24 Mar 26, 2024
0415fcc
correction des erreurs + ajout de review count pour les oeuvres
yousrah24 Mar 26, 2024
e4adf14
Resolution du probleme de confidentialité dans friend repos
yousrah24 Apr 7, 2024
d100f21
page oeuvre (#48)
Hiyorie Apr 9, 2024
e9dcaf1
Feature/comment rebase (#49)
MaelChanon Apr 14, 2024
18ff20c
renvoiyer les infos utlisateur lors d'une confirmation utilisateur
yousrah24 Apr 17, 2024
c049817
correction likeOeuvre (#50)
Hiyorie Apr 30, 2024
ce34265
fix getComment (#51)
Hiyorie Apr 30, 2024
a938760
Feature/fix review (#52)
Hiyorie Apr 30, 2024
d4a8944
Feature/followers artist (#53)
Hiyorie Apr 30, 2024
b0e99a3
Feature/friend reviews (#54)
MaelChanon Apr 30, 2024
acec6ff
corrected putreview
MaelChanon Apr 30, 2024
ad6ada4
Fix de la requete countlike sur les commentaires pour pas prendre en …
yousrah24 Apr 30, 2024
8746b90
resolution de conflit dans comment repos
yousrah24 Apr 30, 2024
467c199
Fix de getOeuvre pour recuperer les reviewCount et likecount et ratin…
yousrah24 May 1, 2024
0e6ea57
Feature/followers artist (#55)
Hiyorie May 5, 2024
9e5237e
Feature/user page (#56)
MaelChanon May 7, 2024
9c8555e
fixed navigation
MaelChanon May 9, 2024
fc31c6f
2 requests friends page (#58)
Hiyorie May 10, 2024
ea3c70a
Feature/followers artist (#59)
Hiyorie May 10, 2024
72a55ba
fixed navigation
MaelChanon May 9, 2024
60d98f1
Merge branch 'fix/navigation' of https://github.com/Sae-BUT-3/Solimbo…
MaelChanon May 10, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,9 @@ node_modules

.idea/

upload

docker-compose.yml
.env

coverage/
Binary file added lib/7dc6da2fbc3e960f6bf7aa15fa68a16b.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
145 changes: 145 additions & 0 deletions lib/application/use_cases/artist/getArtist.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
const serializeArtiste = require("../../../interfaces/serializers/ArtistSerializer");
const throwStatusCode = require("../utils/throwStatusCode");
const UserPublic = require("../../../domain/model/UserPublic");
const ArtistPage = require("../../../domain/model/ArtistPage.js");
const serializeAlbum = require("../../../interfaces/serializers/AlbumSerializer");
const reviewSerializer = require("../../../interfaces/serializers/ReviewSerializer.js");
module.exports = async (
artistId,
userToken,
{
accessTokenManager,
userRepository,
spotifyRepository,
reviewRepository,
followRepository,
friendRepository,
}
) => {
const id_utilisateur = accessTokenManager.decode(userToken)?.value;
const user = await userRepository.getByUser(id_utilisateur);
if (!user)
throwStatusCode(401, "votre token d'authentification n'est pas le bon");
const artist = await spotifyRepository.getSpotifyArtist(artistId);
if (artist.error) throwStatusCode(artist.error.status, artist.error.message);
const doesUserFollow = await followRepository.doesFollows(
id_utilisateur,
artistId
);
const albums = await spotifyRepository.getSpotifyArtistSongs(
artistId,
"album,single"
);

const album_ids = albums.items.map((album) => album.id);
const [
follower_count,
friends_followers,
friend_follower_count,
reviewsByLike,
reviewsByTime,
reviewsByFriends,
] = await Promise.all([
followRepository.getFollowersCount(artistId),
followRepository.getFriendsFollowing(artistId, user.id_utilisateur, 3),
followRepository.getFriendsFollowingCount(artistId, user.id_utilisateur),
reviewRepository.getOeuvreReviews(
1,
3,
true,
false,
false,
album_ids,
user.id_utilisateur
),
reviewRepository.getOeuvreReviews(
1,
3,
false,
false,
false,
album_ids,
user.id_utilisateur
),
reviewRepository.getOeuvreReviews(
1,
3,
false,
false,
true,
album_ids,
user.id_utilisateur
),
]);
return await artistSerizilizer(
user.id_utilisateur,
doesUserFollow,
artist,
albums,
follower_count,
friends_followers,
friend_follower_count,
reviewsByLike,
reviewsByTime,
reviewsByFriends,
{ reviewRepository, spotifyRepository, friendRepository }
);
};

const artistSerizilizer = async (
id_utilisateur,
doesUserFollow,
artist,
albums,
followers_count,
friends_followers,
friend_follower_count,
reviewsByLike,
reviewsByTime,
reviewsByFriends,
{ reviewRepository, spotifyRepository, friendRepository }
) => {
artist.follower_count = followers_count;
artist = serializeArtiste(artist);

albums = await Promise.all(
albums.items.map(async (item) => {
item.rating = await reviewRepository.getOeuvreRating(item.id);
item.reviewCount = await reviewRepository.getReviewCount(item.id);
return serializeAlbum(item);
})
);

friends_followers = {
count: friend_follower_count,
users: friends_followers.map((item) => {
return new UserPublic(item);
}),
};
const serializeReviews = (reviews) => {
return reviews.map(async (review) => {
return reviewSerializer(
review,
id_utilisateur,
undefined,
spotifyRepository,
reviewRepository,
friendRepository
);
});
};
reviewsByLike = await Promise.all(serializeReviews(reviewsByLike));

reviewsByTime = await Promise.all(serializeReviews(reviewsByTime));

reviewsByFriends = await Promise.all(serializeReviews(reviewsByFriends));
return new ArtistPage(
artist,
albums,
friends_followers,
reviewsByLike,
reviewsByTime,
reviewsByFriends,
doesUserFollow
);
};
41 changes: 41 additions & 0 deletions lib/application/use_cases/artist/getArtistFollowers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
const throwStatusCode = require("../utils/throwStatusCode.js");
const ArtistFollowersPage = require("../../../domain/model/ArtistFollowersPage.js");
const UserPublic = require("../../../domain/model/UserPublic.js");

module.exports = async (artistId, userToken, {accessTokenManager,userRepository, spotifyRepository, followRepository, friendRepository}) => {
const id_utilisateur = accessTokenManager.decode(userToken)?.value
const user = await userRepository.getByUser(id_utilisateur)
if(!user) throwStatusCode(401,"votre token d'authentification n'est pas le bon")

const artist = await spotifyRepository.getSpotifyArtist(artistId)
if(artist.error)
throwStatusCode(artist.error.status,artist.error.message)

const followersFriendsList = await followRepository.getFriendsFollowing(artistId,id_utilisateur)
const followersWithoutFriends = await followRepository.getArtistFollowersWithoutFriends(artistId, id_utilisateur)

const followersFriendsList2 = await Promise.all(followersFriendsList.map(async (item) => {
const areFriends = await friendRepository.areFriends(id_utilisateur, item.id_utilisateur);
const userPublicFriends = new UserPublic(item)
return {
...userPublicFriends,
areFriends: areFriends
};
}));

const followersWithoutFriendst2 = await Promise.all(followersWithoutFriends.map(async (item) => {
let areFriends = await friendRepository.areFriends(id_utilisateur, item.id_utilisateur);
const userPublicNoFriends = new UserPublic(item)
if(id_utilisateur == item.id_utilisateur) {
areFriends = false
}
return {
...userPublicNoFriends,
areFriends: areFriends
};
}));

const allFollowers = [...followersFriendsList2, ...followersWithoutFriendst2];

return new ArtistFollowersPage(artist, allFollowers)
}
14 changes: 14 additions & 0 deletions lib/application/use_cases/comment/deleteComment.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const throwStatusCode = require("../utils/throwStatusCode");
module.exports = async (
idComment,
userToken,
{ accessTokenManager, userRepository, commentRepository }
) => {
const id_utilisateur = accessTokenManager.decode(userToken)?.value;
if (!(await userRepository.getByUser(id_utilisateur)))
throwStatusCode(401, "votre token d'authentification n'est pas le bon");
if (!(await commentRepository.canDelete(idComment, id_utilisateur)))
throwStatusCode(403, "ce n'est pas votre post");

await commentRepository.delete(idComment, id_utilisateur);
};
142 changes: 142 additions & 0 deletions lib/application/use_cases/comment/getComment.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
const reviewSerializer = require("../../../interfaces/serializers/ReviewSerializer");
const PublicComment = require("../../../domain/model/PublicComment");
const UserPublic = require("../../../domain/model/UserPublic");
const throwStatusCode = require("../utils/throwStatusCode");


module.exports = async (
id_com,
page,
pageSize,
orderByLike,
userToken,
{
reviewRepository,
commentRepository,
accessTokenManager,
userRepository,
friendRepository,
spotifyRepository,
}
) => {
const id_utilisateur = accessTokenManager.decode(userToken)?.value;
if (!(await userRepository.getByUser(id_utilisateur)))
throwStatusCode(401, "votre token d'authentification n'est pas le bon");
const mainComment = await commentRepository.getById(id_com);
if (!mainComment) throwStatusCode(404, "commentaire introuvable");
const commentsRaw = await commentRepository.getCommentsComments(
id_com,
id_utilisateur,
true,
page,
pageSize,
orderByLike
);
const review = await reviewRepository.getById(mainComment.id_review);
let previousComments = [];
let nextCommentsId = mainComment.id_reponse;
while (nextCommentsId) {
previousComments.push(await commentRepository.getById(nextCommentsId));
nextCommentsId = previousComments.at(-1).id_reponse;
}
return await serialize(
id_utilisateur,
mainComment,
previousComments,
commentsRaw,
review,
{ spotifyRepository, friendRepository, commentRepository, reviewRepository }
);
};

const serialize = async (
id_utilisateur,
comment,
previousComments,
comments,
review,
{ spotifyRepository, friendRepository, commentRepository, reviewRepository }
) => {
const serializeReview = async () => {
return !review.utilisateur.is_private ||
friendRepository.areFriends(
id_utilisateur,
review.utilisateur.id_utilisateur
)
? reviewSerializer(
review,
id_utilisateur,
comments,
spotifyRepository,
reviewRepository,
friendRepository
)
: {
private: true,
};
};
const serializeComment = async () => {
const doesUserLike = await commentRepository.doesUserLike(
id_utilisateur,
comment.id_com
);
comment.doesUserLike = doesUserLike;
return !comment.utilisateur.is_private ||
friendRepository.areFriends(
id_utilisateur,
comment.utilisateur.id_utilisateur
)
? new PublicComment(comment, new UserPublic(comment.utilisateur))
: {
private: true,
};
};
const serializedPreviousComments = Promise.all(
previousComments.map(async (comment) => {
const doesUserLike = await commentRepository.doesUserLike(
id_utilisateur,
comment.id_com
);
comment.doesUserLike = doesUserLike;
return !comment.utilisateur.is_private ||
friendRepository.areFriends(
id_utilisateur,
comment.utilisateur.id_utilisateur
)
? new PublicComment(comment)
: {
private: true,
};
})
);
const serializedComments = Promise.all(
comments.map(async (comment) => {
const doesUserLike = await commentRepository.doesUserLike(
id_utilisateur,
comment.id_com
);
comment.doesUserLike = doesUserLike;
return !comment.utilisateur.is_private ||
friendRepository.areFriends(
id_utilisateur,
comment.utilisateur.id_utilisateur
)
? new PublicComment(comment, new UserPublic(comment.utilisateur))
: {
private: true,
};
})
);
const promise = await Promise.all([
serializeReview(),
serializeComment(),
serializedPreviousComments,
serializedComments,
]);
return {
review: promise[0],
comment: promise[1],
previousComments: promise[2],
comments: promise[3],
};
};
11 changes: 11 additions & 0 deletions lib/application/use_cases/comment/likeComment.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const throwStatusCode = require("../utils/throwStatusCode");
module.exports = async (commentId,userToken,{accessTokenManager,userRepository,commentRepository}) =>{
const id_utilisateur = accessTokenManager.decode(userToken)?.value
if(! await commentRepository.getById(commentId)) throwStatusCode(404,"commentaire introuvable")
if(! await userRepository.getByUser(id_utilisateur)) throwStatusCode(401,"votre token d'authentification n'est pas le bon")
if(! await commentRepository.doesUserLike(commentId,id_utilisateur)){
await commentRepository.like(commentId,id_utilisateur,)
return true
}
await commentRepository.unlike(commentId,id_utilisateur)
}
16 changes: 16 additions & 0 deletions lib/application/use_cases/comment/putComment.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const throwStatusCode = require("../utils/throwStatusCode");
const PublicComment = require("../../../domain/model/PublicComment")
const UserPublic = require("../../../domain/model/UserPublic")
module.exports = async (
commentId,
description,
userToken,
{friendRepository,accessTokenManager,commentRepository,userRepository}) => {
const id_utilisateur = accessTokenManager.decode(userToken)?.value
if(! await userRepository.getByUser(id_utilisateur)) throwStatusCode(401,"votre token d'authentification n'est pas le bon")
const comment = await commentRepository.getById(commentId)
if(comment.utilisateur.is_private && !(await friendRepository.areFriends(id_utilisateur,comment.utilisateur.id_utilisateur)))
throwStatusCode(403, "l'utilisateur est en privé")
const commentRaw = await commentRepository.persist(comment.id_review,description,id_utilisateur,commentId)
return new PublicComment(commentRaw,new UserPublic(comment.utilisateur))
}
Loading