diff --git a/server/controllers/UserCtl.ts b/server/controllers/UserCtl.ts index d2da39d..427f348 100644 --- a/server/controllers/UserCtl.ts +++ b/server/controllers/UserCtl.ts @@ -1,6 +1,7 @@ import { IUser } from '../schemas'; import { User } from "../models/user"; import ControllerResponse from '../util/ControllerResponse'; +import { StatusCode } from '../util/types'; const UserInstance = new User(); export default class UserCtl { @@ -10,8 +11,8 @@ export default class UserCtl { async getAll() { try { const users = await UserInstance.getAllUsers(); - const ok = users.length > 0; - const code = ok ? 200 : 404; + const ok: boolean = users !== null; + const code: StatusCode = ok ? StatusCode.OK : StatusCode.NotFound; const data = ok ? users : "No users found."; return new ControllerResponse(ok, code, data) } catch (error: any) { @@ -23,7 +24,7 @@ export default class UserCtl { try { const response = await UserInstance.post(body); const ok: boolean = response !== null; - const code = ok ? 201 : 400 + const code = ok ? StatusCode.NewContent : StatusCode.BadRequest const data = ok ? response : "Bad request" return new ControllerResponse(ok, code, data); } catch (error: any) { @@ -35,7 +36,7 @@ export default class UserCtl { try { const user = await UserInstance.getOneByID(id); const ok: boolean = user !== null; - const code = ok ? 200 : 404; + const code = ok ? StatusCode.OK : StatusCode.NotFound; const data = ok ? user : "User by this ID not found"; return new ControllerResponse(ok, code, data); } catch (error: any) { @@ -47,7 +48,7 @@ export default class UserCtl { try { const result = await UserInstance.updateOneByID(id, body); const ok = result !== null; - const code = ok ? 200 : 400; + const code = ok ? StatusCode.OK : StatusCode.BadRequest; const data = ok ? result : "Update unsuccessful" return new ControllerResponse(ok, code, data); } catch (error: any) { @@ -59,7 +60,7 @@ export default class UserCtl { try { const result = await UserInstance.getFriends(id); const ok = result !== null - const code = ok ? 200 : 404; + const code = ok ? StatusCode.OK : StatusCode.NotFound; const data = ok ? result : "No friends found" return new ControllerResponse(ok, code, data); } catch (e: any) { @@ -89,7 +90,7 @@ export default class UserCtl { try { const result = await UserInstance.addFriendship(userid, targetid); const ok = result !== null; - const code = ok ? 201 : 400; + const code = ok ? StatusCode.NewContent : StatusCode.BadRequest; const data = ok ? result : "Something went wrong" return new ControllerResponse(ok, code, data); } catch (e: any) { diff --git a/server/models/user.ts b/server/models/user.ts index f2d6795..d536436 100644 --- a/server/models/user.ts +++ b/server/models/user.ts @@ -3,6 +3,7 @@ import fs from "fs"; import pool from '../db'; import now from "../util/now"; import { appRoot } from "../appRoot"; +import { StatusCode } from "../util/types"; export class User { async getAllUsers() { @@ -11,7 +12,7 @@ export class User { const statement = `SELECT * FROM recipin.appusers`; const result = await pool.query(statement); if (result.rows.length) return result.rows; - return []; + return null; } catch (error: any) { throw new Error(error); } @@ -115,13 +116,13 @@ export class User { if (row.senderid == userid || row.targetid == userid) { const sql = fs.readFileSync(appRoot + '/db/sql/get/friendshipbyid.sql').toString(); const formattedResult = await pool.query(sql, [id]); - if (formattedResult.rows.length) return { ok: true, code: 200, result: formattedResult.rows } - return { ok: false, code: 400, result: "Something went wrong" } + if (formattedResult.rows.length) return { ok: true, code: StatusCode.OK, result: formattedResult.rows } + return { ok: false, code: StatusCode.BadRequest, result: "Something went wrong" } } - return { ok: true, code: 403, result: "Not authorized to access this resource" } + return { ok: true, code: StatusCode.Forbidden, result: "Not authorized to access this resource" } } - return { ok: false, code: 404, result: "No friendship found with that ID" } + return { ok: false, code: StatusCode.NotFound, result: "No friendship found with that ID" } } catch (e: any) { throw new Error(e); } @@ -132,8 +133,8 @@ export class User { const statement = `SELECT * FROM recipin.cmp_userfriendships WHERE pending = true AND senderid = $1` const result = await pool.query(statement, [senderid]); - if (result.rows.length) return { ok: true, code: 200, result: result.rows } - return { ok: true, code: 200, result: "No pending friend requests found" } + if (result.rows.length) return { ok: true, code: StatusCode.OK, result: result.rows } + return { ok: true, code: StatusCode.NotFound, result: "No pending friend requests found" } } catch (e: any) { throw new Error(e); } @@ -162,9 +163,9 @@ export class User { try { const query = `SELECT * FROM recipin.cmp_userfriendships WHERE id = $1`; const friendship = await pool.query(query, [id]); - if (!friendship.rows.length) return { ok: false, code: 404, result: "Friendship with this code not found" }; + if (!friendship.rows.length) return { ok: false, code: StatusCode.NotFound, result: "Friendship with this code not found" }; if (!(friendship.rows[0].active) && friendship.rows[0].senderid == userid) { - return { ok: false, code: 403, result: "Please wait for friend request to be accepted" } + return { ok: false, code: StatusCode.Forbidden, result: "Please wait for friend request to be accepted" } } const statement = ` @@ -177,8 +178,8 @@ export class User { ` const values = [data.active, data.pending, (data.dateterminated || null), id]; const result = await pool.query(statement, values); - if (result.rows.length) return { ok: true, code: 200, result: result.rows[0] } - return { ok: false, code: 400, result: "Bad request" } + if (result.rows.length) return { ok: true, code: StatusCode.OK, result: result.rows[0] } + return { ok: false, code: StatusCode.BadRequest, result: "Bad request" } } catch (e: any) { throw new Error(e); } diff --git a/server/util/ControllerResponse.ts b/server/util/ControllerResponse.ts index ddebd60..87fde86 100644 --- a/server/util/ControllerResponse.ts +++ b/server/util/ControllerResponse.ts @@ -1,11 +1,11 @@ -import { CtlResponse } from "./types"; +import { CtlResponse, StatusCode } from "./types"; export default class ControllerResponse implements CtlResponse { ok: boolean - code: number - data: T | T[] | string + code: StatusCode + data: T | string - constructor(ok: boolean, code: number, data: T | T[] | string) { + constructor(ok: boolean, code: StatusCode, data: T | string) { this.ok = ok this.code = code this.data = data diff --git a/server/util/types.ts b/server/util/types.ts index b60f53c..65efb6a 100644 --- a/server/util/types.ts +++ b/server/util/types.ts @@ -1,5 +1,17 @@ export interface CtlResponse { ok: boolean code: number - data: T | T[] | string + data: T | string +} + +export enum StatusCode { + OK = 200, + NewContent = 201, + NoContent = 204, + NotModified = 304, + BadRequest = 400, + Unauthorized = 401, + Forbidden = 403, + NotFound = 404, + ServerError = 500 } \ No newline at end of file