Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/backend/src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { PluralNamingStrategy } from '../strategies/plural-naming.strategy';
imports: [
TypeOrmModule.forRoot({
type: 'mongodb',
host: 'localhost',
host: '127.0.0.1',
port: 27017,
database: 'c4cOpsTest',
// username: 'root',
Expand Down
9 changes: 5 additions & 4 deletions apps/backend/src/users/user.entity.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Entity, Column, ObjectIdColumn, ObjectId } from 'typeorm';
import { Entity, Column } from 'typeorm';
import { Status } from './types';

@Entity()
export class User {
@ObjectIdColumn() // https://github.com/typeorm/typeorm/issues/1584
userId: ObjectId;
@Column({ primary: true })
userId: number;

@Column()
status: Status;
Expand All @@ -18,7 +19,7 @@ export class User {
email: string;

@Column()
profilePicture: string;
profilePicture: string | null;

@Column()
linkedin: string | null;
Expand Down
7 changes: 7 additions & 0 deletions apps/backend/src/users/users.controller.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import {
DefaultValuePipe,
ParseBoolPipe,
ParseIntPipe,
Query,
Controller,
Get,
Param,
} from '@nestjs/common';

import { UsersService } from './users.service';
Expand All @@ -19,4 +21,9 @@ export class UsersController {
) {
return this.usersService.findAll(getAllMembers);
}

@Get('/:userId')
getUser(@Param('userId', ParseIntPipe) userId: number) {
return this.usersService.findOne(userId);
}
}
55 changes: 41 additions & 14 deletions apps/backend/src/users/users.service.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
import { UnauthorizedException, Injectable } from '@nestjs/common';
import {
BadRequestException,
UnauthorizedException,
Injectable,
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { ObjectId } from 'mongodb';
import { MongoRepository } from 'typeorm';

import { User } from './user.entity';
import { Status } from './types';
import { ObjectId } from 'mongodb';
import { getCurrentUser } from './utils';

@Injectable()
export class UsersService {
Expand All @@ -16,18 +21,7 @@ export class UsersService {
async findAll(getAllMembers: boolean): Promise<User[]> {
if (!getAllMembers) return [];

const exampleUser: User = {
userId: new ObjectId('a0f3efa0f3efa0f3efa0f3ef'),
status: Status.ADMIN,
firstName: 'jimmy',
lastName: 'jimmy2',
email: 'jimmy.jimmy2@mail.com',
profilePicture: null,
linkedin: null,
github: null,
team: null,
role: null,
};
const exampleUser = getCurrentUser();

if (exampleUser.status == Status.APPLICANT) {
throw new UnauthorizedException();
Expand All @@ -41,4 +35,37 @@ export class UsersService {

return users;
}

async findOne(userId: number) {
const user = await this.usersRepository.findOneBy({ id: userId });

if (!user) {
throw new BadRequestException('User not found');
}

const currentUser = getCurrentUser();

const currentStatus = currentUser.status;
const targetStatus = user.status;
switch (currentStatus) {
case Status.RECRUITER:
if (targetStatus === Status.ADMIN) {
throw new BadRequestException('User not found');
}
break;
case Status.APPLICANT:
if (currentUser.userId !== user.userId) {
throw new BadRequestException('User not found');
}
break;
case Status.MEMBER:
case Status.ALUMNI:
if (currentUser.status === Status.APPLICANT) {
throw new BadRequestException('User not found');
}
break;
}

return user;
}
}
15 changes: 15 additions & 0 deletions apps/backend/src/users/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Status } from './types';
import { User } from './user.entity';

export const getCurrentUser = (): 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,
});