From d07b13b749349f884001fede981bf7c029f8efae Mon Sep 17 00:00:00 2001 From: simplonco Date: Sat, 14 Jan 2023 14:23:02 +0100 Subject: [PATCH] exported function fetch with catch --- .../api_back/src/chat/chat.controller.ts | 7 -- .../src/pieces/chat/Layout_create.svelte | 2 +- .../src/pieces/chat/Layout_protected.svelte | 2 +- .../src/pieces/chat/Request_rooms.ts | 115 ++++-------------- .../src/pieces/chat/Request_utils.ts | 30 ++++- .../chat/{Interface_chat.ts => Types_chat.ts} | 17 ++- 6 files changed, 70 insertions(+), 103 deletions(-) rename srcs/requirements/svelte/api_front/src/pieces/chat/{Interface_chat.ts => Types_chat.ts} (61%) 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 975276ff..39740dc3 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -229,13 +229,6 @@ export class ChatController { await this.chatService.setPasswordValidation(req.user.username, room); } - await this.chatService.setCurrentRoom(req.user.username, room.name); - let socket: socketDto = this.chatGateway.sockets.get(req.user.username); - await this.chatService.socketChangeRoom(socket, room.name); - - const ret_room = this.format_room(room); - res.status(HttpStatus.OK).json({ room: ret_room }); - console.log("- out setPassword controller"); } diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_create.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_create.svelte index b6f59530..e889aab2 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_create.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_create.svelte @@ -3,7 +3,7 @@ import { msgs, layout, allowed_chars } from './Store_chat'; import { change_room, create_room } from './Request_rooms'; import { onMount } from 'svelte'; - import type { FetchResponse } from './Interface_chat'; + import type { FetchResponse } from './Types_chat'; import Button from './Element_button.svelte'; import Warning from './Element_warning.svelte'; diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_protected.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_protected.svelte index 284464e5..9c336b5b 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_protected.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_protected.svelte @@ -2,7 +2,7 @@ import { layout, current_room_name, current_room_type } from './Store_chat'; import { change_room, send_password } from './Request_rooms'; - import type { FetchResponse } from './Interface_chat'; + import type { FetchResponse } from './Types_chat'; import Button from './Element_button.svelte'; import Warning from './Element_warning.svelte'; 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 02ffaafc..8a9eb5cc 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,13 +1,14 @@ import { msgs, user, layout, socket, current_room_name, current_room_type } from './Store_chat'; -import type { Room, FetchResponse } from './Interface_chat'; -import { set_client_name_on_room, fill_fetch_response } from './Request_utils'; +import type { Room, FetchMethod, FetchResponse } from './Types_chat'; +import { fetch_request, set_client_name_on_room, fill_fetch_response } from './Request_utils'; export async function get_room_messages() { console.log("in get_room_messages"); - const response = await fetch('/api/v2/chat/messages'); - const data = await response.json(); - const messages = data.messages; + + let response: FetchResponse = await fetch_request('messages', FetchMethod.GET); + + const messages = response.messages; if (messages === null) return; @@ -25,29 +26,7 @@ export async function create_room(room: Room) { console.log("in create_room"); - let response: FetchResponse = { status: 0 }; - - // send the new room - try { - const resp = await fetch('/api/v2/chat/create', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(room), - }); - console.log("resp.status:"); - console.log(resp.status); - response.status = resp.status; - if (!resp.ok) - throw new Error(resp.statusText); - - // get response message - let data = await resp.json(); - fill_fetch_response(response, data); - } - catch (error) - { - console.error('Error', error); - } + let response: FetchResponse = await fetch_request('create', FetchMethod.POST, room); return response; } @@ -56,26 +35,16 @@ export async function join_room(room: Room) { console.log("in join_room"); - const response = await fetch('/api/v2/chat/join', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(room), - }); - let data = await response.json(); + let response: FetchResponse = await fetch_request('join', FetchMethod.POST, room); - return data.room; + return response.room; } export async function change_room(room: Room) { console.log("in change_room"); - const response = await fetch('/api/v2/chat/change', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(room), - }); - let data = await response.json(); + await fetch_request('change', FetchMethod.POST, room); await get_room_messages(); @@ -86,33 +55,12 @@ export async function change_room(room: Room) layout.set("room"); } + export async function send_password(room: Room) { - console.log("in create_room"); + console.log("in send_password"); - let response: FetchResponse = { status: 0 }; - - // send the new room - try { - const resp = await fetch('/api/v2/chat/create', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(room), - }); - console.log("resp.status:"); - console.log(resp.status); - response.status = resp.status; - if (!resp.ok) - throw new Error(resp.statusText); - - // get response message - let data = await resp.json(); - fill_fetch_response(response, data); - } - catch (error) - { - console.error('Error', error); - } + let response: FetchResponse = await fetch_request('password', FetchMethod.POST, room); return response; } @@ -121,12 +69,7 @@ export async function invite_user(user_name: string) { console.log("in invite_user"); - const response = await fetch('/api/v2/chat/invite', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({username: user_name}), - }); - let data = await response.json(); + let response: FetchResponse = await fetch_request('invite', FetchMethod.POST, {username: user_name}); await get_room_messages(); } @@ -135,13 +78,9 @@ export async function get_my_rooms() { console.log("in get_my_rooms"); - const response = await fetch('/api/v2/chat/myrooms'); - console.log("response.status", response.status); - const data = await response.json(); - console.log("data:", data); + let response: FetchResponse = await fetch_request('myrooms', FetchMethod.GET); - let rooms = data.rooms.map(room => set_client_name_on_room(room)); - console.log("rooms:", rooms); + let rooms = response.rooms.map(room => set_client_name_on_room(room)); return rooms; } @@ -150,41 +89,33 @@ export async function get_all_rooms() { console.log("in get_all_rooms"); - const response = await fetch('/api/v2/chat/allrooms'); - const data = await response.json(); + let response: FetchResponse = await fetch_chat_request('allrooms', FetchMethod.GET); - return data.rooms; + return response.rooms; } export async function get_room_users() { console.log("in get_room_users"); - const response = await fetch('/api/v2/chat/roomusers'); - const data = await response.json(); - console.log("users:", data.users); + let response: FetchResponse = await fetch_chat_request('roomusers', FetchMethod.GET); - return data.users; + return response.users; } export async function get_all_users() { console.log("in get_all_users"); - const response = await fetch('/api/v2/chat/users'); - const data = await response.json(); - console.log("users:", data.users); + let response: FetchResponse = await fetch_chat_request('users', FetchMethod.GET); - return data.users; + return response.users; } export async function leave_room() { console.log("in leave_room"); - const response = await fetch('/api/v2/chat/leave', { - method: 'DELETE', - }); + let response: FetchResponse = await fetch_chat_request('leave', FetchMethod.DELETE); } - diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Request_utils.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Request_utils.ts index d0378af5..729aa799 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Request_utils.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Request_utils.ts @@ -1,5 +1,33 @@ import { user } from './Store_chat'; -import type { Room, FetchResponse } from './Interface_chat'; +import type { Room, FetchResponse, FetchInit, FetchMethod } from './Types_chat'; + +export async function fetch_request(route: string, fetchMethod: FetchMethod, param?: any) +{ + let response: FetchResponse = { status: 0 }; + + let fetch_params: FetchInit = { + method: fetchMethod, + headers: { 'Content-Type': 'application/json' }, + } + if (param) + fetch_params.body = JSON.stringify(param); + + try { + const resp = await fetch(`/api/v2/chat/${route}`, fetch_params); + response.status = resp.status; + if (!resp.ok) + throw new Error(resp.statusText); + + let data = await resp.json(); + fill_fetch_response(response, data); + } + catch (error) + { + console.error('Error', error); + } + + return response; +} export function set_client_name_on_room(room: Room) { diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Interface_chat.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts similarity index 61% rename from srcs/requirements/svelte/api_front/src/pieces/chat/Interface_chat.ts rename to srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts index e634f732..f1a332cc 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Interface_chat.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts @@ -13,5 +13,20 @@ export interface FetchResponse code?: string; display?: boolean; message?: string; - room?: any; + room?: Room; } + +export interface FetchInit +{ + method: string; + headers: any; + body?: string; +} + +export enum FetchMethod +{ + POST = 'POST', + GET = 'GET', + LEAVE = 'LEAVE', +} +