diff options
author | Logan Hunt <loganhunt@simponic.xyz> | 2022-04-01 14:16:35 -0600 |
---|---|---|
committer | Logan Hunt <loganhunt@simponic.xyz> | 2022-04-01 14:16:35 -0600 |
commit | 1108970a6aeb98a2f113383c6437dd4d862dae10 (patch) | |
tree | 30c5d3f60746d92fe37a3a8dd8f0c4c4cc5e052d /server/controllers/chat_room.controller.ts | |
parent | f62854ebaa689c4bf434f213f1f610a1779f8696 (diff) | |
download | locchat-1108970a6aeb98a2f113383c6437dd4d862dae10.tar.gz locchat-1108970a6aeb98a2f113383c6437dd4d862dae10.zip |
Updates
Diffstat (limited to 'server/controllers/chat_room.controller.ts')
-rw-r--r-- | server/controllers/chat_room.controller.ts | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/server/controllers/chat_room.controller.ts b/server/controllers/chat_room.controller.ts index 668a686..3917e54 100644 --- a/server/controllers/chat_room.controller.ts +++ b/server/controllers/chat_room.controller.ts @@ -23,18 +23,35 @@ export class ChatRoomController { @Get('/chat_rooms') async get(@JwtBody() jwtBody: JwtBodyDto, @Query() query: any) { - return await this.chatRoomService.nearOrUserOwns({ ...query, userId: jwtBody.userId }); + const user = await this.usersService.find(jwtBody.userId); + const rooms = await this.chatRoomService.nearOrUserOwns({ ...query, userId: jwtBody.userId }); + return rooms.map((cr) => { + const editable = cr.userId === user.id; + const joinable = editable || haversine({ lat: cr.latitude, lng: cr.longitude }, query) <= cr.radius; + return joinable + ? { ...cr, editable, joinable } + : { + name: cr.name, + latitude: cr.latitude, + longitude: cr.longitude, + radius: cr.radius, + editable, + joinable, + }; + }); } @Get('/chat_rooms/:id') - async getId(@Param('id') id: number) { + async getId(@Param('id') id: string) { return await this.chatRoomService.findById(id); } @Get('/chat_rooms/:id/joinable') - async joinable(@JwtBody() jwtBody, @Param('id') id: number, @Query() query: any) { + async joinable(@JwtBody() jwtBody: JwtBodyDto, @Param('id') id: string, @Query() query: any) { return !!(await this.chatRoomService.nearOrUserOwns({ ...query, userId: jwtBody.userId })).find( - (cr) => cr.id == id && haversine({ lat: cr.latitude, lng: cr.longitude }, query) < cr.radius, + (cr) => + cr.id == id && + (haversine({ lat: cr.latitude, lng: cr.longitude }, query) <= cr.radius || cr.userId === jwtBody.userId), ); } @@ -44,7 +61,7 @@ export class ChatRoomController { return await this.chatRoomService.create(chatRoom); } - private async authorized(jwtBody: JwtBodyDto, chatRoom: any) { + private async userCanEdit(jwtBody: JwtBodyDto, chatRoom: any) { const user = await this.usersService.find(jwtBody.userId); if (user.id !== chatRoom.user.id) { return { @@ -55,10 +72,10 @@ export class ChatRoomController { } @Put('/chat_rooms/:id') - async update(@JwtBody() jwtBody: JwtBodyDto, @Param('id') id: number, @Body() chatRoom: any) { + async update(@JwtBody() jwtBody: JwtBodyDto, @Param('id') id: string, @Body() chatRoom: any) { console.log(id); const chat_room = await this.chatRoomService.findById(id, ['user']); - if (!(await this.authorized(jwtBody, chat_room))) { + if (!(await this.userCanEdit(jwtBody, chat_room))) { return chat_room; } chat_room.latitude = chatRoom.latitude; @@ -68,9 +85,9 @@ export class ChatRoomController { } @Delete('/chat_rooms/:id') - async delete(@JwtBody() jwtBody: JwtBodyDto, @Param('id') id: number) { + async delete(@JwtBody() jwtBody: JwtBodyDto, @Param('id') id: string) { const chat_room = await this.chatRoomService.findById(id, ['user']); - if (!(await this.authorized(jwtBody, chat_room))) { + if (!(await this.userCanEdit(jwtBody, chat_room))) { return false; } return await this.chatRoomService.remove(chat_room); |