From 1108970a6aeb98a2f113383c6437dd4d862dae10 Mon Sep 17 00:00:00 2001 From: Logan Hunt Date: Fri, 1 Apr 2022 14:16:35 -0600 Subject: Updates --- server/controllers/chat_room.controller.ts | 35 ++++++++++++++++------ .../migrations/1648605030863-AddChatRoom.ts | 11 +++++-- server/entities/chat_room.entity.ts | 2 +- server/providers/services/chat_room.service.ts | 2 +- 4 files changed, 37 insertions(+), 13 deletions(-) (limited to 'server') 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); diff --git a/server/database/migrations/1648605030863-AddChatRoom.ts b/server/database/migrations/1648605030863-AddChatRoom.ts index 4a6c156..747cdd3 100644 --- a/server/database/migrations/1648605030863-AddChatRoom.ts +++ b/server/database/migrations/1648605030863-AddChatRoom.ts @@ -1,16 +1,22 @@ import { MigrationInterface, QueryRunner, Table, TableForeignKey } from 'typeorm'; +import { uniqueId } from 'lodash'; export class AddChatRoom1648605030863 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { + // uuid from https://github.com/typeorm/typeorm/issues/3770 + await queryRunner.query(`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`); + await queryRunner.createTable( new Table({ name: 'chat_room', columns: [ { name: 'id', - type: 'int', + type: 'text', isPrimary: true, - isGenerated: true, + isUnique: true, + generationStrategy: 'uuid', + default: 'uuid_generate_v4()', }, { name: 'userId', @@ -39,6 +45,7 @@ export class AddChatRoom1648605030863 implements MigrationInterface { }, ], }), + true, ); await queryRunner.createForeignKey( diff --git a/server/entities/chat_room.entity.ts b/server/entities/chat_room.entity.ts index 29619be..2981589 100644 --- a/server/entities/chat_room.entity.ts +++ b/server/entities/chat_room.entity.ts @@ -4,7 +4,7 @@ import { User } from './user.entity'; @Entity() export class ChatRoom { @PrimaryGeneratedColumn() - id: number; + id: string; @Column() latitude: number; diff --git a/server/providers/services/chat_room.service.ts b/server/providers/services/chat_room.service.ts index ed75ba4..6d804e6 100644 --- a/server/providers/services/chat_room.service.ts +++ b/server/providers/services/chat_room.service.ts @@ -25,7 +25,7 @@ export class ChatRoomService { ); } - findById(id: number, relations: string[] = []) { + findById(id: string, relations: string[] = []) { return this.chatRoomRepository.findOne(id, { relations }); } -- cgit v1.2.3-70-g09d2