From 029cd2fa7f34521b8531950a8aa1386c40e46091 Mon Sep 17 00:00:00 2001 From: OJisMe Date: Sat, 23 Sep 2023 12:28:31 -0400 Subject: [PATCH 1/6] feat: getAllMembers endpoint completed resolves #3 --- apps/backend/src/users/types.ts | 7 ++++ apps/backend/src/users/user.entity.ts | 21 +++++++++++- apps/backend/src/users/users.controller.ts | 15 +++++++-- apps/backend/src/users/users.service.ts | 39 ++++++++++++++++++++-- package.json | 4 +-- 5 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 apps/backend/src/users/types.ts diff --git a/apps/backend/src/users/types.ts b/apps/backend/src/users/types.ts new file mode 100644 index 0000000..526edb0 --- /dev/null +++ b/apps/backend/src/users/types.ts @@ -0,0 +1,7 @@ +export enum Status { + MEMBER = 'MEMBER', + RECRUITER = 'RECRUITER', + ADMIN = 'ADMIN', + ALUMNI = 'ALUMNI', + APPLICANT = 'APPLICANT', +} diff --git a/apps/backend/src/users/user.entity.ts b/apps/backend/src/users/user.entity.ts index fb43b7f..2beb49f 100644 --- a/apps/backend/src/users/user.entity.ts +++ b/apps/backend/src/users/user.entity.ts @@ -1,9 +1,13 @@ import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; +import { Status } from './types'; @Entity() export class User { @PrimaryGeneratedColumn() - id: number; + userId: number; + + @Column() + status: Status; @Column() firstName: string; @@ -13,4 +17,19 @@ export class User { @Column() email: string; + + @Column() + profilePicture: string; + + @Column() + linkedin: string | null; + + @Column() + github: string | null; + + @Column() + team: string | null; + + @Column() + role: string | null; } diff --git a/apps/backend/src/users/users.controller.ts b/apps/backend/src/users/users.controller.ts index 55f0c84..3b11315 100644 --- a/apps/backend/src/users/users.controller.ts +++ b/apps/backend/src/users/users.controller.ts @@ -1,4 +1,10 @@ -import { Controller, Get } from '@nestjs/common'; +import { + DefaultValuePipe, + ParseBoolPipe, + Query, + Controller, + Get, +} from '@nestjs/common'; import { UsersService } from './users.service'; @@ -7,7 +13,10 @@ export class UsersController { constructor(private readonly usersService: UsersService) {} @Get() - getAllUsers() { - return this.usersService.findAll(); + getAllMembers( + @Query('getAllMembers', new DefaultValuePipe(false), ParseBoolPipe) + getAllMembers: boolean, + ) { + return this.usersService.findAll(getAllMembers); } } diff --git a/apps/backend/src/users/users.service.ts b/apps/backend/src/users/users.service.ts index 7c477d9..7244877 100644 --- a/apps/backend/src/users/users.service.ts +++ b/apps/backend/src/users/users.service.ts @@ -1,8 +1,13 @@ -import { Injectable } from '@nestjs/common'; +import { + BadRequestException, + UnauthorizedException, + Injectable, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { User } from './user.entity'; +import { Status } from './types'; @Injectable() export class UsersService { @@ -11,7 +16,35 @@ export class UsersService { private usersRepository: Repository, ) {} - findAll(): Promise { - return this.usersRepository.find(); + async findAll(getAllMembers: boolean): Promise { + if (!getAllMembers) return []; + + const exampleUser: User = { + userId: 1, + status: Status.ADMIN, + firstName: 'jimmy', + lastName: 'jimmy2', + email: 'jimmy.jimmy2@mail.com', + profilePicture: null, + linkedin: null, + github: null, + team: null, + role: null, + }; + + if (exampleUser.status == Status.APPLICANT) { + throw new UnauthorizedException(); + } + + const users: User[] = await this.usersRepository.find(); + + //TODO possibly use an interceptor instead here + users.forEach((user: User) => { + if (user.status == Status.APPLICANT) { + throw new BadRequestException(); + } + }); + + return users; } } diff --git a/package.json b/package.json index cc41cf5..98e0dbf 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "0.0.0", "license": "MIT", "scripts": { - "format:check": "prettier --check apps/{frontend,backend}/src/**/*.{js,ts,tsx}", - "format": "prettier --write apps/{frontend,backend}/src/**/*.{js,ts,tsx}", + "format:check": "prettier --check apps/{frontend,backend}/src/**/*.{ts,tsx}", + "format": "prettier --write apps/{frontend,backend}/src/**/*.{ts,tsx}", "lint:check": "eslint apps/frontend --ext .ts,.tsx && eslint apps/backend --ext .ts,.tsx", "lint": "eslint apps/frontend --ext .ts,.tsx --fix && eslint apps/backend --ext .ts,.tsx --fix", "prepush": "yarn run format:check && yarn run lint:check", From a5940ba0efbefdb1ccc792c66636f88afad3f582 Mon Sep 17 00:00:00 2001 From: OJisMe Date: Sat, 23 Sep 2023 13:38:11 -0400 Subject: [PATCH 2/6] update linter --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 98e0dbf..87e5a41 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "0.0.0", "license": "MIT", "scripts": { - "format:check": "prettier --check apps/{frontend,backend}/src/**/*.{ts,tsx}", - "format": "prettier --write apps/{frontend,backend}/src/**/*.{ts,tsx}", + "format:check": "prettier --no-error-on-unmatched-pattern --check apps/{frontend,backend}/src/**/*.{js,ts,tsx}", + "format": "prettier --no-error-on-unmatched-pattern --write apps/{frontend,backend}/src/**/*.{js,ts,tsx}", "lint:check": "eslint apps/frontend --ext .ts,.tsx && eslint apps/backend --ext .ts,.tsx", "lint": "eslint apps/frontend --ext .ts,.tsx --fix && eslint apps/backend --ext .ts,.tsx --fix", "prepush": "yarn run format:check && yarn run lint:check", From f3df40bb3f28e255310f2a4df83d349a90804cf4 Mon Sep 17 00:00:00 2001 From: Harrison Kim Date: Mon, 25 Sep 2023 09:10:57 -0700 Subject: [PATCH 3/6] fix: updated user service to return all users except applicants --- apps/backend/src/users/user.entity.ts | 4 ++-- apps/backend/src/users/users.service.ts | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/backend/src/users/user.entity.ts b/apps/backend/src/users/user.entity.ts index 2beb49f..d383175 100644 --- a/apps/backend/src/users/user.entity.ts +++ b/apps/backend/src/users/user.entity.ts @@ -1,9 +1,9 @@ -import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; +import { Entity, Column, ObjectIdColumn } from 'typeorm'; import { Status } from './types'; @Entity() export class User { - @PrimaryGeneratedColumn() + @ObjectIdColumn() // https://github.com/typeorm/typeorm/issues/1584 userId: number; @Column() diff --git a/apps/backend/src/users/users.service.ts b/apps/backend/src/users/users.service.ts index 7244877..11beee7 100644 --- a/apps/backend/src/users/users.service.ts +++ b/apps/backend/src/users/users.service.ts @@ -4,7 +4,7 @@ import { Injectable, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; +import { MongoRepository } from 'typeorm'; import { User } from './user.entity'; import { Status } from './types'; @@ -13,7 +13,7 @@ import { Status } from './types'; export class UsersService { constructor( @InjectRepository(User) - private usersRepository: Repository, + private usersRepository: MongoRepository, ) {} async findAll(getAllMembers: boolean): Promise { @@ -36,7 +36,11 @@ export class UsersService { throw new UnauthorizedException(); } - const users: User[] = await this.usersRepository.find(); + const users: User[] = await this.usersRepository.find({ + where: { + status: { $not: { $eq: Status.APPLICANT } }, + }, + }); //TODO possibly use an interceptor instead here users.forEach((user: User) => { From da9c7f5b4f9043dfd1829e51e0aa5641b982a639 Mon Sep 17 00:00:00 2001 From: Harrison Kim Date: Mon, 25 Sep 2023 20:52:14 -0700 Subject: [PATCH 4/6] fix: changed userId field type to the expected ObjectId type --- apps/backend/src/users/user.entity.ts | 5 ++--- apps/backend/src/users/users.service.ts | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/backend/src/users/user.entity.ts b/apps/backend/src/users/user.entity.ts index d383175..4353cc4 100644 --- a/apps/backend/src/users/user.entity.ts +++ b/apps/backend/src/users/user.entity.ts @@ -1,10 +1,9 @@ -import { Entity, Column, ObjectIdColumn } from 'typeorm'; +import { Entity, Column, ObjectIdColumn, ObjectId } from 'typeorm'; import { Status } from './types'; - @Entity() export class User { @ObjectIdColumn() // https://github.com/typeorm/typeorm/issues/1584 - userId: number; + userId: ObjectId; @Column() status: Status; diff --git a/apps/backend/src/users/users.service.ts b/apps/backend/src/users/users.service.ts index 11beee7..6c7db64 100644 --- a/apps/backend/src/users/users.service.ts +++ b/apps/backend/src/users/users.service.ts @@ -8,6 +8,7 @@ import { MongoRepository } from 'typeorm'; import { User } from './user.entity'; import { Status } from './types'; +import { ObjectId } from 'mongodb'; @Injectable() export class UsersService { @@ -20,7 +21,7 @@ export class UsersService { if (!getAllMembers) return []; const exampleUser: User = { - userId: 1, + userId: new ObjectId('a0f3efa0f3efa0f3efa0f3ef'), status: Status.ADMIN, firstName: 'jimmy', lastName: 'jimmy2', From f07fcca23060c9d66bba092cd062eeab61c579c7 Mon Sep 17 00:00:00 2001 From: Harrison Kim Date: Tue, 3 Oct 2023 23:06:14 -0700 Subject: [PATCH 5/6] fix: removed redundant check in user service --- apps/backend/src/users/users.service.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/apps/backend/src/users/users.service.ts b/apps/backend/src/users/users.service.ts index 6c7db64..3e316ec 100644 --- a/apps/backend/src/users/users.service.ts +++ b/apps/backend/src/users/users.service.ts @@ -43,13 +43,6 @@ export class UsersService { }, }); - //TODO possibly use an interceptor instead here - users.forEach((user: User) => { - if (user.status == Status.APPLICANT) { - throw new BadRequestException(); - } - }); - return users; } } From 54e919206029af4172d62c7b8317a36324f02526 Mon Sep 17 00:00:00 2001 From: Harrison Kim Date: Tue, 3 Oct 2023 23:06:52 -0700 Subject: [PATCH 6/6] style: removed unused imports --- apps/backend/src/users/users.service.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/backend/src/users/users.service.ts b/apps/backend/src/users/users.service.ts index 3e316ec..00a0e58 100644 --- a/apps/backend/src/users/users.service.ts +++ b/apps/backend/src/users/users.service.ts @@ -1,8 +1,4 @@ -import { - BadRequestException, - UnauthorizedException, - Injectable, -} from '@nestjs/common'; +import { UnauthorizedException, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { MongoRepository } from 'typeorm';