From a57845f08a6eb9bc32c2173f15472e0c29722cf6 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Mon, 10 Oct 2022 00:33:20 +0800 Subject: refactor: Restructure and create new models --- code/app/src/lib/models/CreateAccountPayload.ts | 4 --- code/app/src/lib/models/ErrorResult.ts | 4 --- code/app/src/lib/models/IInternalFetchRequest.ts | 6 ----- code/app/src/lib/models/IInternalFetchResponse.ts | 6 ----- code/app/src/lib/models/ISession.ts | 8 ------ code/app/src/lib/models/IValidationResult.ts | 31 ---------------------- code/app/src/lib/models/LoginPayload.ts | 5 ---- code/app/src/lib/models/TimeCategoryDto.ts | 9 ------- code/app/src/lib/models/TimeEntryDto.ts | 13 --------- code/app/src/lib/models/TimeEntryQuery.ts | 27 ------------------- code/app/src/lib/models/TimeLabelDto.ts | 8 ------ code/app/src/lib/models/TimeQueryDto.ts | 29 -------------------- code/app/src/lib/models/UnwrappedEntryDateTime.ts | 9 ------- code/app/src/lib/models/UpdateProfilePayload.ts | 4 --- code/app/src/lib/models/base/Customer.ts | 21 +++++++++++++++ code/app/src/lib/models/base/CustomerContact.ts | 8 ++++++ code/app/src/lib/models/base/CustomerEvent.ts | 6 +++++ code/app/src/lib/models/base/Tenant.ts | 8 ++++++ code/app/src/lib/models/base/User.ts | 13 +++++++++ code/app/src/lib/models/base/UserRole.ts | 5 ++++ .../lib/models/internal/CreateAccountPayload.ts | 4 +++ code/app/src/lib/models/internal/ErrorResult.ts | 4 +++ .../lib/models/internal/IInternalFetchRequest.ts | 6 +++++ .../lib/models/internal/IInternalFetchResponse.ts | 6 +++++ code/app/src/lib/models/internal/ISession.ts | 8 ++++++ .../src/lib/models/internal/IValidationResult.ts | 31 ++++++++++++++++++++++ code/app/src/lib/models/internal/LoginPayload.ts | 5 ++++ .../lib/models/internal/UnwrappedEntryDateTime.ts | 9 +++++++ .../lib/models/internal/UpdateProfilePayload.ts | 4 +++ code/app/src/lib/models/projects/Project.ts | 13 +++++++++ code/app/src/lib/models/projects/ProjectLabel.ts | 5 ++++ code/app/src/lib/models/projects/ProjectMember.ts | 10 +++++++ code/app/src/lib/models/projects/ProjectMeta.ts | 7 +++++ code/app/src/lib/models/projects/ProjectRole.ts | 7 +++++ code/app/src/lib/models/projects/ProjectStatus.ts | 5 ++++ code/app/src/lib/models/work/WorkCategory.ts | 5 ++++ code/app/src/lib/models/work/WorkEntry.ts | 13 +++++++++ .../src/lib/models/work/WorkEntryQueryResponse.ts | 27 +++++++++++++++++++ code/app/src/lib/models/work/WorkLabel.ts | 5 ++++ code/app/src/lib/models/work/WorkQuery.ts | 30 +++++++++++++++++++++ 40 files changed, 265 insertions(+), 163 deletions(-) delete mode 100644 code/app/src/lib/models/CreateAccountPayload.ts delete mode 100644 code/app/src/lib/models/ErrorResult.ts delete mode 100644 code/app/src/lib/models/IInternalFetchRequest.ts delete mode 100644 code/app/src/lib/models/IInternalFetchResponse.ts delete mode 100644 code/app/src/lib/models/ISession.ts delete mode 100644 code/app/src/lib/models/IValidationResult.ts delete mode 100644 code/app/src/lib/models/LoginPayload.ts delete mode 100644 code/app/src/lib/models/TimeCategoryDto.ts delete mode 100644 code/app/src/lib/models/TimeEntryDto.ts delete mode 100644 code/app/src/lib/models/TimeEntryQuery.ts delete mode 100644 code/app/src/lib/models/TimeLabelDto.ts delete mode 100644 code/app/src/lib/models/TimeQueryDto.ts delete mode 100644 code/app/src/lib/models/UnwrappedEntryDateTime.ts delete mode 100644 code/app/src/lib/models/UpdateProfilePayload.ts create mode 100644 code/app/src/lib/models/base/Customer.ts create mode 100644 code/app/src/lib/models/base/CustomerContact.ts create mode 100644 code/app/src/lib/models/base/CustomerEvent.ts create mode 100644 code/app/src/lib/models/base/Tenant.ts create mode 100644 code/app/src/lib/models/base/User.ts create mode 100644 code/app/src/lib/models/base/UserRole.ts create mode 100644 code/app/src/lib/models/internal/CreateAccountPayload.ts create mode 100644 code/app/src/lib/models/internal/ErrorResult.ts create mode 100644 code/app/src/lib/models/internal/IInternalFetchRequest.ts create mode 100644 code/app/src/lib/models/internal/IInternalFetchResponse.ts create mode 100644 code/app/src/lib/models/internal/ISession.ts create mode 100644 code/app/src/lib/models/internal/IValidationResult.ts create mode 100644 code/app/src/lib/models/internal/LoginPayload.ts create mode 100644 code/app/src/lib/models/internal/UnwrappedEntryDateTime.ts create mode 100644 code/app/src/lib/models/internal/UpdateProfilePayload.ts create mode 100644 code/app/src/lib/models/projects/Project.ts create mode 100644 code/app/src/lib/models/projects/ProjectLabel.ts create mode 100644 code/app/src/lib/models/projects/ProjectMember.ts create mode 100644 code/app/src/lib/models/projects/ProjectMeta.ts create mode 100644 code/app/src/lib/models/projects/ProjectRole.ts create mode 100644 code/app/src/lib/models/projects/ProjectStatus.ts create mode 100644 code/app/src/lib/models/work/WorkCategory.ts create mode 100644 code/app/src/lib/models/work/WorkEntry.ts create mode 100644 code/app/src/lib/models/work/WorkEntryQueryResponse.ts create mode 100644 code/app/src/lib/models/work/WorkLabel.ts create mode 100644 code/app/src/lib/models/work/WorkQuery.ts diff --git a/code/app/src/lib/models/CreateAccountPayload.ts b/code/app/src/lib/models/CreateAccountPayload.ts deleted file mode 100644 index d116308..0000000 --- a/code/app/src/lib/models/CreateAccountPayload.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface CreateAccountPayload { - username: string, - password: string -} diff --git a/code/app/src/lib/models/ErrorResult.ts b/code/app/src/lib/models/ErrorResult.ts deleted file mode 100644 index 7c70017..0000000 --- a/code/app/src/lib/models/ErrorResult.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface ErrorResult { - title: string, - text: string -} diff --git a/code/app/src/lib/models/IInternalFetchRequest.ts b/code/app/src/lib/models/IInternalFetchRequest.ts deleted file mode 100644 index 68505e2..0000000 --- a/code/app/src/lib/models/IInternalFetchRequest.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface IInternalFetchRequest { - url: string, - init?: RequestInit, - timeout?: number - retry_count?: number -} diff --git a/code/app/src/lib/models/IInternalFetchResponse.ts b/code/app/src/lib/models/IInternalFetchResponse.ts deleted file mode 100644 index 6c91b35..0000000 --- a/code/app/src/lib/models/IInternalFetchResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface IInternalFetchResponse { - ok: boolean, - status: number, - data: any, - http_response: Response -} diff --git a/code/app/src/lib/models/ISession.ts b/code/app/src/lib/models/ISession.ts deleted file mode 100644 index 7587145..0000000 --- a/code/app/src/lib/models/ISession.ts +++ /dev/null @@ -1,8 +0,0 @@ -export interface ISession { - profile: { - username: string, - displayName: string, - id: string, - }, - lastChecked: number, -} \ No newline at end of file diff --git a/code/app/src/lib/models/IValidationResult.ts b/code/app/src/lib/models/IValidationResult.ts deleted file mode 100644 index 9a21b13..0000000 --- a/code/app/src/lib/models/IValidationResult.ts +++ /dev/null @@ -1,31 +0,0 @@ -export interface IValidationResult { - errors: Array, - has_errors: Function, - add_error: Function, - remove_error: Function, -} - -export interface IValidationError { - _id?: string, - title: string, - text?: string -} - -export default class ValidationResult implements IValidationResult { - errors: IValidationError[] - has_errors(): boolean { - return this.errors?.length > 0; - } - add_error(prop: string, error: IValidationError): void { - if (!this.errors) this.errors = []; - error._id = prop; - this.errors.push(error); - } - remove_error(property: string): void { - const new_errors = []; - for (const error of this.errors) { - if (error._id != property) new_errors.push(error) - } - this.errors = new_errors; - } -} diff --git a/code/app/src/lib/models/LoginPayload.ts b/code/app/src/lib/models/LoginPayload.ts deleted file mode 100644 index beb96cf..0000000 --- a/code/app/src/lib/models/LoginPayload.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface LoginPayload { - username: string, - password: string, - persist: boolean -} diff --git a/code/app/src/lib/models/TimeCategoryDto.ts b/code/app/src/lib/models/TimeCategoryDto.ts deleted file mode 100644 index fcdb7ea..0000000 --- a/code/app/src/lib/models/TimeCategoryDto.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Temporal } from "temporal-polyfill"; - -export interface TimeCategoryDto { - selected?: boolean; - id?: string, - modified_at?: Temporal.PlainDate, - name?: string, - color?: string -} diff --git a/code/app/src/lib/models/TimeEntryDto.ts b/code/app/src/lib/models/TimeEntryDto.ts deleted file mode 100644 index 571c52e..0000000 --- a/code/app/src/lib/models/TimeEntryDto.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { TimeLabelDto } from "./TimeLabelDto"; -import type { TimeCategoryDto } from "./TimeCategoryDto"; -import { Temporal } from "temporal-polyfill"; - -export interface TimeEntryDto { - id: string, - modified_at?: Temporal.PlainDate, - start: string, - stop: string, - description: string, - labels?: Array, - category: TimeCategoryDto, -} diff --git a/code/app/src/lib/models/TimeEntryQuery.ts b/code/app/src/lib/models/TimeEntryQuery.ts deleted file mode 100644 index d983d1a..0000000 --- a/code/app/src/lib/models/TimeEntryQuery.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { TimeCategoryDto } from "./TimeCategoryDto"; -import type { TimeLabelDto } from "./TimeLabelDto"; -import type { Temporal } from "temporal-polyfill"; - -export interface TimeEntryQuery { - duration: TimeEntryQueryDuration, - categories?: Array, - labels?: Array, - dateRange?: TimeEntryQueryDateRange, - specificDate?: Temporal.PlainDateTime - page: number, - pageSize: number -} - -export interface TimeEntryQueryDateRange { - from: Temporal.PlainDateTime, - to: Temporal.PlainDateTime -} - -export enum TimeEntryQueryDuration { - 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/TimeLabelDto.ts b/code/app/src/lib/models/TimeLabelDto.ts deleted file mode 100644 index 7183bcf..0000000 --- a/code/app/src/lib/models/TimeLabelDto.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Temporal } from "temporal-polyfill"; - -export interface TimeLabelDto { - id?: string, - modified_at?: Temporal.PlainDate, - name?: string, - color?: string -} diff --git a/code/app/src/lib/models/TimeQueryDto.ts b/code/app/src/lib/models/TimeQueryDto.ts deleted file mode 100644 index 607c51e..0000000 --- a/code/app/src/lib/models/TimeQueryDto.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { TimeEntryDto } from "./TimeEntryDto"; -import ValidationResult, { IValidationResult } from "./IValidationResult"; - -export interface ITimeQueryDto { - results: Array, - page: number, - pageSize: number, - totalRecords: number, - totalPageCount: number, - is_valid: Function -} - -export class TimeQueryDto implements ITimeQueryDto { - results: TimeEntryDto[]; - 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; - } -} diff --git a/code/app/src/lib/models/UnwrappedEntryDateTime.ts b/code/app/src/lib/models/UnwrappedEntryDateTime.ts deleted file mode 100644 index d614f91..0000000 --- a/code/app/src/lib/models/UnwrappedEntryDateTime.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Temporal } from "temporal-polyfill"; - -export interface UnwrappedEntryDateTime { - start_date: Temporal.PlainDate, - stop_date: Temporal.PlainDate, - start_time: Temporal.PlainTime, - stop_time: Temporal.PlainTime, - duration: Temporal.Duration, -} diff --git a/code/app/src/lib/models/UpdateProfilePayload.ts b/code/app/src/lib/models/UpdateProfilePayload.ts deleted file mode 100644 index d2983ff..0000000 --- a/code/app/src/lib/models/UpdateProfilePayload.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface UpdateProfilePayload { - username?: string, - password?: string, -} diff --git a/code/app/src/lib/models/base/Customer.ts b/code/app/src/lib/models/base/Customer.ts new file mode 100644 index 0000000..e44ebb6 --- /dev/null +++ b/code/app/src/lib/models/base/Customer.ts @@ -0,0 +1,21 @@ +import type { CustomerContact } from "./CustomerContact" +import type { User } from "./User" + +export type Customer = { + /** + * Guid id for customer + */ + id: string, + /** + * The name of the company + */ + name: string, + /** + * Responsible contact in the current tenant + */ + tenantContact: User, + /** + * The customers main contact + */ + mainContact: CustomerContact, +} \ No newline at end of file diff --git a/code/app/src/lib/models/base/CustomerContact.ts b/code/app/src/lib/models/base/CustomerContact.ts new file mode 100644 index 0000000..e8abea5 --- /dev/null +++ b/code/app/src/lib/models/base/CustomerContact.ts @@ -0,0 +1,8 @@ +export type CustomerContact = { + firstName: string, + lastname: string, + email: string, + phone: string, + workTitle: string, + note: string +} \ No newline at end of file diff --git a/code/app/src/lib/models/base/CustomerEvent.ts b/code/app/src/lib/models/base/CustomerEvent.ts new file mode 100644 index 0000000..af86511 --- /dev/null +++ b/code/app/src/lib/models/base/CustomerEvent.ts @@ -0,0 +1,6 @@ +export type CustomerEvent = { + /** + * A descriptive name for the occured event + */ + name: string, +} \ No newline at end of file diff --git a/code/app/src/lib/models/base/Tenant.ts b/code/app/src/lib/models/base/Tenant.ts new file mode 100644 index 0000000..983122b --- /dev/null +++ b/code/app/src/lib/models/base/Tenant.ts @@ -0,0 +1,8 @@ +import type { User } from "./User" + +export type Tenant = { + id: string, + name: string, + description: string, + masterUser: User, +} \ No newline at end of file diff --git a/code/app/src/lib/models/base/User.ts b/code/app/src/lib/models/base/User.ts new file mode 100644 index 0000000..371c38e --- /dev/null +++ b/code/app/src/lib/models/base/User.ts @@ -0,0 +1,13 @@ +import type { UserRole } from "./UserRole" + +export type User = { + /** + * Guid id for user + */ + id: string, + firstName: string, + lastName: string, + role: UserRole, + username: string, + email: string +} \ No newline at end of file diff --git a/code/app/src/lib/models/base/UserRole.ts b/code/app/src/lib/models/base/UserRole.ts new file mode 100644 index 0000000..ec32852 --- /dev/null +++ b/code/app/src/lib/models/base/UserRole.ts @@ -0,0 +1,5 @@ +export enum UserRole { + REGULAR = "reg", + ADMINISTRATOR = "adm", + OWNER = "own" +} \ No newline at end of file diff --git a/code/app/src/lib/models/internal/CreateAccountPayload.ts b/code/app/src/lib/models/internal/CreateAccountPayload.ts new file mode 100644 index 0000000..d116308 --- /dev/null +++ b/code/app/src/lib/models/internal/CreateAccountPayload.ts @@ -0,0 +1,4 @@ +export interface CreateAccountPayload { + username: string, + password: string +} diff --git a/code/app/src/lib/models/internal/ErrorResult.ts b/code/app/src/lib/models/internal/ErrorResult.ts new file mode 100644 index 0000000..7c70017 --- /dev/null +++ b/code/app/src/lib/models/internal/ErrorResult.ts @@ -0,0 +1,4 @@ +export interface ErrorResult { + title: string, + text: string +} diff --git a/code/app/src/lib/models/internal/IInternalFetchRequest.ts b/code/app/src/lib/models/internal/IInternalFetchRequest.ts new file mode 100644 index 0000000..68505e2 --- /dev/null +++ b/code/app/src/lib/models/internal/IInternalFetchRequest.ts @@ -0,0 +1,6 @@ +export interface IInternalFetchRequest { + url: string, + init?: RequestInit, + timeout?: number + retry_count?: number +} diff --git a/code/app/src/lib/models/internal/IInternalFetchResponse.ts b/code/app/src/lib/models/internal/IInternalFetchResponse.ts new file mode 100644 index 0000000..6c91b35 --- /dev/null +++ b/code/app/src/lib/models/internal/IInternalFetchResponse.ts @@ -0,0 +1,6 @@ +export interface IInternalFetchResponse { + ok: boolean, + status: number, + data: any, + http_response: Response +} diff --git a/code/app/src/lib/models/internal/ISession.ts b/code/app/src/lib/models/internal/ISession.ts new file mode 100644 index 0000000..7587145 --- /dev/null +++ b/code/app/src/lib/models/internal/ISession.ts @@ -0,0 +1,8 @@ +export interface ISession { + profile: { + username: string, + displayName: string, + id: string, + }, + lastChecked: number, +} \ No newline at end of file diff --git a/code/app/src/lib/models/internal/IValidationResult.ts b/code/app/src/lib/models/internal/IValidationResult.ts new file mode 100644 index 0000000..9a21b13 --- /dev/null +++ b/code/app/src/lib/models/internal/IValidationResult.ts @@ -0,0 +1,31 @@ +export interface IValidationResult { + errors: Array, + has_errors: Function, + add_error: Function, + remove_error: Function, +} + +export interface IValidationError { + _id?: string, + title: string, + text?: string +} + +export default class ValidationResult implements IValidationResult { + errors: IValidationError[] + has_errors(): boolean { + return this.errors?.length > 0; + } + add_error(prop: string, error: IValidationError): void { + if (!this.errors) this.errors = []; + error._id = prop; + this.errors.push(error); + } + remove_error(property: string): void { + const new_errors = []; + for (const error of this.errors) { + if (error._id != property) new_errors.push(error) + } + this.errors = new_errors; + } +} diff --git a/code/app/src/lib/models/internal/LoginPayload.ts b/code/app/src/lib/models/internal/LoginPayload.ts new file mode 100644 index 0000000..beb96cf --- /dev/null +++ b/code/app/src/lib/models/internal/LoginPayload.ts @@ -0,0 +1,5 @@ +export interface LoginPayload { + username: string, + password: string, + persist: boolean +} diff --git a/code/app/src/lib/models/internal/UnwrappedEntryDateTime.ts b/code/app/src/lib/models/internal/UnwrappedEntryDateTime.ts new file mode 100644 index 0000000..da71bc9 --- /dev/null +++ b/code/app/src/lib/models/internal/UnwrappedEntryDateTime.ts @@ -0,0 +1,9 @@ +import type { Temporal } from "temporal-polyfill"; + +export interface UnwrappedEntryDateTime { + start_date: Temporal.PlainDate, + stop_date: Temporal.PlainDate, + start_time: Temporal.PlainTime, + stop_time: Temporal.PlainTime, + duration: Temporal.Duration, +} diff --git a/code/app/src/lib/models/internal/UpdateProfilePayload.ts b/code/app/src/lib/models/internal/UpdateProfilePayload.ts new file mode 100644 index 0000000..d2983ff --- /dev/null +++ b/code/app/src/lib/models/internal/UpdateProfilePayload.ts @@ -0,0 +1,4 @@ +export interface UpdateProfilePayload { + username?: string, + password?: string, +} diff --git a/code/app/src/lib/models/projects/Project.ts b/code/app/src/lib/models/projects/Project.ts new file mode 100644 index 0000000..f265e67 --- /dev/null +++ b/code/app/src/lib/models/projects/Project.ts @@ -0,0 +1,13 @@ +import type { Temporal } from "temporal-polyfill" +import type { ProjectMember } from "./ProjectMember" +import type { ProjectStatus } from "./ProjectStatus" + +export type Project = { + id: string, + name: string, + description?: string, + start: Temporal.PlainDate, + stop?: Temporal.PlainDate, + members: Array, + status: ProjectStatus +} \ No newline at end of file diff --git a/code/app/src/lib/models/projects/ProjectLabel.ts b/code/app/src/lib/models/projects/ProjectLabel.ts new file mode 100644 index 0000000..59aa9d5 --- /dev/null +++ b/code/app/src/lib/models/projects/ProjectLabel.ts @@ -0,0 +1,5 @@ +export type ProjectLabel = { + id: string, + name: string, + color: string +} \ No newline at end of file diff --git a/code/app/src/lib/models/projects/ProjectMember.ts b/code/app/src/lib/models/projects/ProjectMember.ts new file mode 100644 index 0000000..de348ef --- /dev/null +++ b/code/app/src/lib/models/projects/ProjectMember.ts @@ -0,0 +1,10 @@ +import type { ProjectRole } from "./ProjectRole" + +export type ProjectMember = { + id: string, + name: string, + role: ProjectRole, + email: string, + userId?: string, + customerId?: string +} \ No newline at end of file diff --git a/code/app/src/lib/models/projects/ProjectMeta.ts b/code/app/src/lib/models/projects/ProjectMeta.ts new file mode 100644 index 0000000..c583b47 --- /dev/null +++ b/code/app/src/lib/models/projects/ProjectMeta.ts @@ -0,0 +1,7 @@ +import type { Temporal } from "temporal-polyfill" +import type { User } from "../base/User" + +export type ProjectMeta = { + created: Temporal.PlainDateTime, + createdBy: User, +} \ No newline at end of file diff --git a/code/app/src/lib/models/projects/ProjectRole.ts b/code/app/src/lib/models/projects/ProjectRole.ts new file mode 100644 index 0000000..0fa2347 --- /dev/null +++ b/code/app/src/lib/models/projects/ProjectRole.ts @@ -0,0 +1,7 @@ +export enum ProjectRole { + EXTERNAL = "ext", + INTERNAL = "int", + RESOURCE = "res", + MANAGER = "man", + OWNER = "own" +} \ No newline at end of file diff --git a/code/app/src/lib/models/projects/ProjectStatus.ts b/code/app/src/lib/models/projects/ProjectStatus.ts new file mode 100644 index 0000000..2df4b88 --- /dev/null +++ b/code/app/src/lib/models/projects/ProjectStatus.ts @@ -0,0 +1,5 @@ +export enum ProjectStatus { + ACTIVE = "act", + EXPIRED = "exp", + IDLE = "idl" +} \ No newline at end of file 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, + 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, + labels?: Array, + 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, + 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; + } +} -- cgit v1.3