-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathgetStartTimeStamp.ts
More file actions
66 lines (62 loc) · 1.94 KB
/
getStartTimeStamp.ts
File metadata and controls
66 lines (62 loc) · 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import { startOfDay, startOfWeek } from 'date-fns'
import { readdir, readFile, stat } from 'fs/promises'
import * as path from 'path'
import { getPreviousFolderName } from './getPreviousFolderName'
/**
* GO THROUGH ALL FILES AND FIND THE TIMESTAMP OF THE LATEST FETCH
*/
export const getStartTimeStamp = async ({
dataFolder,
weekFolder,
now,
debug,
}: {
dataFolder: string
weekFolder?: string
now?: Date
debug?: typeof console.log
}): Promise<number> => {
if (weekFolder === undefined) {
const fileArray = await readdir(dataFolder)
const latestWeekFolder: string | undefined = fileArray
.filter((folderName) => folderName.includes('week'))
.sort((folderA, folderB) => folderB.localeCompare(folderA))[0] as
| string
| undefined
debug?.(`Latest week folder`, latestWeekFolder)
if (latestWeekFolder === undefined) {
// Start midnight today
return startOfDay(now ?? new Date()).getTime()
}
weekFolder = latestWeekFolder
} else {
// Week folder is given, check if it exists
try {
await stat(path.join(dataFolder, weekFolder))
} catch {
// if not return start of week
return startOfWeek(now ?? new Date()).getTime()
}
}
const allFilesInFolder = await readdir(path.join(dataFolder, weekFolder))
const latestJSONFile: string | undefined = allFilesInFolder
.filter((fileName) => fileName.includes('.json'))
.sort((fileA, fileB) => fileB.localeCompare(fileA))[0] as string | undefined
if (latestJSONFile === undefined) {
return getStartTimeStamp({
dataFolder,
weekFolder: getPreviousFolderName(weekFolder),
now,
debug,
})
}
const JSONFilePath = path.join(dataFolder, weekFolder, latestJSONFile)
debug?.(`Latest week file`, JSONFilePath)
const rawData = await readFile(JSONFilePath)
const JSONdata = JSON.parse(rawData.toString())
if (JSONdata.timestamp === undefined) {
// JSON is of invalid format, start today at midnight
return startOfDay(now ?? new Date()).getTime()
}
return JSONdata.timestamp
}