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 2b350667..d6811642 100644 --- a/srcs/requirements/nestjs/api_back/src/users/users.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/users/users.controller.ts @@ -84,6 +84,7 @@ export class UsersController { @UseGuards(TwoFactorGuard) @Patch() async update(@Req() req, @Body(new ValidationPipe()) usersUpdateDto: UpdateUsersDto, @Res() response : Response) { + console.log('user.controller updating user info') const user = await this.usersService.update(req.user.id, usersUpdateDto); if (user.isEnabledTwoFactorAuth === false && user.isTwoFactorAuthenticated === true) this.usersService.setIsTwoFactorAuthenticatedWhenLogout(user.id); @@ -103,6 +104,7 @@ export class UsersController { return this.usersService.remove(req.user.id); } + // POST http://transcendance:8080/user/avatar @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) @@ -118,15 +120,24 @@ export class UsersController { return res.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE).json({message : "Unsupported media type. Please use a valid image file."}); } - // GET http://transcendance:8080/user/avatar + + // GET http://transcendance:8080/user/avatar?username=username @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) @Get('avatar') - getAvatar(@Req() request, @Res() response) { - const promise = this.usersService.getAvatarUrl(request.user.id).then((url) => + async getAvatar(@Query('username') username: string, @Req() request, @Res() response) { + let usernameToFind; + if (username !== undefined) { + usernameToFind = username; + } else { + usernameToFind = request.user.username; + } + const promise = this.usersService.getAvatarUrl(usernameToFind).then((url) => { - if (url) + if (url) { + console.log('what is the URL: ' + url) return of(response.sendFile(process.cwd() + '/uploads/avatars/' + url)); + } else throw new NotFoundException('Avatar not found'); }); 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 0251f2e0..fbb6156a 100644 --- a/srcs/requirements/nestjs/api_back/src/users/users.service.ts +++ b/srcs/requirements/nestjs/api_back/src/users/users.service.ts @@ -68,13 +68,13 @@ export class UsersService { let partialUsers : Partial[] = []; for (const otherUser of otherUsers) { - console.log('other user: ') - console.log({...otherUser}) - let tmp = await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id); - console.log('user.services findIF Blocked... : ') - console.log(tmp) - if (tmp === false) { - // if (await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id) === false) { + // console.log('other user: ') + // console.log({...otherUser}) + // let tmp = await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id); + // console.log('user.services findIF Blocked... : ') + // console.log(tmp) + // if (tmp === false) { + if (await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id) === false) { partialUsers.push({username: otherUser.username, image_url: otherUser.image_url, status: otherUser.status, stats: otherUser.stats}); } } @@ -83,30 +83,6 @@ export class UsersService { return partialUsers; } - // async findAbsolutelyAll() { - // // const otherUsers = await this.userRepository.find({where: {id: Not(+currentUser.id)}, order: {username: "ASC"}, skip: offset, take: limit,}); - // const otherUsers = await this.userRepository.find({order: {username: "ASC"}}); - - // let partialUsers : Partial[] = []; - - // for (const otherUser of otherUsers) { - // console.log('other user: ') - // console.log({...otherUser}) - // let tmp = await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id); - // console.log('user.services findIF Blocked... : ') - // console.log(tmp) - // if (tmp === false) { - // // if (await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id) === false) { - // partialUsers.push({username: otherUser.username, image_url: otherUser.image_url, status: otherUser.status, stats: otherUser.stats}); - // } - // } - // console.log('user.services findAll, partialUsers:') - // console.log({...partialUsers}) - // return partialUsers; - // } - - - async create(createUserDto: CreateUsersDto) { if (await this.userRepository.findOneBy({fortyTwoId: createUserDto.fortyTwoId})) throw new HttpException(`The user already exists.`,HttpStatus.CONFLICT); @@ -158,13 +134,16 @@ export class UsersService { return this.userRepository.update(id, {image_url: avatar}); } - async getAvatarUrl(id: number) { - const user = await this.userRepository.findOneBy({id: id}); + // doing search with username not id because userService.findOne doesn't return an Id anymore, just username... fuck this architecture is big trash... + // async getAvatarUrl(id: number) { + async getAvatarUrl(username: string) { + const user = await this.userRepository.findOneBy({username: username}); if (!user) throw new HttpException(`The user could not be found.`,HttpStatus.NOT_FOUND); + // console.log('user.service getAvatarUrl of ' + user.username) if (!user.image_url) throw new HttpException(`The user has no avatar.`,HttpStatus.NOT_FOUND); - console.log(user.image_url); + // console.log('User.service Avatar URL ' + user.image_url); return user.image_url; } diff --git a/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte b/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte index 75e1f1f6..65a9da14 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte @@ -39,7 +39,7 @@ {#if user !== undefined} - + {:else}

Sorry

diff --git a/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte b/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte index b0804a96..b235f64a 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte @@ -4,20 +4,39 @@ export let user; - export let primary; + export let primary; // kinda useless, not sure what i was going for... Might be userful after all let rank = ''; let avatar; - + // avatar needs to be updated!!! + console.log('Generate User Display, BEFORE on mount ' + avatar) onMount( async() => { + console.log('Generate User Display, on mount ' + user.username) // using this for now cuz for some reason there is yet to be a way to fet another person's avatar if (primary) { + // await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar?username=${user.username}`, {method: "GET"}) + // .then(response => {return response.blob()}) + // .then(data => { + // const url = URL.createObjectURL(data); + // avatar = url; + // }); await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar`, {method: "GET"}) .then(response => {return response.blob()}) .then(data => { const url = URL.createObjectURL(data); avatar = url; - }); + }) + .catch(() => errors.avatar = 'Sorry your avatar could not be loaded' ); + console.log('avatar: ') + console.log(avatar) + } else { + await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar?username=${user.username}`, {method: "GET"}) + .then(response => {return response.blob()}) + .then(data => { + const url = URL.createObjectURL(data); + avatar = url; + }) + .catch(() => errors.avatar = 'Sorry your avatar could not be loaded' ); } }) diff --git a/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js b/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js index ab3d29e6..1360f1a4 100644 --- a/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js +++ b/srcs/requirements/svelte/api_front/src/routes/primaryRoutes.js @@ -13,9 +13,57 @@ import GameSpectator from '../pages/game/GameSpectator.svelte'; export const primaryRoutes = { '/': SplashPage, '/2fa': TwoFactorAuthentication, - '/game': Game, - '/spectator': GameSpectator, - '/ranking' : Ranking, + '/game': wrap({ + component: Game, + conditions: [ + async(detail) => { + const user = await fetch('http://' + process.env.WEBSITE_HOST + ":" + process.env.WEBSITE_PORT + '/api/v2/user') + .then((resp) => resp.json()) + + console.log('in /profile what is in user') + console.log(user) + + if (user && user.username) + return true; + else + return false; + } + ] + }), + '/spectator': wrap({ + component: GameSpectator, + conditions: [ + async(detail) => { + const user = await fetch('http://' + process.env.WEBSITE_HOST + ":" + process.env.WEBSITE_PORT + '/api/v2/user') + .then((resp) => resp.json()) + + console.log('in /profile what is in user') + console.log(user) + + if (user && user.username) + return true; + else + return false; + } + ] + }), + '/ranking': wrap({ + component: Ranking, + conditions: [ + async(detail) => { + const user = await fetch('http://' + process.env.WEBSITE_HOST + ":" + process.env.WEBSITE_PORT + '/api/v2/user') + .then((resp) => resp.json()) + + console.log('in /profile what is in user') + console.log(user) + + if (user && user.username) + return true; + else + return false; + } + ] + }), '/profile': wrap({ component: ProfilePage, conditions: [ @@ -50,7 +98,6 @@ export const primaryRoutes = { } ] }), - '/unauthorized-access': UnauthorizedAccessPage, '*': NotFound };