diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2022-10-09 18:33:20 +0200 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2022-10-09 18:33:20 +0200 |
| commit | a57845f08a6eb9bc32c2173f15472e0c29722cf6 (patch) | |
| tree | 68724e66a4caadf78c464a9cd93f62c8aaed7401 /code/app/src/lib/models/work | |
| parent | b7e39b59fd0fc7b5610ebff29035bf622079e0d8 (diff) | |
| download | greatoffice-a57845f08a6eb9bc32c2173f15472e0c29722cf6.tar.xz greatoffice-a57845f08a6eb9bc32c2173f15472e0c29722cf6.zip | |
refactor: Restructure and create new models
Diffstat (limited to 'code/app/src/lib/models/work')
| -rw-r--r-- | code/app/src/lib/models/work/WorkCategory.ts | 5 | ||||
| -rw-r--r-- | code/app/src/lib/models/work/WorkEntry.ts | 13 | ||||
| -rw-r--r-- | code/app/src/lib/models/work/WorkEntryQueryResponse.ts | 27 | ||||
| -rw-r--r-- | code/app/src/lib/models/work/WorkLabel.ts | 5 | ||||
| -rw-r--r-- | code/app/src/lib/models/work/WorkQuery.ts | 30 |
5 files changed, 80 insertions, 0 deletions
diff --git a/code/app/src/lib/models/work/WorkCategory.ts b/code/app/src/lib/models/work/WorkCategory.ts new file mode 100644 index 0000000..7dd85d5 --- /dev/null +++ b/code/app/src/lib/models/work/WorkCategory.ts @@ -0,0 +1,5 @@ +export type WorkCategory = { + id: string, + name: string, + color: string +} diff --git a/code/app/src/lib/models/work/WorkEntry.ts b/code/app/src/lib/models/work/WorkEntry.ts new file mode 100644 index 0000000..2108b88 --- /dev/null +++ b/code/app/src/lib/models/work/WorkEntry.ts @@ -0,0 +1,13 @@ +import type { WorkLabel } from "./WorkLabel"; +import type { WorkCategory } from "./WorkCategory"; +import type { Project } from "../projects/Project"; + +export type WorkEntry = { + id: string, + start: string, + stop: string, + description: string, + labels?: Array<WorkLabel>, + category?: WorkCategory, + project?: Project +} diff --git a/code/app/src/lib/models/work/WorkEntryQueryResponse.ts b/code/app/src/lib/models/work/WorkEntryQueryResponse.ts new file mode 100644 index 0000000..a6974f1 --- /dev/null +++ b/code/app/src/lib/models/work/WorkEntryQueryResponse.ts @@ -0,0 +1,27 @@ +import type { WorkCategory } from "./WorkCategory"; +import type { WorkLabel } from "./WorkLabel"; +import type { Temporal } from "temporal-polyfill"; + +export interface WorkEntryQueryResponse { + duration: WorkEntryQueryDuration, + categories?: Array<WorkCategory>, + labels?: Array<WorkLabel>, + dateRange?: WorkEntryQueryDateRange, + specificDate?: Temporal.PlainDateTime + page: number, + pageSize: number +} + +export interface WorkEntryQueryDateRange { + from: Temporal.PlainDateTime, + to: Temporal.PlainDateTime +} + +export enum WorkEntryQueryDuration { + TODAY = 0, + THIS_WEEK = 1, + THIS_MONTH = 2, + THIS_YEAR = 3, + SPECIFIC_DATE = 4, + DATE_RANGE = 5, +} diff --git a/code/app/src/lib/models/work/WorkLabel.ts b/code/app/src/lib/models/work/WorkLabel.ts new file mode 100644 index 0000000..f7e2795 --- /dev/null +++ b/code/app/src/lib/models/work/WorkLabel.ts @@ -0,0 +1,5 @@ +export interface WorkLabel { + id?: string, + name?: string, + color?: string +} diff --git a/code/app/src/lib/models/work/WorkQuery.ts b/code/app/src/lib/models/work/WorkQuery.ts new file mode 100644 index 0000000..bccc589 --- /dev/null +++ b/code/app/src/lib/models/work/WorkQuery.ts @@ -0,0 +1,30 @@ +import type { HourEntry } from "./WorkEntry"; +import type { IValidationResult } from "../internal/IValidationResult"; +import ValidationResult from "../internal/IValidationResult"; + +export interface IWorkQuery { + results: Array<HourEntry>, + page: number, + pageSize: number, + totalRecords: number, + totalPageCount: number, + is_valid: Function +} + +export class WorkQuery implements IWorkQuery { + results: HourEntry[]; + page: number; + pageSize: number; + totalRecords: number; + totalPageCount: number; + + is_valid(): IValidationResult { + const result = new ValidationResult(); + if (this.page < 0) { + result.add_error("page", { + title: "Page cannot be less than zero", + }) + } + return result; + } +} |
