From 23d45db6ae7bfa6cbf3368cefef1b54a61c475c5 Mon Sep 17 00:00:00 2001 From: simplonco Date: Mon, 16 Jan 2023 06:51:14 +0100 Subject: [PATCH] mute almost done, still changing layout --- .../api_back/src/chat/chat.controller.ts | 44 +- .../nestjs/api_back/src/chat/chat.service.ts | 10 +- .../nestjs/api_back/src/chat/dto/mute.dto.ts | 2 +- .../src/pieces/chat/Layout_mute.svelte | 390 +++++++++--------- .../src/pieces/chat/Request_rooms.ts | 25 +- .../api_front/src/pieces/chat/Types_chat.ts | 7 + 6 files changed, 279 insertions(+), 199 deletions(-) diff --git a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts index 4197386a..07849ddf 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -462,8 +462,6 @@ export class ChatController { { printCaller("- in "); - console.log("mute:", mute); - const room_name = await this.chatService.getCurrentRoomName(req.user.username); await this.chatService.addMute(req.user.username, room_name, mute); @@ -476,11 +474,51 @@ export class ChatController { //await server.to(socket.id).emit('muted'); const room = await this.chatService.getRoomByName(room_name); - console.log("room:", room); res.status(HttpStatus.OK).json({ message: message }); printCaller("- out "); } + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + @Post('ismute') + async isuserMute(@Body('username') username: string, @Req() req, @Res() res): Promise + { + printCaller("- in "); + + const room_name = await this.chatService.getCurrentRoomName(req.user.username); + const current_room = await this.chatService.getRoomByName(room_name); + let mute = current_room.mutes.find(mute => mute.name === username); + console.log("mute:", mute); + console.log("username:", username); + + res.status(HttpStatus.OK).json({ mute: mute }); + printCaller("- out "); + } + + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + @Post('unmute') + async unMute(@Body('username') username: string, @Req() req, @Res() res): Promise + { + printCaller("- in "); + + const room_name = await this.chatService.getCurrentRoomName(req.user.username); + + const fields = ["admins"]; + const room_db = await this.chatService.getRoomByName(room_name, fields); + const is_admin = room_db.admins.includes(req.user.username); + if (!is_admin) + { + console.log("throw error: error: true, code: 'UNMUTE_NEED_ADMIN', message: 'you cannot unmute a user if you are not admin in the room'"); + throw new HttpException({ error: true, code: 'UNMUTE_NEED_ADMIN', message: `you cannot unmute a user if you are not admin in the room` }, HttpStatus.UNAUTHORIZED); + } + + await this.chatService.removeMute(username, room_name); + + res.status(HttpStatus.OK).json({ message: "successfull unmute" }); + printCaller("- out "); + } + } 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 9e95b339..ae1f7c0d 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -519,9 +519,13 @@ export class ChatService { let current_mute = current_room.mutes.find(mute => mute.name === socket.username); if (current_mute) { - const date_now = new Date(); - const date_mute = new Date(current_mute.date); - const date_diff = date_mute.getTime() - date_now.getTime(); + let date_diff = 1; + if (current_mute.date) + { + const date_now = new Date(); + const date_mute = new Date(current_mute.date); + date_diff = date_mute.getTime() - date_now.getTime(); + } if (date_diff > 0) { socket.emit('message', "SERVER", "your message was not sent because you are muted"); diff --git a/srcs/requirements/nestjs/api_back/src/chat/dto/mute.dto.ts b/srcs/requirements/nestjs/api_back/src/chat/dto/mute.dto.ts index aebf16c6..49b6d088 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/dto/mute.dto.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/dto/mute.dto.ts @@ -1,4 +1,4 @@ -import { IsNotEmpty, IsString, IsDate } from "class-validator"; +import { IsNotEmpty, IsString, IsDate, IsOptional } from "class-validator"; export class muteDto { diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_mute.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_mute.svelte index de8a914f..7123281d 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_mute.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_mute.svelte @@ -1,7 +1,7 @@ @@ -94,157 +101,164 @@ {#if show_error} {/if} -

mute this user for a time :

-
- - - -
- - - - - - -
- -
+ {#if is_mute === true } +

this user is mute untill {date_string}

+ + {:else} +
+

mute this user for a time :

+ + + +
+ + + + + + +
+ +
+ {/if} diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Request_rooms.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Request_rooms.ts index bc9e8b69..b94101c6 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Request_rooms.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Request_rooms.ts @@ -1,6 +1,6 @@ import { msgs, user, layout, socket, current_room } from './Store_chat'; import type { Room, FetchResponse } from './Types_chat'; -import { FetchMethod } from './Types_chat'; +import { FetchMethod, Mute } from './Types_chat'; import { to_print } from './Utils_chat'; import { fetch_chat_request, set_client_name_on_room, fill_fetch_response } from './Request_utils'; @@ -122,7 +122,7 @@ export async function invite_user(user_name: string) export async function get_my_rooms() { - to_print("-------------------------------------------------------------------------------------------------------in get_my_rooms"); + to_print("in get_my_rooms"); let response: FetchResponse = await fetch_chat_request('myrooms', FetchMethod.GET); @@ -186,9 +186,9 @@ to_print("is_admin return:", response.is_admin); return response.is_admin; } -export async function setMute(date_limit: Date, username: string, time: string): Promise +export async function set_mute(date_limit: Date, username: string, time: string): Promise { - to_print("in is_admin"); + to_print("in set_mute"); let body = { @@ -207,3 +207,20 @@ to_print("setmute return:", response); return response; } +export async function get_is_mute(username: string): Promise +{ + to_print("in get_is_mute"); + + let response: FetchResponse = await fetch_chat_request('ismute', FetchMethod.POST, {username: username} ); +to_print("ismute return:", response); + + return response.mute; +} + +export async function get_unmute(username: string): Promise +{ + to_print("in get_unmute"); + + await fetch_chat_request('unmute', FetchMethod.POST, {username: username} ); +} + diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts index 02a455d8..174a5516 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts @@ -8,6 +8,12 @@ export interface Room allowed?: boolean; } +export interface Mute +{ + name: string; + date: Date; +} + export interface Message { name: string; @@ -31,6 +37,7 @@ export interface FetchResponse room?: Room; rooms?: Room[]; is_admin?: boolean; + mute?: Mute; } export interface FetchInit