Skip to content

Commit

Permalink
Merge pull request #40 from 5th-Neordinary-HACKATHON-MEETA/issue/10
Browse files Browse the repository at this point in the history
Feat: 유저별 회의 시작 시간 API 구현 - #10
  • Loading branch information
cookie-meringue authored Nov 25, 2023
2 parents f8898be + 6902fc5 commit 097f6eb
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 3 deletions.
10 changes: 10 additions & 0 deletions src/common/response/response.code.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,16 @@ export const RESPONSE_CODE: Record<number, ResponseCode> = {
},

//TEAM
24030: {
code: 24031,
message: '해당 팀에 가입되어 있지 않습니다.',
status: HttpStatus.FORBIDDEN,
},
24031: {
code: 24031,
message: '해당 팀의 방장이 아닙니다.',
status: HttpStatus.FORBIDDEN,
},
24040: {
code: 24040,
message: '존재하지 않는 팀입니다.',
Expand Down
9 changes: 9 additions & 0 deletions src/meetings/dtos/request/possible-time.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { IsDateString, IsString } from 'class-validator';

export class PossibleTimeDto {
@IsString()
meetId!: string;

@IsDateString()
date!: Date;
}
12 changes: 11 additions & 1 deletion src/meetings/meetings.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,27 @@ import { AuthUser } from '../auth/auth-user.decorator';
import { ResponseBody } from '../common/response/response';
import { User } from '../users/entities/users.entity';
import { CreateDto } from './dtos/request/create.dto';
import { PossibleTimeDto } from './dtos/request/possible-time.dto';

@Controller('meetings') //미들웨어라고 보면 됨. domain/teams/ ~~ 로 시작한다고 정해준다.
export class MeetingsController {
constructor(private readonly meetingService: MeetingsService) {} //meetingService는 변수명, MeetingsService는 객체 즉, teamsService라는 이름의 TeamsService 객체를 생성해준 것

@Post('/meet')
@UseGuards(JwtAuthGuard) // jwt에 있는 정보를 가지고 DB에서 조회를 한 뒤 유저를 넘겨주고, @UseGuards에서 유저 정보를 불러와 사용한다.
@UseGuards(JwtAuthGuard) // jwt에 있는 정보를 가지고 DB에서 조회를 한 뒤 유저를 넘겨주고, @AuthUser에서 유저 정보를 불러와 사용한다.
async create(
@AuthUser() user: User,
@Body() createDto: CreateDto, // create.dto에서 정의해줌
): Promise<ResponseBody> {
return await this.meetingService.create(createDto);
}

@Post('/possible-time')
@UseGuards(JwtAuthGuard)
async possibleTime(
@AuthUser() user: User,
@Body() timeDto: PossibleTimeDto,
): Promise<ResponseBody> {
return await this.meetingService.possibleTime(timeDto, user);
}
}
6 changes: 5 additions & 1 deletion src/meetings/meetings.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@ import { TypeOrmModule } from '@nestjs/typeorm';
import { Meeting } from './entities/meeting.entity';
import { MeetingsController } from './meetings.controller';
import { MeetingsService } from './meetings.service';
import { Participant } from '../relationentities/participant.entity';
import { Possible_Time } from '../relationentities/possible_time.entity';
import { Team } from '../teams/entities/team.entity';

@Module({
imports: [TypeOrmModule.forFeature([Meeting, Team])],
imports: [
TypeOrmModule.forFeature([Meeting, Participant, Possible_Time, Team]),
],
controllers: [MeetingsController],
providers: [MeetingsService],
exports: [],
Expand Down
63 changes: 62 additions & 1 deletion src/meetings/meetings.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,24 @@ import { Meeting } from './entities/meeting.entity';
import { CreateDto } from './dtos/request/create.dto';
import { ResponseBody, SuccessResponse } from '../common/response/response';
import { RESPONSE_CODE } from '../common/response/response.code';
import { Participant } from '../relationentities/participant.entity';
import { Possible_Time } from '../relationentities/possible_time.entity';
import { Team } from '../teams/entities/team.entity';
import { Exception } from '../common/response/exception';
import { PossibleTimeDto } from './dtos/request/possible-time.dto';
import { User } from '../users/entities/users.entity';

@Injectable()
export class MeetingsService {
constructor(
@InjectRepository(Meeting)
private meetingsRepository: Repository<Meeting>,
@InjectRepository(Participant)
private participantsRepository: Repository<Participant>,
@InjectRepository(Possible_Time)
private possible_timesRepository: Repository<Possible_Time>,
@InjectRepository(Team)
private teamsRepository: Repository<Team>, //이 repository가 DB에 있던 정보를 불러온 것
private teamsRepository: Repository<Team>,
) {}

async create(createDto: CreateDto): Promise<ResponseBody> {
Expand All @@ -37,4 +45,57 @@ export class MeetingsService {
await this.meetingsRepository.save(meeting);
return SuccessResponse(RESPONSE_CODE[2000], { id: meeting.id });
}

async possibleTime(
timeDto: PossibleTimeDto,
user: User,
): Promise<ResponseBody> {
const meeting: Meeting = await this.meetingsRepository.findOne({
where: { id: timeDto.meetId },
relations: {
team: true,
},
});

if (!meeting) {
throw new Exception(RESPONSE_CODE[34040], null);
}

const participant: Participant = await this.participantsRepository.findOne({
where: { team: meeting.team, user: user },
});

if (!participant) {
throw new Exception(RESPONSE_CODE[24030], null);
}

const possibleTimeInDb: Possible_Time =
await this.possible_timesRepository.findOne({
where: { meeting: meeting, user: user },
});

if (possibleTimeInDb) {
const dbDate = new Date(possibleTimeInDb.possibleTime);
const inputDate = new Date(timeDto.date);
if (dbDate.getDate() == inputDate.getDate()) {
possibleTimeInDb.possibleTime = timeDto.date;
await this.possible_timesRepository.save(possibleTimeInDb);
} else {
const possible_time: Possible_Time =
this.possible_timesRepository.create();
possible_time.user = user;
possible_time.meeting = meeting;
possible_time.possibleTime = timeDto.date;
await this.possible_timesRepository.save(possible_time);
}
} else {
const possible_time: Possible_Time =
this.possible_timesRepository.create();
possible_time.user = user;
possible_time.meeting = meeting;
possible_time.possibleTime = timeDto.date;
await this.possible_timesRepository.save(possible_time);
}
return SuccessResponse(RESPONSE_CODE[2000], null);
}
}

0 comments on commit 097f6eb

Please sign in to comment.