Files
calendar/packages/lib/server/repository/ooo.ts
T

83 lines
1.7 KiB
TypeScript

import type { PrismaClient } from "@calcom/prisma";
export class PrismaOOORepository {
constructor(private prismaClient: PrismaClient) {}
async findManyOOO({
startTimeDate,
endTimeDate,
allUserIds,
}: {
startTimeDate: Date;
endTimeDate: Date;
allUserIds: number[];
}) {
return this.prismaClient.outOfOfficeEntry.findMany({
where: {
userId: {
in: allUserIds,
},
OR: [
// outside of range
// (start <= 'dateTo' AND end >= 'dateFrom')
{
start: {
lte: endTimeDate,
},
end: {
gte: startTimeDate,
},
},
// start is between dateFrom and dateTo but end is outside of range
// (start <= 'dateTo' AND end >= 'dateTo')
{
start: {
lte: endTimeDate,
},
end: {
gte: endTimeDate,
},
},
// end is between dateFrom and dateTo but start is outside of range
// (start <= 'dateFrom' OR end <= 'dateTo')
{
start: {
lte: startTimeDate,
},
end: {
lte: endTimeDate,
},
},
],
},
select: {
id: true,
start: true,
end: true,
user: {
select: {
id: true,
name: true,
},
},
toUser: {
select: {
id: true,
username: true,
name: true,
},
},
reason: {
select: {
id: true,
emoji: true,
reason: true,
},
},
},
});
}
}