add a breaktime service to change all unfinished steps
This commit is contained in:
52
src/modules/record/services/breaktime-service.test.ts
Normal file
52
src/modules/record/services/breaktime-service.test.ts
Normal file
@@ -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'))
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
25
src/modules/record/services/breaktime-service.ts
Normal file
25
src/modules/record/services/breaktime-service.ts
Normal file
@@ -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 }
|
||||
}
|
||||
Reference in New Issue
Block a user