aboutsummaryrefslogtreecommitdiffstats
path: root/code/app/src/lib/models/work
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-10-09 18:33:20 +0200
committerivarlovlie <git@ivarlovlie.no>2022-10-09 18:33:20 +0200
commita57845f08a6eb9bc32c2173f15472e0c29722cf6 (patch)
tree68724e66a4caadf78c464a9cd93f62c8aaed7401 /code/app/src/lib/models/work
parentb7e39b59fd0fc7b5610ebff29035bf622079e0d8 (diff)
downloadgreatoffice-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.ts5
-rw-r--r--code/app/src/lib/models/work/WorkEntry.ts13
-rw-r--r--code/app/src/lib/models/work/WorkEntryQueryResponse.ts27
-rw-r--r--code/app/src/lib/models/work/WorkLabel.ts5
-rw-r--r--code/app/src/lib/models/work/WorkQuery.ts30
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;
+ }
+}