summaryrefslogtreecommitdiff
path: root/server/controllers/chat_room.controller.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/controllers/chat_room.controller.ts')
-rw-r--r--server/controllers/chat_room.controller.ts35
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);