Update reads to toggl database
This commit is contained in:
parent
50730a2b09
commit
1a14485c57
75
src/data/db.d.ts
vendored
75
src/data/db.d.ts
vendored
@ -1,8 +1,8 @@
|
||||
import type {ColumnType, JSONColumnType} from "kysely";
|
||||
import type {ColumnType} from "kysely";
|
||||
|
||||
export type Generated<T> = T extends ColumnType<infer S, infer I, infer U>
|
||||
? ColumnType<S, I | undefined, U>
|
||||
: ColumnType<T, T | undefined, T>;
|
||||
? ColumnType<S, I | undefined, U>
|
||||
: ColumnType<T, T | undefined, T>;
|
||||
|
||||
export type Int8 = ColumnType<string, bigint | number | string, bigint | number | string>;
|
||||
|
||||
@ -11,7 +11,7 @@ export type Json = ColumnType<JsonValue, string, string>;
|
||||
export type JsonArray = JsonValue[];
|
||||
|
||||
export type JsonObject = {
|
||||
[K in string]?: JsonValue;
|
||||
[K in string]?: JsonValue;
|
||||
};
|
||||
|
||||
export type JsonPrimitive = boolean | number | string | null;
|
||||
@ -21,50 +21,49 @@ export type JsonValue = JsonArray | JsonObject | JsonPrimitive;
|
||||
export type Timestamp = ColumnType<Date, Date | string, Date | string>;
|
||||
|
||||
export interface Client {
|
||||
archived: boolean;
|
||||
at: Timestamp;
|
||||
id: number;
|
||||
name: string;
|
||||
server_deleted_at: Timestamp | null;
|
||||
workspace_id: number;
|
||||
archived: boolean;
|
||||
at: Timestamp;
|
||||
id: number;
|
||||
name: string;
|
||||
server_deleted_at: Timestamp | null;
|
||||
workspace_id: number;
|
||||
}
|
||||
|
||||
export interface Project {
|
||||
active: boolean;
|
||||
client_id: number | null;
|
||||
id: Generated<number>;
|
||||
name: string;
|
||||
raw_json: JSONColumnType<{
|
||||
color: string;
|
||||
id: number;
|
||||
name: string;
|
||||
}>;
|
||||
toggl_id: Int8;
|
||||
workspace_id: Int8;
|
||||
active: boolean;
|
||||
client_id: number | null;
|
||||
color: string;
|
||||
id: Generated<number>;
|
||||
name: string;
|
||||
raw_json: Json;
|
||||
server_created_at: Timestamp;
|
||||
server_deleted_at: Timestamp | null;
|
||||
server_updated_at: Timestamp;
|
||||
toggl_id: Int8;
|
||||
workspace_id: Int8;
|
||||
}
|
||||
|
||||
export interface TimeEntry {
|
||||
description: string;
|
||||
id: Generated<number>;
|
||||
project_id: Int8 | null;
|
||||
raw_json: JSONColumnType<{
|
||||
start: string;
|
||||
end: string;
|
||||
seconds: number;
|
||||
}>;
|
||||
start: Timestamp;
|
||||
stop: Timestamp;
|
||||
toggl_id: Int8;
|
||||
description: string;
|
||||
id: Generated<number>;
|
||||
project_id: Int8 | null;
|
||||
raw_json: Json;
|
||||
server_deleted_at: Timestamp | null;
|
||||
server_updated_at: Timestamp;
|
||||
start: Timestamp;
|
||||
stop: Timestamp;
|
||||
tags: Generated<Json>;
|
||||
toggl_id: Int8;
|
||||
}
|
||||
|
||||
export interface TogglPortalSeaqlMigrations {
|
||||
applied_at: Int8;
|
||||
version: string;
|
||||
applied_at: Int8;
|
||||
version: string;
|
||||
}
|
||||
|
||||
export interface DB {
|
||||
client: Client;
|
||||
project: Project;
|
||||
time_entry: TimeEntry;
|
||||
toggl_portal_seaql_migrations: TogglPortalSeaqlMigrations;
|
||||
client: Client;
|
||||
project: Project;
|
||||
time_entry: TimeEntry;
|
||||
toggl_portal_seaql_migrations: TogglPortalSeaqlMigrations;
|
||||
}
|
||||
|
||||
@ -52,12 +52,12 @@ export async function getData(config: OverviewConfig): Promise<Data> {
|
||||
let projectIds = config.subjects.map((subject) => subject.projectId.toString());
|
||||
|
||||
const projects = await db.selectFrom('project')
|
||||
.select('raw_json')
|
||||
.where('project.toggl_id', 'in', projectIds)
|
||||
.execute();
|
||||
.select(['toggl_id', 'name', 'color'])
|
||||
.where('toggl_id', 'in', projectIds)
|
||||
.execute()
|
||||
|
||||
const timeEntries = await db.selectFrom('time_entry')
|
||||
.select(['project_id', 'raw_json'])
|
||||
.select(['project_id', 'start', 'stop'])
|
||||
.where('project_id', 'in', projectIds)
|
||||
.where('start', '>', dFns.parseISO(config.timePeriod.start))
|
||||
.where('start', '<', dFns.parseISO(config.timePeriod.end))
|
||||
@ -65,16 +65,16 @@ export async function getData(config: OverviewConfig): Promise<Data> {
|
||||
|
||||
return {
|
||||
projects: projects.map((project) => ({
|
||||
projectId: project.raw_json.id,
|
||||
name: project.raw_json.name,
|
||||
color: project.raw_json.color,
|
||||
projectId: parseInt(project.toggl_id),
|
||||
name: project.name,
|
||||
color: project.color,
|
||||
})),
|
||||
|
||||
timeEntries: timeEntries.map((timeEntry) => ({
|
||||
projectId: parseInt(timeEntry.project_id!),
|
||||
start: timeEntry.raw_json.start,
|
||||
end: timeEntry.raw_json.end,
|
||||
duration: timeEntry.raw_json.seconds,
|
||||
start: dFns.formatISO(timeEntry.start),
|
||||
end: dFns.formatISO(timeEntry.stop),
|
||||
duration: dFns.differenceInSeconds(timeEntry.stop, timeEntry.start)
|
||||
})),
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user