Skip to content

Commit

Permalink
Merge pull request #116 from DevKor-github/feature/timetable
Browse files Browse the repository at this point in the history
Feature/timetable
  • Loading branch information
Devheun authored Dec 2, 2024
2 parents 5e7e9fe + 57fc49b commit a46ad05
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 17 deletions.
32 changes: 18 additions & 14 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions src/timetable/dto/delete-timetable-response.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { ApiPropertyOptional } from '@nestjs/swagger';
import { CommonDeleteResponseDto } from './common-delete-response.dto';

export class DeleteTimetableResponseDto extends CommonDeleteResponseDto {
constructor(deleted: boolean, timetableId?: number) {
super(deleted);
this.createdTimetableId = timetableId;
}

@ApiPropertyOptional({
description: '시간표 삭제 후 추가로 기본 시간표 생성될 때의 시간표 id',
})
createdTimetableId?: number;
}
42 changes: 39 additions & 3 deletions src/timetable/timetable.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { TimetableCourseEntity } from 'src/entities/timetable-course.entity';
import { isConflictingTime } from 'src/utils/time-utils';
import { DayType } from 'src/common/types/day-type.utils';
import { throwKukeyException } from 'src/utils/exception.util';
import { DeleteTimetableResponseDto } from './dto/delete-timetable-response.dto';

@Injectable()
export class TimetableService {
Expand Down Expand Up @@ -378,7 +379,7 @@ export class TimetableService {
transactionManager: EntityManager,
timetableId: number,
user: AuthorizedUserDto,
): Promise<CommonDeleteResponseDto> {
): Promise<DeleteTimetableResponseDto> {
const timetable = await transactionManager.findOne(TimetableEntity, {
where: { id: timetableId, userId: user.id },
relations: ['timetableCourses', 'schedules'], // soft-remove cascade 조건을 위해 추가
Expand Down Expand Up @@ -409,7 +410,33 @@ export class TimetableService {
}
}
await transactionManager.softRemove(timetable);
return new CommonDeleteResponseDto(true);

// 삭제 후에 해당 학기에 시간표가 하나도 존재하지 않으면 추가로 하나 생성 (그 시간표가 대표시간표)
const remainingTimetable = await transactionManager.findOne(
TimetableEntity,
{
where: {
userId: user.id,
semester: timetable.semester,
year: timetable.year,
},
},
);

if (!remainingTimetable) {
const newTimetable = transactionManager.create(TimetableEntity, {
userId: user.id,
timetableName: 'timetable 1',
semester: timetable.semester,
year: timetable.year,
mainTimetable: true,
});

await transactionManager.save(newTimetable);
return new DeleteTimetableResponseDto(true, newTimetable.id);
}

return new DeleteTimetableResponseDto(true, null);
}

async getMainTimetable(
Expand All @@ -426,7 +453,16 @@ export class TimetableService {
});

if (!mainTimetable) {
throwKukeyException('TIMETABLE_NOT_FOUND');
// 대표 시간표 없으면 시간표 하나 바로 생성
return await this.createTimetable(
this.timetableRepository.manager,
{
timetableName: 'timetable 1',
semester: timetableDto.semester,
year: timetableDto.year,
},
user,
);
}
return mainTimetable;
}
Expand Down

0 comments on commit a46ad05

Please sign in to comment.