Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/core/models/ResourceStatesTable.ts
1028 views
1
import { Database as SqliteDatabase } from 'better-sqlite3';
2
import SqliteTable from '@secret-agent/commons/SqliteTable';
3
import ResourceState from '@secret-agent/mitm/interfaces/ResourceState';
4
5
const resourceStates = Object.keys(ResourceState).filter(
6
x => ResourceState[x] === x,
7
) as ResourceStates[];
8
9
export default class ResourceStatesTable extends SqliteTable<IResourceStatesRecord> {
10
constructor(readonly db: SqliteDatabase) {
11
super(
12
db,
13
'ResourceStates',
14
[
15
// @ts-ignore
16
['resourceId', 'INTEGER', 'NOT NULL PRIMARY KEY'],
17
// @ts-ignore
18
...resourceStates.map(x => [x, 'INTEGER']),
19
],
20
true,
21
);
22
}
23
24
public insert(resourceId: number, stateChanges: Map<ResourceState, Date>) {
25
const states = resourceStates.map(x => stateChanges.get(ResourceState[x])?.getTime());
26
return this.queuePendingInsert([resourceId, ...states]);
27
}
28
}
29
30
type ResourceStates = keyof typeof ResourceState & string;
31
export interface IResourceStatesRecord extends Record<ResourceStates, number> {
32
resourceId: number;
33
}
34
35