Files
bigcapital/packages/server/src/services/Projects/Times/SyncActualTimeTaskSubscriber.ts
Josh Soref b2510145dc spelling: actual
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2023-06-27 09:34:46 -04:00

92 lines
2.2 KiB
TypeScript

import { Inject, Service } from 'typedi';
import {
IProjectTimeCreatedEventPayload,
IProjectTimeDeletedEventPayload,
IProjectTimeEditedEventPayload,
} from '@/interfaces';
import events from '@/subscribers/events';
import { SyncActualTimeTask } from './SyncActualTimeTask';
@Service()
export class SyncActualTimeTaskSubscriber {
@Inject()
private syncActualTimeTask: SyncActualTimeTask;
/**
* Attaches events with handlers.
* @param bus
*/
attach(bus) {
bus.subscribe(
events.projectTime.onCreated,
this.handleIncreaseActualTimeOnTimeCreate
);
bus.subscribe(
events.projectTime.onDeleted,
this.handleDecreaseActualTimeOnTimeDelete
);
bus.subscribe(
events.projectTime.onEdited,
this.handleAdjustActualTimeOnTimeEdited
);
}
/**
* Handles increasing the actual time of the task once time entry be created.
* @param {IProjectTimeCreatedEventPayload} payload -
*/
private handleIncreaseActualTimeOnTimeCreate = async ({
tenantId,
time,
trx,
}: IProjectTimeCreatedEventPayload) => {
await this.syncActualTimeTask.increaseActualTimeTask(
tenantId,
time.taskId,
time.duration,
trx
);
};
/**
* Handle decreasing the actual time of the tsak once time entry be deleted.
* @param {IProjectTimeDeletedEventPayload} payload
*/
private handleDecreaseActualTimeOnTimeDelete = async ({
tenantId,
oldTime,
trx,
}: IProjectTimeDeletedEventPayload) => {
await this.syncActualTimeTask.decreaseActualTimeTask(
tenantId,
oldTime.taskId,
oldTime.duration,
trx
);
};
/**
* Handle adjusting the actual time of the task once time be edited.
* @param {IProjectTimeEditedEventPayload} payload -
*/
private handleAdjustActualTimeOnTimeEdited = async ({
tenantId,
time,
oldTime,
trx,
}: IProjectTimeEditedEventPayload) => {
await this.syncActualTimeTask.decreaseActualTimeTask(
tenantId,
oldTime.taskId,
oldTime.duration,
trx
);
await this.syncActualTimeTask.increaseActualTimeTask(
tenantId,
time.taskId,
time.duration,
trx
);
};
}