From db0294626861b8279d50197a88e5bce5e5480f2a Mon Sep 17 00:00:00 2001 From: Me Date: Thu, 15 Dec 2022 05:42:09 +0100 Subject: [PATCH] Query Builder, more specifically an orWhere, is being difficult... hard to test the friendships flow in the frontend without it, still have a good bit of work as a result --- .../src/friendship/friendship.controller.ts | 13 ++ .../src/friendship/friendship.service.ts | 120 ++++++++++++++++-- .../src/pages/profile/ProfileFriends.svelte | 34 ++++- 3 files changed, 153 insertions(+), 14 deletions(-) diff --git a/srcs/requirements/nestjs/api_back/src/friendship/friendship.controller.ts b/srcs/requirements/nestjs/api_back/src/friendship/friendship.controller.ts index 73c6bddb..5e565ee8 100644 --- a/srcs/requirements/nestjs/api_back/src/friendship/friendship.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/friendship/friendship.controller.ts @@ -82,6 +82,19 @@ export class FriendshipController { return this.friendshipService.acceptFriendship(relationshipId, user); } + // TEST !!!!!!!!!! + @Get('myfriends/:relationshipId/test') + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + test(@Param('relationshipId') relationshipId: string, @Req() req) + { + const user : User = req.user; + console.log('testing a friendship MMMMMMMMMMMMMMMMM') + return this.friendshipService.testFriendship(relationshipId, user); + } + + + @Patch('myfriends/:relationshipId/decline') @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) diff --git a/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts b/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts index 74ec28cf..03ff021b 100644 --- a/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts +++ b/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts @@ -29,26 +29,30 @@ export class FriendshipService { .where( new Brackets((qb) => { qb.where( - new Brackets((subQb) => { - subQb.where('friendship.senderUsername = :username', {username : username}) + new Brackets((subAQb) => { + subAQb.where('friendship.senderUsername = :username', {username : username}) .andWhere('friendship.receiverUsername = :friendUsername', {friendUsername : friendUsername}) }) ) .orWhere( - new Brackets((subQb) => { - subQb.where('friendship.senderUsername = :friendUsername', {friendUsername : friendUsername}) + new Brackets((subBQb) => { + subBQb.where('friendship.senderUsername = :friendUsername', {friendUsername : friendUsername}) .andWhere('friendship.receiverUsername = :username', {username : username}) }) ) }), ) .andWhere( - new Brackets((qb) => { - qb.where('friendship.status = :status', {status : FriendshipStatus.ACCEPTED}) - .orWhere('friendship.status = :status', {status : FriendshipStatus.REQUESTED}) + new Brackets((qb2) => { + qb2.where('friendship.status = :status', {status : FriendshipStatus.ACCEPTED}) + // .orWhere('friendship.status = :status', {status : FriendshipStatus.REQUESTED}) }), ) .getOne() + + console.log('Find one friend by username: ') + console.log({...friendship}) + if (!friendship) { throw new HttpException(`There is no such friendship`, HttpStatus.NOT_FOUND); } @@ -166,13 +170,101 @@ export class FriendshipService { return partialFriendship; } +/* +{ + '0': Friendship { + id: 1, + date: 2022-12-15T03:00:05.134Z, + senderUsername: 'chbadad', + receiverUsername: 'erlazo', + status: 'R', + sender: User { + id: 2, + fortyTwoId: '84193', + username: 'chbadad', + email: 'chbadad@student.42.fr', + image_url: 'default.png', + phone: null, + status: 'connected', + isEnabledTwoFactorAuth: false, + isTwoFactorAuthenticated: false, + secretTwoFactorAuth: null + }, + receiver: User { + id: 1, + fortyTwoId: '40588', + username: 'erlazo', + email: 'erlazo@student.42.fr', + image_url: 'default.png', + phone: null, + status: 'connected', + isEnabledTwoFactorAuth: false, + isTwoFactorAuthenticated: false, + secretTwoFactorAuth: null + } + } +} + +VS ------------------------------------------------ + + + id: 1, + date: 2022-12-15T03:00:05.134Z, + senderUsername: 'chbadad', + receiverUsername: 'erlazo', + status: 'R', + sender: User { + id: 2, + fortyTwoId: '84193', + username: 'chbadad', + email: 'chbadad@student.42.fr', + image_url: 'default.png', + phone: null, + status: 'connected', + isEnabledTwoFactorAuth: false, + isTwoFactorAuthenticated: false, + secretTwoFactorAuth: null + }, + receiver: User { + id: 1, + fortyTwoId: '40588', + username: 'erlazo', + email: 'erlazo@student.42.fr', + image_url: 'default.png', + phone: null, + status: 'connected', + isEnabledTwoFactorAuth: false, + isTwoFactorAuthenticated: false, + secretTwoFactorAuth: null + } +} +*/ + + // TEST !!!!!!!!! + async testFriendship(relationshipId: string, user: User) { + const relation = await this.friendshipRepository.find({where: {id: +relationshipId }, relations: ['sender', 'receiver']} ); + // const relation = await this.friendshipRepository.find({take: 1, where: {id: +relationshipId }, relations: ['sender', 'receiver']} ); + // const relation = await this.friendshipRepository.find({select: {0: Friendship}, where: {id: +relationshipId }, relations: ['sender', 'receiver']} ); + // const relation = await this.friendshipRepository.findOne({where: {id: +relationshipId }, relations: ['sender', 'receiver']}); + + console.log('.service test friendship') + console.log({...relation}) + if (relation[0].sender.id) { + console.log('it worked!') + } + if (!relation) { + throw new HttpException(`Found NOTHING.`, HttpStatus.NOT_FOUND); + } + return relation; + } + async acceptFriendship(relationshipId: string, user: User) { // const relation = await this.friendshipRepository.findOneBy({ id: +relationshipId }); // ok gotta swap out hte findOneBy for a find, recall what you did in the Nest.js tutorial - // const relation = await this.friendshipRepository.find({where: {id: +relationshipId }, relations: ['sender', 'receiver']} ); - // const relation = await this.friendshipRepository.find({where: {id: +relationshipId } }); + // this is what i want ideally... + const relation = await this.friendshipRepository.find({where: {id: +relationshipId }, relations: ['sender', 'receiver']} ); // const relation = await this.friendshipRepository.findOneBy({where: {id: +relationshipId }, relations: ['sender', 'receiver']}); - const relation = await this.friendshipRepository.findOne({where: {id: +relationshipId }, relations: ['sender', 'receiver']}); + // const relation = await this.friendshipRepository.findOne({where: {id: +relationshipId }, relations: ['sender', 'receiver']}); console.log('.service accept friendship') console.log({...relation}) @@ -181,11 +273,13 @@ export class FriendshipService { // console.log(relation.sender) // ok so you can't query sender cuz it's not a column in the entity, not sure how you access it then... // if (relation.sender.id === user.id) { - if (relation.sender.id === user.id) { + if (relation[0].sender.id === user.id) { throw new HttpException(`You can't accept your own request.`, HttpStatus.NOT_FOUND); } - relation.status = FriendshipStatus.ACCEPTED; - const savedFriendship = this.friendshipRepository.save(relation); + relation[0].status = FriendshipStatus.ACCEPTED; + // are we sure saving relation[0] won't fuck things up? cuz aren't there 2 User in there? + // should i partial friendship intermediary first? + const savedFriendship = this.friendshipRepository.save(relation[0]); const partialFriendship : Partial = { id : (await savedFriendship).id, date : (await savedFriendship).date, diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileFriends.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileFriends.svelte index 95f7d987..565d54bc 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileFriends.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileFriends.svelte @@ -69,6 +69,22 @@ console.log({...requestsRecieved}) }; + let cherifFetch; + const fetchCherif = async() => { + cherifFetch = await fetch('http://transcendance:8080/api/v2/network/myfriends/chbadad') + .then( x => x.json() ); + console.log('Cherif Fetched ') + console.log({...cherifFetch}) + }; + + let ericFetch; + const fetchEric = async() => { + ericFetch = await fetch('http://transcendance:8080/api/v2/network/myfriends/erlazo') + .then( x => x.json() ); + console.log('Eric Fetched ') + console.log({...ericFetch}) + }; + let sentFriendRequest; const sendFriendRequest = async(potentialFriendUsername) => { set.friendUsername = ''; @@ -92,6 +108,7 @@ }) }) .then( x => x.json()) + areWeFriends(usernameBeingViewed); } }; @@ -100,6 +117,7 @@ friendshipStatusFull = undefined; friendshipStatusFull = await fetch(`http://transcendance:8080/api/v2/network/myfriends/${aUsername}`) .then( x => x.json()); + console.log({...friendshipStatusFull}) }; const viewAUser = async(aUsername) => { @@ -116,6 +134,16 @@ }; + let tmpTest; + const testBack = async(relationshipId) => { + console.log('test back request') + tmpTest = undefined; + // PATCH http://transcendance:8080/api/v2/network/myfriends/:relationshipId/test + tmpTest = await fetch(`http://transcendance:8080/api/v2/network/myfriends/${relationshipId}/test`) + .then( x => x.json()); + }; + + const acceptFriendRequest = async(relationshipId) => { console.log('accept friend request') friendshipFetch = undefined; @@ -124,6 +152,8 @@ method: "PATCH"}) .then( x => x.json()); // maybe not the most robust things, not super reusable cuz it depends on outside vars but works for now... + console.log('accepted friend request, now response') + console.log({...friendshipFetch}) await areWeFriends(usernameBeingViewed); }; @@ -266,7 +296,9 @@ {/if} --> - + + +