Skip to content

Commit 4f9eddd

Browse files
committed
delete events on interview cancel
1 parent 98eb3ad commit 4f9eddd

File tree

4 files changed

+71
-2
lines changed

4 files changed

+71
-2
lines changed

apps/api/src/intern/intern.module.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,16 @@ import { PrismaService } from 'src/prisma.service';
55

66
import { InternController } from './intern.controller';
77
import { InternService } from './intern.service';
8+
import { MicrosoftGraphService } from 'src/interview-slot/graph.service';
89

910
@Module({
1011
controllers: [InternController],
11-
providers: [InternService, LoggerService, EmailService, PrismaService],
12+
providers: [
13+
InternService,
14+
LoggerService,
15+
EmailService,
16+
MicrosoftGraphService,
17+
PrismaService,
18+
],
1219
})
1320
export class InternModule {}

apps/api/src/intern/intern.service.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { PrismaService } from 'src/prisma.service';
2424

2525
import * as disposableEmailBlocklist from './disposable-email-blocklist.json';
2626
import { CreateInternDto } from './dto/createIntern.dto';
27+
import { MicrosoftGraphService } from 'src/interview-slot/graph.service';
2728

2829
type SendEmailPayload = {
2930
From: string;
@@ -38,6 +39,7 @@ export class InternService {
3839
constructor(
3940
private readonly prisma: PrismaService,
4041
private readonly emailService: EmailService,
42+
private readonly microsoftGraphService: MicrosoftGraphService,
4143
) {}
4244

4345
private readonly logger = new Logger(InternService.name);
@@ -558,6 +560,20 @@ export class InternService {
558560
},
559561
});
560562

563+
const interns = await this.prisma.intern.findMany({
564+
where: internFilter,
565+
select: { firstName: true, lastName: true },
566+
});
567+
568+
await Promise.allSettled(
569+
interns.map((intern) =>
570+
this.microsoftGraphService.deleteEvent({
571+
firstName: intern.firstName,
572+
lastName: intern.lastName,
573+
}),
574+
),
575+
);
576+
561577
return await this.prisma.intern.updateMany({
562578
where: internFilter,
563579
data: {

apps/api/src/interview-slot/graph.service.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Intern } from '@internship-app/types';
12
import { Injectable } from '@nestjs/common';
23
import axios from 'axios';
34
import {
@@ -34,6 +35,27 @@ export class MicrosoftGraphService {
3435
}
3536
}
3637

38+
async getAllEvents() {
39+
try {
40+
const token = await this.getAppAccessToken();
41+
const res = await axios.get(
42+
`${GRAPH_USERS_PATH}/event-scheduler@dump.hr/events`,
43+
{
44+
headers: { Authorization: `Bearer ${token}` },
45+
},
46+
);
47+
48+
return res.data.value;
49+
} catch (err: any) {
50+
console.error(
51+
'Failed to get outlook events:',
52+
err.response?.data || err.message,
53+
);
54+
55+
throw err;
56+
}
57+
}
58+
3759
async createEvent(eventData: any) {
3860
try {
3961
const token = await this.getAppAccessToken();
@@ -66,4 +88,28 @@ export class MicrosoftGraphService {
6688
throw err;
6789
}
6890
}
91+
92+
async deleteEvent(intern: { firstName: string; lastName: string }) {
93+
try {
94+
const token = await this.getAppAccessToken();
95+
const events = await this.getAllEvents();
96+
console.log('EVENTS: ', events);
97+
const eventId = events.find(
98+
(event) =>
99+
event.subject === `Intervju s ${intern.firstName} ${intern.lastName}`,
100+
).id;
101+
await axios.delete(
102+
`${GRAPH_USERS_PATH}/event-scheduler@dump.hr/events/${eventId}`,
103+
{
104+
headers: { Authorization: `Bearer ${token}` },
105+
},
106+
);
107+
} catch (err: any) {
108+
console.error(
109+
'Failed to delete outlook event:',
110+
err.response?.data || err.message,
111+
);
112+
throw err;
113+
}
114+
}
69115
}

apps/api/src/interview-slot/interview-slot.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ export class InterviewSlotService {
133133
where: {
134134
internId: null,
135135
start: {
136-
gte: new Date(new Date().getTime() + 4 * 60 * 60 * 1000),
136+
gte: new Date(new Date().getTime() + 8 * 60 * 60 * 1000),
137137
},
138138
AND: [
139139
{

0 commit comments

Comments
 (0)