From 49ffa74bb41ff2927038bd40d6df7e9a7fc82079 Mon Sep 17 00:00:00 2001 From: Me Date: Mon, 16 Jan 2023 18:48:13 +0100 Subject: [PATCH 01/29] small update to ProfileUsers, make it so buttons don't load if user doesn't --- .../pages/profile/ProfileDisplayOneUser.svelte | 8 ++++++++ .../src/pages/profile/ProfileUsers.svelte | 5 ++++- .../api_front/src/pieces/DisplayAUser.svelte | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplayOneUser.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplayOneUser.svelte index f20dbade..fc2fd8fb 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplayOneUser.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplayOneUser.svelte @@ -42,3 +42,11 @@ + diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte index 7b945dc7..27de76b2 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte @@ -16,6 +16,7 @@ /**** Layout variables ****/ let tabItems: string[] = ['All Users', 'My Friends', 'Friend Requests', 'Blocked Users'] let activeTabItem: string = 'All Users'; + let loadedUser; onMount( async() => { @@ -295,8 +296,9 @@
{#if usernameBeingViewed !== undefined} - + + {#if loadedUser === true}
{#if friendshipStatusFull && friendshipStatusFull.id} {#if friendshipStatusFull.status === 'R'} @@ -329,6 +331,7 @@ {/if}
+ {/if} {:else}

Click on a user!

diff --git a/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte b/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte index 0a0c6eb0..5a7b67b8 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte @@ -4,6 +4,7 @@ import GenerateUserDisplay from './GenerateUserDisplay.svelte'; export let aUsername; + export let loaded = false; let user; onMount( async() => { @@ -20,6 +21,13 @@ $: aUsername, updateUser(); + $: { + if (user === undefined) + loaded = false; + else + loaded = true; + } +
@@ -30,3 +38,13 @@
Failed to load user {aUsername}
{/if}
+ + + \ No newline at end of file From af872eafc5c21533ad22990aaec9d2d630405756 Mon Sep 17 00:00:00 2001 From: Me Date: Mon, 16 Jan 2023 18:53:14 +0100 Subject: [PATCH 02/29] removed the cached .env that was lurking about --- srcs/requirements/svelte/api_front/.env | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 srcs/requirements/svelte/api_front/.env diff --git a/srcs/requirements/svelte/api_front/.env b/srcs/requirements/svelte/api_front/.env deleted file mode 100644 index 1b450684..00000000 --- a/srcs/requirements/svelte/api_front/.env +++ /dev/null @@ -1,2 +0,0 @@ -WEBSITE_HOST=transcendance -WEBSITE_PORT=8080 From 86f7add6edae0ebcb61865af5621339fcfc28066 Mon Sep 17 00:00:00 2001 From: Me Date: Mon, 16 Jan 2023 21:47:02 +0100 Subject: [PATCH 03/29] a few small fixes, about to add 404 exceptions most places i do fetches --- .../src/friendship/friendship.service.ts | 2 ++ .../src/pages/profile/ProfileUsers.svelte | 36 ++++++++++++++----- .../api_front/src/pieces/DisplayAUser.svelte | 10 ++++-- .../src/pieces/GenerateUserDisplay.svelte | 16 +++++---- .../api_front/src/routes/primaryRoutes.js | 2 ++ 5 files changed, 48 insertions(+), 18 deletions(-) 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 2a325e0b..2089c023 100644 --- a/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts +++ b/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts @@ -85,6 +85,8 @@ export class FriendshipService { if (!friendship) { throw new HttpException(`There is no such friendship`, HttpStatus.NOT_FOUND); + // throw new HttpException(`There is no such friendship`, HttpStatus.NO_CONTENT); + // throw new HttpException(`There is no such friendship`, 204); } return new SendableFriendship(friendship); } diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte index 861f4400..1e9451d8 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte @@ -118,14 +118,23 @@ friendshipStatusFull = await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/network/myfriends?username=${aUsername}`) .then((response) => { if (!response.ok) { - throw new Error("HTTP " + response.status); - } + console.log("response not ok : ") + console.log({...response}) + // throw new Error("HTTP " + response.status); + } + // else { + console.log("response ok : ") + console.log({...response}) return response.json(); + // } }) - .catch((error) => { + .catch((error) => { + console.log("catching things") console.log("catch fetchFriendshipFull: ", error); return []; }); + // console.log('friendshipFull: ') + // console.log({...friendshipStatusFull}) }; const sendFriendRequest = async (aUsername) => { @@ -274,6 +283,7 @@ const unblockAUser = async (relationshipId) => { // it's basically the same as unfriending someone cuz unfriending them means the relationship is deleted await unfriend(relationshipId); + await fetchAll(); activeTabItem = activeTabItem; }; @@ -289,8 +299,21 @@ await fetchBlockedUsers(); console.log("fetching blocked users"); } - if (usernameBeingViewed) + if (usernameBeingViewed) { + await fetchAllUsers_Wrapper(); fetchFriendshipFull(usernameBeingViewed); + } + + + // if (usernameBeingViewed) { + // let found = allUsers.find( + // (e) => e.username === usernameBeingViewed + // ); + // if (!found) { + // usernameBeingViewed = null; + // friendshipStatusFull = null; + // } + // } }; @@ -470,9 +493,4 @@ } - .error{ - font-size: 0.8em; - font-weight: bold; - color: red; - } diff --git a/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte b/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte index 1623872d..bb728bd7 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte @@ -6,16 +6,20 @@ export let aUsername; export let loaded = false; - let user; + let aUser; onMount( async() => { aUser = await fetchUser(aUsername); }) - $: aUsername, fetchUser(aUsername); + const updateUser = async(aUsername) => { + aUser = await fetchUser(aUsername); + }; + + $: aUsername, updateUser(aUsername); $: { - if (user === undefined) + if (aUser === undefined) loaded = false; else loaded = true; diff --git a/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte b/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte index d8a9904d..1527b58e 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte @@ -8,8 +8,7 @@ let rank = ''; let avatar; // avatar needs to be updated!!! - console.log('Generate User Display, BEFORE on mount ' + avatar) - console.log('user:') + console.log('Generate User Display user:') console.log({...user}) // console.log(user) let errors = {avatar: ''}; @@ -18,15 +17,20 @@ avatar = await fetchAvatar(user.username); }) + const updateAvatar = async() => { + avatar = await fetchAvatar(user.username); + }; + + $: user, updateAvatar(); /**** THIS IS BASICALLY ALL THE RANK LOGIC ERIC HAS MADE ****/ - if (user.loseGame > user.winGame) { - rank = 'Bitch Ass Loser!' - } else if (user.loseGame === user.winGame) { + if (user.stats.loseGame > user.stats.winGame) { + rank = "Come on, you can do better" + } else if (user.stats.loseGame === user.stats.winGame) { rank = 'Fine i guess...' } else { - rank = 'Yea you da Boss!' + rank = 'You da Boss!' } diff --git a/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js b/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js index 9bd7b912..eb0aa6c9 100644 --- a/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js +++ b/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js @@ -12,9 +12,11 @@ import { fetchUser } from "../pieces/utils"; async function checkLogin(detail) { const user = await fetchUser(); if (!user || !user.username) { + console.log('failed to be logged in') return false; } else { + console.log('successfully logged in') return true; } } From 29b6042cda1e5984c5943e912e4ad4a03d25fb4c Mon Sep 17 00:00:00 2001 From: Me Date: Tue, 17 Jan 2023 03:04:36 +0100 Subject: [PATCH 04/29] clean up --- .../src/friendship/friendship.service.ts | 6 --- .../src/pages/profile/ProfileUsers.svelte | 34 ++++++---------- .../src/pieces/GenerateUserDisplay.svelte | 14 +++---- .../api_front/src/pieces/ScrollTo.svelte | 40 ------------------- .../svelte/api_front/src/pieces/utils.ts | 2 + .../api_front/src/routes/primaryRoutes.js | 4 +- 6 files changed, 22 insertions(+), 78 deletions(-) delete mode 100644 srcs/requirements/svelte/api_front/src/pieces/ScrollTo.svelte 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 2089c023..d0aba0ab 100644 --- a/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts +++ b/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts @@ -1,9 +1,6 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { User } from 'src/users/entities/user.entity'; - -import { SendableUser } from 'src/users/sendableUsers'; - import { Repository, Brackets } from 'typeorm'; import { CreateFriendshipDto } from './dto/create-friendship.dto'; import { Friendship, FriendshipStatus } from './entities/friendship.entity'; @@ -77,7 +74,6 @@ export class FriendshipService { ) }), ) - // .andWhere('friendship.status != :status', {status : FriendshipStatus.BLOCKED}) .getOne() // console.log('END Find one friend by username: ') @@ -85,8 +81,6 @@ export class FriendshipService { if (!friendship) { throw new HttpException(`There is no such friendship`, HttpStatus.NOT_FOUND); - // throw new HttpException(`There is no such friendship`, HttpStatus.NO_CONTENT); - // throw new HttpException(`There is no such friendship`, 204); } return new SendableFriendship(friendship); } diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte index 1e9451d8..f5a215fb 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte @@ -60,6 +60,8 @@ myFriendships = await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/network/myfriends`) .then((response) => { if (!response.ok) { + if (response.status === 404) + return [] throw new Error("HTTP " + response.status); } return response.json(); @@ -74,6 +76,8 @@ requestsMade = await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/network/pending`) .then((response) => { if (!response.ok) { + if (response.status === 404) + return [] throw new Error("HTTP " + response.status); } return response.json(); @@ -88,6 +92,8 @@ requestsRecieved = await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/network/received`) .then((response) => { if (!response.ok) { + if (response.status === 404) + return [] throw new Error("HTTP " + response.status); } return response.json(); @@ -102,6 +108,8 @@ blockedUsers = await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/network/blocked`) .then((response) => { if (!response.ok) { + if (response.status === 404) + return [] throw new Error("HTTP " + response.status); } return response.json(); @@ -118,23 +126,16 @@ friendshipStatusFull = await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/network/myfriends?username=${aUsername}`) .then((response) => { if (!response.ok) { - console.log("response not ok : ") - console.log({...response}) - // throw new Error("HTTP " + response.status); + if (response.status === 404) + return [] + throw new Error("HTTP " + response.status); } - // else { - console.log("response ok : ") - console.log({...response}) return response.json(); - // } }) .catch((error) => { - console.log("catching things") console.log("catch fetchFriendshipFull: ", error); return []; }); - // console.log('friendshipFull: ') - // console.log({...friendshipStatusFull}) }; const sendFriendRequest = async (aUsername) => { @@ -303,17 +304,6 @@ await fetchAllUsers_Wrapper(); fetchFriendshipFull(usernameBeingViewed); } - - - // if (usernameBeingViewed) { - // let found = allUsers.find( - // (e) => e.username === usernameBeingViewed - // ); - // if (!found) { - // usernameBeingViewed = null; - // friendshipStatusFull = null; - // } - // } }; @@ -382,6 +372,8 @@
+ +
{#if usernameBeingViewed} diff --git a/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte b/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte index 1527b58e..46606ced 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte @@ -2,14 +2,14 @@ import { onMount } from 'svelte'; - import { fetchAvatar } from "./utils"; + import { fetchAvatar } from "./utils.js"; export let user; let rank = ''; let avatar; - // avatar needs to be updated!!! - console.log('Generate User Display user:') - console.log({...user}) + + // console.log('Generate User Display user:') + // console.log({...user}) // console.log(user) let errors = {avatar: ''}; @@ -23,8 +23,6 @@ $: user, updateAvatar(); - /**** THIS IS BASICALLY ALL THE RANK LOGIC ERIC HAS MADE ****/ - if (user.stats.loseGame > user.stats.winGame) { rank = "Come on, you can do better" } else if (user.stats.loseGame === user.stats.winGame) { @@ -64,12 +62,10 @@ - +
{#if user}
- - user avatar
{errors.avatar}
{user.username}
diff --git a/srcs/requirements/svelte/api_front/src/pieces/ScrollTo.svelte b/srcs/requirements/svelte/api_front/src/pieces/ScrollTo.svelte deleted file mode 100644 index e95fcc34..00000000 --- a/srcs/requirements/svelte/api_front/src/pieces/ScrollTo.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/srcs/requirements/svelte/api_front/src/pieces/utils.ts b/srcs/requirements/svelte/api_front/src/pieces/utils.ts index e193b039..91295b28 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/utils.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/utils.ts @@ -47,6 +47,8 @@ export async function fetchAllUsers() return fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/all`) .then((response) => { if (!response.ok) { + if (response.status === 404) + return []; throw new Error("HTTP " + response.status); } return response.json(); diff --git a/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js b/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js index eb0aa6c9..87af3079 100644 --- a/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js +++ b/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js @@ -12,11 +12,11 @@ import { fetchUser } from "../pieces/utils"; async function checkLogin(detail) { const user = await fetchUser(); if (!user || !user.username) { - console.log('failed to be logged in') + // console.log('failed to be logged in') return false; } else { - console.log('successfully logged in') + // console.log('successfully logged in') return true; } } From 86b8ab74a28a0eb684369801cc2cde98b9c7d93f Mon Sep 17 00:00:00 2001 From: cherif Date: Tue, 17 Jan 2023 10:16:47 +0100 Subject: [PATCH 05/29] =?UTF-8?q?correction=20d'un=20appel=20non=20prot?= =?UTF-8?q?=C3=A9g=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nestjs/api_back/src/chat/chat.service.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts index a97d9004..8313583b 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -372,11 +372,14 @@ export class ChatService { async getListBlockUser(username: string): Promise { printCaller("-- in "); - + let users: string[] = []; let user = await this.getUserByName(username); - let friends_users = await this.friendshipService.findAllBlockedFriends(user.id); - let users = friends_users.map(user => user.receiverUsername); - + console.log("USERNAME CHAT SRVICE " + username); + let friends_users; + if (user) + friends_users = await this.friendshipService.findAllBlockedFriends(user.id); + if (friends_users) + users = friends_users.map(user => user.receiverUsername); printCaller("-- out "); return users; } From 86a507fdf61944b7505062a7bf73fdd2ea54f493 Mon Sep 17 00:00:00 2001 From: cherif Date: Tue, 17 Jan 2023 10:29:32 +0100 Subject: [PATCH 06/29] add a max lenght for username --- .../nestjs/api_back/src/users/dto/create-users.dto.ts | 3 ++- .../svelte/api_front/src/pages/profile/ProfileSettings.svelte | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/srcs/requirements/nestjs/api_back/src/users/dto/create-users.dto.ts b/srcs/requirements/nestjs/api_back/src/users/dto/create-users.dto.ts index 8b1a2529..9b61c95a 100644 --- a/srcs/requirements/nestjs/api_back/src/users/dto/create-users.dto.ts +++ b/srcs/requirements/nestjs/api_back/src/users/dto/create-users.dto.ts @@ -1,10 +1,11 @@ -import { IsBoolean, Matches, IsEmail, IsNotEmpty, IsOptional, IsString } from 'class-validator'; +import { IsBoolean, Matches, MaxLength, IsEmail, IsNotEmpty, IsOptional, IsString } from 'class-validator'; import { isSet } from 'util/types'; export class CreateUsersDto { @IsString() @IsNotEmpty() @Matches(/^[a-zA-Z0-9'-_]+$/) + @MaxLength(50) readonly username: string; readonly fortyTwoId: string; @IsEmail() diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte index f4fa2699..a5058dee 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte @@ -51,7 +51,7 @@ .then((response) => { if (!response.ok) { success.username = '' - errors.username = "Use [a-zA-Z0-9] and - _ ."; + errors.username = "Max length : 50 . Use [a-zA-Z0-9] and - _ ."; if (response.status === 409) { errors.username = `${set.username} is already in use, pick a different one.`; } From b4139283e153524f2bd0fcd11c44dde780852e10 Mon Sep 17 00:00:00 2001 From: cherif Date: Tue, 17 Jan 2023 11:08:34 +0100 Subject: [PATCH 07/29] different new username when another one exist at the first connection --- .../nestjs/api_back/src/auth/42/authentication.service.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/srcs/requirements/nestjs/api_back/src/auth/42/authentication.service.ts b/srcs/requirements/nestjs/api_back/src/auth/42/authentication.service.ts index b338ce7b..3d4098ac 100644 --- a/srcs/requirements/nestjs/api_back/src/auth/42/authentication.service.ts +++ b/srcs/requirements/nestjs/api_back/src/auth/42/authentication.service.ts @@ -24,10 +24,12 @@ export class AuthenticationService { if (!check_name) return await this.userService.create(createUsersDto); let createUsersDtoWithUsername : CreateUsersDto = createUsersDto; + let i = 0; while (check_name === true) { - createUsersDtoWithUsername = { ...createUsersDto, username: createUsersDto.username + randomUUID() }; + createUsersDtoWithUsername = { ...createUsersDto, username: createUsersDto.username + '_' + i}; check_name = await this.userService.isUsernameExists(createUsersDtoWithUsername.username); + i++; } return this.userService.create(createUsersDtoWithUsername); } From 4c5580bbf36511482095529987087dd483c83bc9 Mon Sep 17 00:00:00 2001 From: cherif Date: Tue, 17 Jan 2023 11:19:43 +0100 Subject: [PATCH 08/29] =?UTF-8?q?rajout=20d'un=20texte=20de=20succes=20qui?= =?UTF-8?q?=20avait=20=C3=A9t=C3=A9=20enlev=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../svelte/api_front/src/pages/profile/ProfileSettings.svelte | 3 +++ 1 file changed, 3 insertions(+) diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte index a5058dee..426c7bb5 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte @@ -93,9 +93,11 @@ ) .then((response) => { if (!response.ok) { + success.avatar = '' errors.avatar = response.statusText; throw new Error("HTTP " + response.status); } + errors.avatar = '' uploadAvatarSuccess = true; success.avatar = 'Your avatar has been updated'; }) @@ -144,6 +146,7 @@
Pick a new Avatar
{errors.avatar}
+
{success.avatar}
From d9fc3b49be2850f07330d865c36764df5db2eab7 Mon Sep 17 00:00:00 2001 From: cherif Date: Tue, 17 Jan 2023 11:22:53 +0100 Subject: [PATCH 09/29] =?UTF-8?q?couleurs=20blanc=20sur=20blanc=20corrig?= =?UTF-8?q?=C3=A9es=20pour=20upload=20avatar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../svelte/api_front/src/pages/profile/ProfileSettings.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte index 426c7bb5..97f25816 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte @@ -192,6 +192,7 @@ .form-field { padding: 10px; + color: #333; } .label { From d8317350b0ed2a45ba117c60780c2c4ef5f83c37 Mon Sep 17 00:00:00 2001 From: LuckyLaszlo Date: Tue, 17 Jan 2023 12:18:42 +0100 Subject: [PATCH 10/29] fix font load for canvas --- .../svelte/api_front/public/global.css | 10 ++++++++++ .../svelte/api_front/src/pages/game/Game.svelte | 17 +++++++++-------- .../src/pages/game/GameSpectator.svelte | 16 ++++++++-------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/srcs/requirements/svelte/api_front/public/global.css b/srcs/requirements/svelte/api_front/public/global.css index 4a77fd07..25ba58a6 100644 --- a/srcs/requirements/svelte/api_front/public/global.css +++ b/srcs/requirements/svelte/api_front/public/global.css @@ -26,6 +26,16 @@ body { font-display: swap; } +@font-face { + font-family: "Bit5x3"; + src: + url("/fonts/Bit5x3.woff2") format("woff2"), + local("Bit5x3"), + url("/fonts/Bit5x3.woff") format("woff"); + font-weight: normal; + font-style: normal; + font-display: swap; +} a { color: rgb(0,100,200); diff --git a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte index ccb4242a..855ef0c4 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte @@ -390,19 +390,20 @@ {/if} {/if} +
.
+
From 44f9f8e21b2874a1802fe9eed30d1a6ad2f6463e Mon Sep 17 00:00:00 2001 From: LuckyLaszlo Date: Tue, 17 Jan 2023 14:31:20 +0100 Subject: [PATCH 12/29] Game page CSS adjustements and hidden header. --- .../svelte/api_front/src/App.svelte | 15 ++-- .../api_front/src/pages/game/Game.svelte | 47 +++++++----- .../src/pages/game/GameSpectator.svelte | 74 ++++++++++++------- .../api_front/src/pieces/store_showHeader.ts | 4 + 4 files changed, 88 insertions(+), 52 deletions(-) create mode 100644 srcs/requirements/svelte/api_front/src/pieces/store_showHeader.ts diff --git a/srcs/requirements/svelte/api_front/src/App.svelte b/srcs/requirements/svelte/api_front/src/App.svelte index 9c848f74..f69889fe 100644 --- a/srcs/requirements/svelte/api_front/src/App.svelte +++ b/srcs/requirements/svelte/api_front/src/App.svelte @@ -4,18 +4,17 @@ import { location } from 'svelte-spa-router'; import Chat from './pieces/chat/Chat.svelte'; import Header from './pieces/Header.svelte'; + import { showHeader } from './pieces/store_showHeader'; - const conditionsFailed = (event) => { - console.error('conditionsFailed event', event.detail); - // i mean i guess i can just leave this in there permanently? - - // replace('/unauthorized-access'); - replace('/'); - }; + const conditionsFailed = (event) => { + console.error('conditionsFailed event', event.detail); + // replace('/unauthorized-access'); + replace('/'); + }; -{#if ($location !== '/')} +{#if ($location !== '/' && $showHeader)}
{/if} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte index 855ef0c4..d02e162d 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte @@ -9,6 +9,7 @@ import { gameState } from "./client/ws"; import { invited_username } from '../../pieces/store_invitation'; + import { showHeader } from '../../pieces/store_showHeader'; //user's stuff let user; @@ -61,6 +62,7 @@ clearTimeout(value); }); pong.destroy(); + setHiddenGame(true); }) function resetPage() { @@ -73,6 +75,12 @@ pong.destroy(); }; + function leaveMatch() { + clearInterval(watchMatchStartInterval); + clearInterval(watchGameStateInterval); + resetPage(); + }; + const initGame = async() => { showWaitPage = true; @@ -239,20 +247,18 @@ }); } - function leaveMatch() { - clearInterval(watchMatchStartInterval); - clearInterval(watchGameStateInterval); - resetPage(); - }; - let game_page_class = ""; function setHiddenGame(value: boolean) { - if (value) { + if (value === true) { game_page_class = ""; + window.document.body.classList.remove('dim_background'); + showHeader.set(true); } else { game_page_class = "dim_background"; + window.document.body.classList.add('dim_background'); + showHeader.set(false); } hiddenGame = value; } @@ -323,7 +329,7 @@ {#if hiddenGame} {#if showGameOptions}
- +
game options @@ -370,7 +376,7 @@ {#if showInvitations}
- +
invitations @@ -408,6 +414,10 @@ background-color: #222; } +:global(body.dim_background) { + background-color: #222; +} + #game_page { margin: 0; position: relative; @@ -418,8 +428,9 @@ flex-grow: 1; } -#game_options, #game_invitations { - margin-top: 20px; +.game_options_button { + margin-top: 15px; + margin-bottom: 15px; } #canvas_container { @@ -430,11 +441,9 @@ /* overflow: hidden; */ } canvas { - /* background-color: #ff0000; */ - background-color: #333; - max-width: 75vw; font-family: "Bit5x3"; - /* max-height: 100vh; */ + background-color: #333; + max-width: 65vw; width: 80%; } @@ -460,10 +469,10 @@ canvas { padding: 10px; } .avatar { - min-height: 100px; - min-width: 100px; + min-height: 5vw; + min-width: 5vw; - max-width: 100px; - max-height: 100px; + max-width: 5vw; + max-height: 5vw; } diff --git a/srcs/requirements/svelte/api_front/src/pages/game/GameSpectator.svelte b/srcs/requirements/svelte/api_front/src/pages/game/GameSpectator.svelte index fc37f8c0..17f5245f 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/GameSpectator.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/game/GameSpectator.svelte @@ -10,6 +10,8 @@ import * as pongSpectator from "./client/pongSpectator"; import { gameState } from "./client/ws"; + import { showHeader } from '../../pieces/store_showHeader'; + let playerOneAvatar = ""; let playerTwoAvatar = ""; @@ -26,7 +28,7 @@ let timeoutArr = []; onMount( async() => { - matchList = await fetchMatchList(); + await fetchMatchList(); }) onDestroy( async() => { @@ -35,8 +37,20 @@ clearTimeout(value); }); pongSpectator.destroy(); + setHiddenGame(true); }) + async function resetPage() { + setHiddenGame(true); + pongSpectator.destroy(); + await fetchMatchList(); + }; + + function leaveMatch() { + clearInterval(watchGameStateInterval); + resetPage(); + }; + async function initGameSpectator(match: Match) { watchGameStateInterval = setInterval(watchGameState, watchGameStateIntervalRate); @@ -68,20 +82,9 @@ } } - function leaveMatch() { - clearInterval(watchGameStateInterval); - resetPage(); - }; - - async function resetPage() { - setHiddenGame(true); - pongSpectator.destroy(); - matchList = await fetchMatchList(); - }; - async function fetchMatchList() { - return fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/game/match/all`) + matchList = await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/game/match/all`) .then((response) => { if (!response.ok) { throw new Error("All matchs not retrieved"); @@ -100,11 +103,15 @@ let game_page_class = ""; function setHiddenGame(value: boolean) { - if (value) { + if (value === true) { game_page_class = ""; + window.document.body.classList.remove('dim_background'); + showHeader.set(true); } else { game_page_class = "dim_background"; + window.document.body.classList.add('dim_background'); + showHeader.set(false); } hiddenGame = value; } @@ -145,7 +152,7 @@ {#if hiddenGame} -
+
options @@ -194,14 +201,34 @@ background-color: #222; } -#game_page { +:global(body.dim_background) { + background-color: #222; +} + +/* Possible rollback, demander à Hugo */ +/* #game_page { margin: 0; padding: 20px; position: relative; width: 100%; height: 100%; box-sizing: border-box; +} */ +#game_page { + margin: 0; + position: relative; + width: 100%; + height: auto; + display: flex; + flex-direction: column; + flex-grow: 1; } + +.game_options { + margin-top: 15px; + margin-bottom: 15px; +} + #canvas_container { margin-top: 20px; text-align: center; @@ -210,14 +237,11 @@ /* overflow: hidden; */ } canvas { - /* background-color: #ff0000; */ - background-color: #333333; - max-width: 75vw; font-family: "Bit5x3"; - /* max-height: 100vh; */ + background-color: #333; + max-width: 65vw; width: 80%; } - .div_game { text-align: center; font-family: "PressStart2P"; @@ -244,10 +268,10 @@ canvas { font-size: 1vw; } .avatar { - min-height: 100px; - min-width: 100px; + min-height: 5vw; + min-width: 5vw; - max-width: 100px; - max-height: 100px; + max-width: 5vw; + max-height: 5vw; } diff --git a/srcs/requirements/svelte/api_front/src/pieces/store_showHeader.ts b/srcs/requirements/svelte/api_front/src/pieces/store_showHeader.ts new file mode 100644 index 00000000..cd33edb0 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pieces/store_showHeader.ts @@ -0,0 +1,4 @@ + +import { writable } from 'svelte/store'; + +export const showHeader = writable(true); From 1e215261aa43835b8294805d81d21b4d9daa8cfe Mon Sep 17 00:00:00 2001 From: Me Date: Tue, 17 Jan 2023 15:41:48 +0100 Subject: [PATCH 13/29] fixing ProfileUser CSS and adding delete account button, in progress --- .../src/friendship/friendship.service.ts | 18 +++++++ .../src/users/entities/user.entity.ts | 6 +-- .../api_back/src/users/users.controller.ts | 12 +++-- .../api_back/src/users/users.service.ts | 21 ++++++-- .../src/pages/profile/ProfileSettings.svelte | 19 +++++++ .../src/pages/profile/ProfileUsers.svelte | 52 +++++++++++++++++-- .../api_front/src/pieces/clickOutside.ts | 15 ++++++ 7 files changed, 128 insertions(+), 15 deletions(-) create mode 100644 srcs/requirements/svelte/api_front/src/pieces/clickOutside.ts 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 d0aba0ab..3d763f05 100644 --- a/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts +++ b/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts @@ -334,6 +334,24 @@ export class FriendshipService { return this.friendshipRepository.remove(friendship); } + async deleteAllFriendships(user : User) { + let friendships = await this.friendshipRepository + .createQueryBuilder('friendship') + .leftJoinAndSelect('friendship.sender', 'sender') + .leftJoinAndSelect('friendship.receiver', 'receiver') + .where('friendship.sender = :sender', { sender: user }) + .orWhere('friendship.receiver = :receiver', { receiver: user}) + .getMany() + + // return this.friendshipRepository.remove(friendships); + // return this.friendshipRepository.delete(friendships); + + for (const friendship of friendships) { + this.friendshipRepository.remove(friendship); + } + return true; + } + async findIfUserIsBlockedOrHasBlocked(userConnectedId: number, userToFindId: number) { // console.log("finding if user is blocked") // console.log('user connected: ' + userConnectedId) diff --git a/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts b/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts index c25401cf..b1f1934c 100644 --- a/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts +++ b/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts @@ -43,14 +43,14 @@ export class User { @Column({ nullable: true }) secretTwoFactorAuth: string; - @OneToMany(type => Friendship , (friendship) => friendship.sender) + @OneToMany(type => Friendship , (friendship) => friendship.sender, { onDelete: 'CASCADE' }) sentFriendRequest: Friendship[]; - @OneToMany(type => Friendship , (friendship) => friendship.receiver) + @OneToMany(type => Friendship , (friendship) => friendship.receiver, { onDelete: 'CASCADE' }) receivedFriendRequest: Friendship[]; @JoinColumn() - @OneToOne(() => UserStats, { cascade: true }) + @OneToOne(() => UserStats, { cascade: true, onDelete: 'CASCADE' }) stats: UserStats; // ROOMS : diff --git a/srcs/requirements/nestjs/api_back/src/users/users.controller.ts b/srcs/requirements/nestjs/api_back/src/users/users.controller.ts index 0db08095..163a0d90 100644 --- a/srcs/requirements/nestjs/api_back/src/users/users.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/users/users.controller.ts @@ -1,5 +1,5 @@ import { - Body, Controller, Delete, Get, NotFoundException,HttpStatus, Param, Patch, Post, Query, Redirect, Req, Res, UploadedFile, UseGuards, UseInterceptors + Body, Controller, Delete, Get, NotFoundException,HttpStatus, Param, Patch, Post, Query, Redirect, Req, Res, UploadedFile, UseGuards, UseInterceptors, Next, } from '@nestjs/common'; import { FileInterceptor } from '@nestjs/platform-express'; import { Response } from 'express'; @@ -73,8 +73,14 @@ export class UsersController { @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) @Delete() - remove(@Req() req) { - return this.usersService.remove(req.user.id); + remove(@Req() request, @Res() response, @Next() next) { + this.usersService.remove(request.user.id); + request.logout(function(err) { + if (err) { return next(err); } + response.redirect('/'); + }); + request.session.cookie.maxAge = 0; + return {msg : 'You have deleted your account'}; } diff --git a/srcs/requirements/nestjs/api_back/src/users/users.service.ts b/srcs/requirements/nestjs/api_back/src/users/users.service.ts index 680075da..cd3998c6 100644 --- a/srcs/requirements/nestjs/api_back/src/users/users.service.ts +++ b/srcs/requirements/nestjs/api_back/src/users/users.service.ts @@ -113,10 +113,23 @@ export class UsersService { } async remove(id: number) { - const user = await this.userRepository.findOneBy({id: id}); - if (!user) - throw new HttpException(`The user could not be deleted.`,HttpStatus.NOT_FOUND); - return this.userRepository.remove(user); + console.log("deleting a user user.services") + // const user = await this.userRepository.findOneBy({id: id}); + // if (!user) + // throw new HttpException(`The user could not be deleted.`,HttpStatus.NOT_FOUND); + + let deleting = await this.userRepository + .createQueryBuilder() + .delete() + .from(User) + .where("user.id = :id", { id: id }) + .execute(); + + // this.friendshipService.deleteAllFriendships(user) + // return this.userRepository.remove(user.id); + console.log("done delete user users.service") + // await this.userRepository.delete(user); + } async enableTwoFactorAuth(id: number) { diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte index 97f25816..ea6cd16a 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte @@ -108,6 +108,24 @@ avatar = await fetchAvatar(user.username); } + const deleteAccount = async() => { + console.log("deleting account") + await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user`, { + method: "DELETE", + }) + .then((response) => { + if (!response.ok) { + throw new Error("HTTP " + response.status); + } + console.log("account deleted") + push('/'); + }) + .catch((error) => { + console.log("catch unable to delete: ", error); + }); + } + + @@ -152,6 +170,7 @@
+
diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte index 944bfba3..554f7fee 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte @@ -6,6 +6,7 @@ import Tabs from "../../pieces/Tabs.svelte"; import { fetchUser, fetchAllUsers, fetchAvatar } from "../../pieces/utils"; + import { clickOutside } from '../../pieces/clickOutside' let user; let allUsers = []; @@ -26,6 +27,10 @@ let activeTabItem: string = "All Users"; let loadedUser; + let showModal = false; + + + onMount(async () => { user = await fetchUser(); @@ -166,8 +171,13 @@ const viewAUser = async (aUsername) => { usernameBeingViewed = aUsername; await fetchFriendshipFull(aUsername); + showModal = true; }; + const unViewAUser = () => { + showModal = false; + } + const acceptFriendRequest = async (relationshipId) => { await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/network/relations/${relationshipId}/accept`, { @@ -410,8 +420,9 @@ -
- {#if usernameBeingViewed} + {#if showModal && usernameBeingViewed} +
unViewAUser()}> + {#if loadedUser === true} @@ -453,9 +464,11 @@

Click on a user!

You'll see them displayed here

--> - {/if} + +
+ {/if}
@@ -465,8 +478,8 @@ /* ok so i want a 12 column grid with a sidebar */ div.top-grid{ - display: grid; - grid-template-columns: repeat(8, 1fr); + /* display: grid; */ + /* grid-template-columns: repeat(8, 1fr); */ /* max-height: calc(100vh - 30vh); */ height: 85vh; /* margin: 0; */ @@ -545,5 +558,34 @@ width: 60px; } + /* Modal Stuff */ + + .box { + --width: 70vw; + --height: 60vh; + position: absolute; + width: var(--width); + height: var(--height); + left: calc(50% - var(--width) / 2); + top: calc(50% - var(--height) / 2); + display: flex; + align-items: center; + padding: 8px; + border-radius: 7px; + /* background-color: #ff3e00; */ + /* color: #fff; */ + text-align: center; + font-weight: bold; + } + + .backdrop { + position: fixed; + top: 0; + bottom: 0; + right: 0; + left: 0; + background: rgba(0,0,0,0.50) + } + diff --git a/srcs/requirements/svelte/api_front/src/pieces/clickOutside.ts b/srcs/requirements/svelte/api_front/src/pieces/clickOutside.ts new file mode 100644 index 00000000..5998a482 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pieces/clickOutside.ts @@ -0,0 +1,15 @@ +export function clickOutside(node) { + const handleClick = (event) => { + if (!node.contains(event.target)) { + node.dispatchEvent(new CustomEvent("outclick")); + } + }; + + document.addEventListener("click", handleClick, true); + + return { + destroy() { + document.removeEventListener("click", handleClick, true); + } + }; +} \ No newline at end of file From c2812c05343ab3dd1672221e4a709999b727229f Mon Sep 17 00:00:00 2001 From: cherif Date: Tue, 17 Jan 2023 15:57:43 +0100 Subject: [PATCH 14/29] fucking DELETE method for account is now working and existing --- .../nestjs/api_back/src/chat/chat.service.ts | 3 ++- .../api_back/src/users/entities/user.entity.ts | 6 +++--- .../api_back/src/users/users.controller.ts | 12 +++++++++--- .../src/pages/profile/ProfileSettings.svelte | 18 ++++++++++++++++++ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts index 8313583b..dc314cc2 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -146,7 +146,8 @@ export class ChatService { const user_db = await this.getUserByName(username); printCaller("-- out "); - return user_db.currentRoom; + if (user_db) + return user_db.currentRoom; } async getRoomByName(room_name: string, fieldsToReturn: string[] = null): Promise diff --git a/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts b/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts index c25401cf..24a268be 100644 --- a/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts +++ b/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts @@ -43,14 +43,14 @@ export class User { @Column({ nullable: true }) secretTwoFactorAuth: string; - @OneToMany(type => Friendship , (friendship) => friendship.sender) + @OneToMany(type => Friendship , (friendship) => friendship.sender, {onDelete: 'CASCADE'}) sentFriendRequest: Friendship[]; - @OneToMany(type => Friendship , (friendship) => friendship.receiver) + @OneToMany(type => Friendship , (friendship) => friendship.receiver, {onDelete: 'CASCADE'}) receivedFriendRequest: Friendship[]; @JoinColumn() - @OneToOne(() => UserStats, { cascade: true }) + @OneToOne(() => UserStats, { cascade: true, onDelete: 'CASCADE' }) stats: UserStats; // ROOMS : diff --git a/srcs/requirements/nestjs/api_back/src/users/users.controller.ts b/srcs/requirements/nestjs/api_back/src/users/users.controller.ts index 0db08095..a1b91bc3 100644 --- a/srcs/requirements/nestjs/api_back/src/users/users.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/users/users.controller.ts @@ -1,5 +1,5 @@ import { - Body, Controller, Delete, Get, NotFoundException,HttpStatus, Param, Patch, Post, Query, Redirect, Req, Res, UploadedFile, UseGuards, UseInterceptors + Body, Controller, Delete, Get, NotFoundException,HttpStatus, Next, Patch, Post, Query, Redirect, Req, Res, UploadedFile, UseGuards, UseInterceptors } from '@nestjs/common'; import { FileInterceptor } from '@nestjs/platform-express'; import { Response } from 'express'; @@ -73,8 +73,14 @@ export class UsersController { @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) @Delete() - remove(@Req() req) { - return this.usersService.remove(req.user.id); + remove(@Req() req, @Res() response, @Next() next) { + this.usersService.remove(req.user.id); + req.logout(function(err) { + if (err) { return next(err); } + response.redirect('/'); + }); + req.session.cookie.maxAge = 0; + return {msg : 'Your account has been deleted'}; } diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte index 97f25816..eb7e226e 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte @@ -108,6 +108,23 @@ avatar = await fetchAvatar(user.username); } + const deleteAccount = async() => { + console.log("deleting account") + await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user`, { + method: "DELETE", + }) + .then((response) => { + if (!response.ok) { + throw new Error("HTTP " + response.status); + } + console.log("account deleted") + push('/'); + }) + .catch((error) => { + console.log("catch unable to delete: ", error); + }); + } + @@ -152,6 +169,7 @@
+ From f3ed25a4e951f77eab4ae1a304260874b32b66b3 Mon Sep 17 00:00:00 2001 From: cherif Date: Tue, 17 Jan 2023 16:19:12 +0100 Subject: [PATCH 15/29] correction d'un bug pour les friendship --- .../api_back/src/friendship/entities/friendship.entity.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srcs/requirements/nestjs/api_back/src/friendship/entities/friendship.entity.ts b/srcs/requirements/nestjs/api_back/src/friendship/entities/friendship.entity.ts index 4d25f813..722de918 100644 --- a/srcs/requirements/nestjs/api_back/src/friendship/entities/friendship.entity.ts +++ b/srcs/requirements/nestjs/api_back/src/friendship/entities/friendship.entity.ts @@ -17,10 +17,10 @@ export class Friendship { @CreateDateColumn() date : Date; - @ManyToOne(type => User, user => user.username) + @ManyToOne(type => User, user => user.username, {onDelete: 'CASCADE'}) sender: User; - @ManyToOne(type => User, user => user.username) + @ManyToOne(type => User, user => user.username, {onDelete: 'CASCADE'}) receiver: User; @Column({ type: 'enum', enum: FriendshipStatus, default: FriendshipStatus.REQUESTED}) From 053c630a959e2d5bb74245e552eb22dec0209be4 Mon Sep 17 00:00:00 2001 From: Me Date: Tue, 17 Jan 2023 16:35:17 +0100 Subject: [PATCH 16/29] back to working on ProfileUser CSS --- .../src/friendship/friendship.service.ts | 18 -------------- .../api_back/src/users/users.service.ts | 21 ++++------------ .../src/pages/profile/ProfileUsers.svelte | 24 +++++++++++++------ 3 files changed, 21 insertions(+), 42 deletions(-) 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 3d763f05..d0aba0ab 100644 --- a/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts +++ b/srcs/requirements/nestjs/api_back/src/friendship/friendship.service.ts @@ -334,24 +334,6 @@ export class FriendshipService { return this.friendshipRepository.remove(friendship); } - async deleteAllFriendships(user : User) { - let friendships = await this.friendshipRepository - .createQueryBuilder('friendship') - .leftJoinAndSelect('friendship.sender', 'sender') - .leftJoinAndSelect('friendship.receiver', 'receiver') - .where('friendship.sender = :sender', { sender: user }) - .orWhere('friendship.receiver = :receiver', { receiver: user}) - .getMany() - - // return this.friendshipRepository.remove(friendships); - // return this.friendshipRepository.delete(friendships); - - for (const friendship of friendships) { - this.friendshipRepository.remove(friendship); - } - return true; - } - async findIfUserIsBlockedOrHasBlocked(userConnectedId: number, userToFindId: number) { // console.log("finding if user is blocked") // console.log('user connected: ' + userConnectedId) diff --git a/srcs/requirements/nestjs/api_back/src/users/users.service.ts b/srcs/requirements/nestjs/api_back/src/users/users.service.ts index cd3998c6..680075da 100644 --- a/srcs/requirements/nestjs/api_back/src/users/users.service.ts +++ b/srcs/requirements/nestjs/api_back/src/users/users.service.ts @@ -113,23 +113,10 @@ export class UsersService { } async remove(id: number) { - console.log("deleting a user user.services") - // const user = await this.userRepository.findOneBy({id: id}); - // if (!user) - // throw new HttpException(`The user could not be deleted.`,HttpStatus.NOT_FOUND); - - let deleting = await this.userRepository - .createQueryBuilder() - .delete() - .from(User) - .where("user.id = :id", { id: id }) - .execute(); - - // this.friendshipService.deleteAllFriendships(user) - // return this.userRepository.remove(user.id); - console.log("done delete user users.service") - // await this.userRepository.delete(user); - + const user = await this.userRepository.findOneBy({id: id}); + if (!user) + throw new HttpException(`The user could not be deleted.`,HttpStatus.NOT_FOUND); + return this.userRepository.remove(user); } async enableTwoFactorAuth(id: number) { diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte index 554f7fee..805e77d6 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileUsers.svelte @@ -330,7 +330,7 @@