mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
176 lines
4.0 KiB
TypeScript
176 lines
4.0 KiB
TypeScript
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
import ObjectID from "../../Types/ObjectID";
|
|
import DatabaseService from "./DatabaseService";
|
|
import Model from "../../Models/DatabaseModels/OnCallDutyPolicyTimeLog";
|
|
|
|
export class Service extends DatabaseService<Model> {
|
|
public constructor() {
|
|
super(Model);
|
|
}
|
|
|
|
public async startTimeLogForUser(data: {
|
|
projectId: ObjectID;
|
|
onCallDutyPolicyId: ObjectID;
|
|
onCallDutyPolicyEscalationRuleId: ObjectID;
|
|
userId: ObjectID;
|
|
teamId?: ObjectID;
|
|
onCallDutyPolicyScheduleId?: ObjectID;
|
|
startsAt: Date;
|
|
}): Promise<Model> {
|
|
const {
|
|
onCallDutyPolicyId,
|
|
userId,
|
|
teamId,
|
|
onCallDutyPolicyScheduleId,
|
|
startsAt,
|
|
} = data;
|
|
|
|
// check if the time log already exists for the user.
|
|
|
|
const existingTimeLog: Model | null = await this.findOneBy({
|
|
query: {
|
|
projectId: data.projectId,
|
|
onCallDutyPolicyId,
|
|
onCallDutyPolicyEscalationRuleId: data.onCallDutyPolicyEscalationRuleId,
|
|
userId,
|
|
...(teamId && { teamId }),
|
|
...(onCallDutyPolicyScheduleId && { onCallDutyPolicyScheduleId }),
|
|
},
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
|
|
if (existingTimeLog) {
|
|
return existingTimeLog;
|
|
}
|
|
|
|
const timeLog: Model = new Model();
|
|
timeLog.onCallDutyPolicyId = onCallDutyPolicyId;
|
|
timeLog.userId = userId;
|
|
if (teamId) {
|
|
timeLog.teamId = teamId;
|
|
}
|
|
timeLog.onCallDutyPolicyEscalationRuleId =
|
|
data.onCallDutyPolicyEscalationRuleId;
|
|
if (onCallDutyPolicyScheduleId) {
|
|
timeLog.onCallDutyPolicyScheduleId = onCallDutyPolicyScheduleId;
|
|
}
|
|
timeLog.projectId = data.projectId;
|
|
timeLog.startsAt = startsAt;
|
|
|
|
return await this.create({
|
|
data: timeLog,
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
public async endTimeForSchedule(data: {
|
|
projectId: ObjectID;
|
|
onCallDutyPolicyScheduleId: ObjectID;
|
|
endsAt: Date;
|
|
}): Promise<void> {
|
|
const { endsAt, onCallDutyPolicyScheduleId } = data;
|
|
await this.updateBy({
|
|
query: {
|
|
projectId: data.projectId,
|
|
onCallDutyPolicyScheduleId,
|
|
},
|
|
data: {
|
|
endsAt: endsAt,
|
|
},
|
|
limit: LIMIT_PER_PROJECT,
|
|
skip: 0,
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
public async endTimeForTeam(data: {
|
|
projectId: ObjectID;
|
|
teamId: ObjectID;
|
|
endsAt: Date;
|
|
}): Promise<void> {
|
|
const { endsAt, teamId } = data;
|
|
await this.updateBy({
|
|
query: {
|
|
projectId: data.projectId,
|
|
teamId,
|
|
},
|
|
|
|
limit: LIMIT_PER_PROJECT,
|
|
skip: 0,
|
|
data: {
|
|
endsAt: endsAt,
|
|
},
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
public async endTimeForUser(data: {
|
|
projectId: ObjectID;
|
|
userId: ObjectID;
|
|
endsAt: Date;
|
|
}): Promise<void> {
|
|
const { endsAt, userId } = data;
|
|
await this.updateBy({
|
|
query: {
|
|
projectId: data.projectId,
|
|
userId,
|
|
},
|
|
limit: LIMIT_PER_PROJECT,
|
|
skip: 0,
|
|
data: {
|
|
endsAt: endsAt,
|
|
},
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
public async endTimeLogForUser(data: {
|
|
projectId: ObjectID;
|
|
onCallDutyPolicyId: ObjectID;
|
|
onCallDutyPolicyEscalationRuleId: ObjectID;
|
|
userId: ObjectID;
|
|
teamId?: ObjectID;
|
|
onCallDutyPolicyScheduleId?: ObjectID;
|
|
endsAt: Date;
|
|
}): Promise<void> {
|
|
const {
|
|
onCallDutyPolicyId,
|
|
userId,
|
|
teamId,
|
|
onCallDutyPolicyScheduleId,
|
|
endsAt,
|
|
} = data;
|
|
|
|
await this.updateBy({
|
|
query: {
|
|
projectId: data.projectId,
|
|
onCallDutyPolicyId,
|
|
onCallDutyPolicyEscalationRuleId: data.onCallDutyPolicyEscalationRuleId,
|
|
userId,
|
|
...(teamId && { teamId }),
|
|
...(onCallDutyPolicyScheduleId && { onCallDutyPolicyScheduleId }),
|
|
},
|
|
limit: LIMIT_PER_PROJECT,
|
|
skip: 0,
|
|
data: {
|
|
endsAt: endsAt,
|
|
},
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
export default new Service();
|