From bdee3d14b0308fb46af86a5ab820f0a1401ab7e2 Mon Sep 17 00:00:00 2001 From: Julien Calixte Date: Mon, 17 Apr 2023 21:13:45 +0200 Subject: [PATCH] add a breaktime service to change all unfinished steps --- .../record/services/breaktime-service.test.ts | 52 +++++++++++++++++++ .../record/services/breaktime-service.ts | 25 +++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/modules/record/services/breaktime-service.test.ts create mode 100644 src/modules/record/services/breaktime-service.ts diff --git a/src/modules/record/services/breaktime-service.test.ts b/src/modules/record/services/breaktime-service.test.ts new file mode 100644 index 0000000..c5a8620 --- /dev/null +++ b/src/modules/record/services/breaktime-service.test.ts @@ -0,0 +1,52 @@ +import { toISODate } from '@/shared/types/date' +import { describe, expect, it } from 'vitest' +import { createRecordableFixture } from '../interfaces/recordable.fixture' +import { addBreakTimeToStepRecords } from './breaktime-service' + +describe('Break Time Service', () => { + it('adds no break time if there is no break time', () => { + const record = createRecordableFixture({ + breakTime: undefined + }) + + expect(addBreakTimeToStepRecords(record)).toEqual(record) + }) + + it('adds no break time if the break is not over yet', () => { + const record = createRecordableFixture({ + breakTime: { + start: toISODate(new Date('2023-04-17T19:00:00.000Z')) + }, + stepRecords: { + 'step-id-1': { + start: toISODate(new Date('2023-04-17T18:00:00.000Z')) + } + } + }) + + expect(addBreakTimeToStepRecords(record)).toEqual(record) + }) + + it('adds the break time if the break time is over', () => { + const record = createRecordableFixture({ + breakTime: { + start: toISODate(new Date('2023-04-17T19:00:00.000Z')), + end: toISODate(new Date('2023-04-17T20:00:00.000Z')) + }, + stepRecords: { + 'step-id-1': { + start: toISODate(new Date('2023-04-17T18:00:00.000Z')) + } + } + }) + + expect(addBreakTimeToStepRecords(record)).toEqual({ + ...record, + stepRecords: { + 'step-id-1': { + start: toISODate(new Date('2023-04-17T19:00:00.000Z')) + } + } + }) + }) +}) diff --git a/src/modules/record/services/breaktime-service.ts b/src/modules/record/services/breaktime-service.ts new file mode 100644 index 0000000..5998138 --- /dev/null +++ b/src/modules/record/services/breaktime-service.ts @@ -0,0 +1,25 @@ +import { toISODate } from '@/shared/types/date' +import type { Recordable } from '../interfaces/recordable' + +export const addBreakTimeToStepRecords = (record: Recordable): Recordable => { + const breakTime = record.breakTime + + if (!breakTime || !breakTime.end) { + return record + } + + const diffInMs = + new Date(breakTime.end).getTime() - new Date(breakTime.start).getTime() + + const stepRecords = record.stepRecords + + for (const stepId in stepRecords) { + if (!stepRecords[stepId].end) { + const newStart = new Date(stepRecords[stepId].start).getTime() + diffInMs + + stepRecords[stepId].start = toISODate(new Date(newStart)) + } + } + + return { ...record, stepRecords } +}