Skip to content

Commit

Permalink
fixed overlap checks, error types
Browse files Browse the repository at this point in the history
  • Loading branch information
FearsomeRover committed Aug 13, 2024
1 parent fdb816f commit f121b24
Showing 1 changed file with 41 additions and 23 deletions.
64 changes: 41 additions & 23 deletions apps/backend/src/application-period/application-period.service.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BadRequestException, Injectable } from '@nestjs/common';
import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common';
import { ApplicationPeriod } from '@prisma/client';
import { PrismaService } from 'nestjs-prisma';

Expand Down Expand Up @@ -28,7 +28,7 @@ export class ApplicationPeriodService {
},
});
if (!period) {
throw new Error('No current application period found');
throw new NotFoundException('No current application period found');
}
return period;
}
Expand All @@ -40,22 +40,31 @@ export class ApplicationPeriodService {
},
});
if (!period) {
throw new BadRequestException('Application period not found');
throw new NotFoundException('Application period not found');
}
return period;
}

async create(createApplicationPeriodDto: CreateApplicationPeriodDto, user): Promise<ApplicationPeriod> {
const periods = await this.prisma.applicationPeriod.findMany();
const newPeriodStart = new Date(createApplicationPeriodDto.applicationPeriodStartAt);
const newPeriodEnd = new Date(createApplicationPeriodDto.applicationPeriodEndAt);
periods.forEach((period) => {
const start = new Date(period.applicationPeriodStartAt);
const end = new Date(period.applicationPeriodEndAt);
if (start <= newPeriodEnd && end >= newPeriodStart) {
throw new BadRequestException('Application period overlaps with another period');
}
const conflictingPeriod = await this.prisma.applicationPeriod.findFirst({
where: {
AND: [
{
applicationPeriodStartAt: {
lte: createApplicationPeriodDto.applicationPeriodEndAt,
},
},
{
applicationPeriodEndAt: {
gte: createApplicationPeriodDto.applicationPeriodStartAt,
},
},
],
},
});
if (conflictingPeriod) {
throw new BadRequestException('Application period overlaps with another period');
}
return this.prisma.applicationPeriod.create({
data: {
...createApplicationPeriodDto,
Expand All @@ -76,25 +85,34 @@ export class ApplicationPeriodService {
},
});
} catch (e) {
throw new BadRequestException('Application does not exist');
throw new NotFoundException('Application period not found');
}
}

async update(updateApplicationPeriodDto: UpdateApplicationPeriodDto, id: number): Promise<ApplicationPeriod> {
const periods = await this.prisma.applicationPeriod.findMany();
if (
Boolean(updateApplicationPeriodDto.applicationPeriodStartAt) ||
Boolean(updateApplicationPeriodDto.applicationPeriodEndAt)
) {
const newPeriodStart = new Date(updateApplicationPeriodDto.applicationPeriodStartAt);
const newPeriodEnd = new Date(updateApplicationPeriodDto.applicationPeriodEndAt);
periods.forEach((period) => {
const start = new Date(period.applicationPeriodStartAt);
const end = new Date(period.applicationPeriodEndAt);
if (period.id !== id && start <= newPeriodEnd && end >= newPeriodStart) {
throw new BadRequestException('Application period overlaps with another period');
}
const conflictingPeriod = await this.prisma.applicationPeriod.findFirst({
where: {
AND: [
{
applicationPeriodStartAt: {
lte: updateApplicationPeriodDto.applicationPeriodEndAt,
},
},
{
applicationPeriodEndAt: {
gte: updateApplicationPeriodDto.applicationPeriodStartAt,
},
},
],
},
});
if (conflictingPeriod) {
throw new BadRequestException('Application period overlaps with another period');
}
}
try {
return this.prisma.applicationPeriod.update({
Expand All @@ -104,7 +122,7 @@ export class ApplicationPeriodService {
data: updateApplicationPeriodDto,
});
} catch (e) {
throw new BadRequestException('Application does not exist');
throw new BadRequestException('Application period not found');
}
}
}

0 comments on commit f121b24

Please sign in to comment.