@nekutima/biome-sdk 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -0
- package/dist/auth/auth.service.d.ts +90 -0
- package/dist/auth/auth.service.d.ts.map +1 -0
- package/dist/auth/auth.service.js +166 -0
- package/dist/auth/auth.service.js.map +1 -0
- package/dist/auth/types.d.ts +19 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +3 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/core/configuration.d.ts +26 -0
- package/dist/core/configuration.d.ts.map +1 -0
- package/dist/core/configuration.js +3 -0
- package/dist/core/configuration.js.map +1 -0
- package/dist/core/error-handler.d.ts +24 -0
- package/dist/core/error-handler.d.ts.map +1 -0
- package/dist/core/error-handler.js +76 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/core/http-client.d.ts +43 -0
- package/dist/core/http-client.d.ts.map +1 -0
- package/dist/core/http-client.js +97 -0
- package/dist/core/http-client.js.map +1 -0
- package/dist/core/state-manager.d.ts +16 -0
- package/dist/core/state-manager.d.ts.map +1 -0
- package/dist/core/state-manager.js +33 -0
- package/dist/core/state-manager.js.map +1 -0
- package/dist/files/file-upload.d.ts +60 -0
- package/dist/files/file-upload.d.ts.map +1 -0
- package/dist/files/file-upload.js +121 -0
- package/dist/files/file-upload.js.map +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +140 -0
- package/dist/index.js.map +1 -0
- package/dist/models/api-error.model.d.ts +31 -0
- package/dist/models/api-error.model.d.ts.map +1 -0
- package/dist/models/api-error.model.js +53 -0
- package/dist/models/api-error.model.js.map +1 -0
- package/dist/models/api-response.model.d.ts +51 -0
- package/dist/models/api-response.model.d.ts.map +1 -0
- package/dist/models/api-response.model.js +77 -0
- package/dist/models/api-response.model.js.map +1 -0
- package/dist/models/chat.model.d.ts +59 -0
- package/dist/models/chat.model.d.ts.map +1 -0
- package/dist/models/chat.model.js +3 -0
- package/dist/models/chat.model.js.map +1 -0
- package/dist/models/ecosystem.model.d.ts +16 -0
- package/dist/models/ecosystem.model.d.ts.map +1 -0
- package/dist/models/ecosystem.model.js +7 -0
- package/dist/models/ecosystem.model.js.map +1 -0
- package/dist/models/file.model.d.ts +67 -0
- package/dist/models/file.model.d.ts.map +1 -0
- package/dist/models/file.model.js +3 -0
- package/dist/models/file.model.js.map +1 -0
- package/dist/models/notification.model.d.ts +172 -0
- package/dist/models/notification.model.d.ts.map +1 -0
- package/dist/models/notification.model.js +77 -0
- package/dist/models/notification.model.js.map +1 -0
- package/dist/models/person.model.d.ts +94 -0
- package/dist/models/person.model.d.ts.map +1 -0
- package/dist/models/person.model.js +14 -0
- package/dist/models/person.model.js.map +1 -0
- package/dist/models/project.model.d.ts +62 -0
- package/dist/models/project.model.d.ts.map +1 -0
- package/dist/models/project.model.js +93 -0
- package/dist/models/project.model.js.map +1 -0
- package/dist/models/task-update.model.d.ts +28 -0
- package/dist/models/task-update.model.d.ts.map +1 -0
- package/dist/models/task-update.model.js +8 -0
- package/dist/models/task-update.model.js.map +1 -0
- package/dist/models/task-url.model.d.ts +16 -0
- package/dist/models/task-url.model.d.ts.map +1 -0
- package/dist/models/task-url.model.js +3 -0
- package/dist/models/task-url.model.js.map +1 -0
- package/dist/models/task.model.d.ts +120 -0
- package/dist/models/task.model.d.ts.map +1 -0
- package/dist/models/task.model.js +78 -0
- package/dist/models/task.model.js.map +1 -0
- package/dist/models/timezone.model.d.ts +19 -0
- package/dist/models/timezone.model.d.ts.map +1 -0
- package/dist/models/timezone.model.js +12 -0
- package/dist/models/timezone.model.js.map +1 -0
- package/dist/models/user.model.d.ts +101 -0
- package/dist/models/user.model.d.ts.map +1 -0
- package/dist/models/user.model.js +22 -0
- package/dist/models/user.model.js.map +1 -0
- package/dist/profiles/profile.service.d.ts +52 -0
- package/dist/profiles/profile.service.d.ts.map +1 -0
- package/dist/profiles/profile.service.js +119 -0
- package/dist/profiles/profile.service.js.map +1 -0
- package/dist/profiles/types.d.ts +1 -0
- package/dist/profiles/types.d.ts.map +1 -0
- package/dist/profiles/types.js +3 -0
- package/dist/profiles/types.js.map +1 -0
- package/dist/tasks/task-sorting.d.ts +51 -0
- package/dist/tasks/task-sorting.d.ts.map +1 -0
- package/dist/tasks/task-sorting.js +137 -0
- package/dist/tasks/task-sorting.js.map +1 -0
- package/dist/tasks/task.service.d.ts +134 -0
- package/dist/tasks/task.service.d.ts.map +1 -0
- package/dist/tasks/task.service.js +256 -0
- package/dist/tasks/task.service.js.map +1 -0
- package/dist/tasks/types.d.ts +2 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +3 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/types/actor.types.d.ts +101 -0
- package/dist/types/actor.types.d.ts.map +1 -0
- package/dist/types/actor.types.js +135 -0
- package/dist/types/actor.types.js.map +1 -0
- package/dist/types/api.types.d.ts +43 -0
- package/dist/types/api.types.d.ts.map +1 -0
- package/dist/types/api.types.js +6 -0
- package/dist/types/api.types.js.map +1 -0
- package/dist/types/common.types.d.ts +40 -0
- package/dist/types/common.types.d.ts.map +1 -0
- package/dist/types/common.types.js +6 -0
- package/dist/types/common.types.js.map +1 -0
- package/dist/types/state-machine.types.d.ts +102 -0
- package/dist/types/state-machine.types.d.ts.map +1 -0
- package/dist/types/state-machine.types.js +18 -0
- package/dist/types/state-machine.types.js.map +1 -0
- package/dist/users/user.service.d.ts +49 -0
- package/dist/users/user.service.d.ts.map +1 -0
- package/dist/users/user.service.js +119 -0
- package/dist/users/user.service.js.map +1 -0
- package/dist/utils/date.utils.d.ts +60 -0
- package/dist/utils/date.utils.d.ts.map +1 -0
- package/dist/utils/date.utils.js +125 -0
- package/dist/utils/date.utils.js.map +1 -0
- package/dist/utils/username-generator.d.ts +76 -0
- package/dist/utils/username-generator.d.ts.map +1 -0
- package/dist/utils/username-generator.js +177 -0
- package/dist/utils/username-generator.js.map +1 -0
- package/dist/utils/validation.utils.d.ts +57 -0
- package/dist/utils/validation.utils.d.ts.map +1 -0
- package/dist/utils/validation.utils.js +117 -0
- package/dist/utils/validation.utils.js.map +1 -0
- package/dist/validation/password-strength.d.ts +66 -0
- package/dist/validation/password-strength.d.ts.map +1 -0
- package/dist/validation/password-strength.js +192 -0
- package/dist/validation/password-strength.js.map +1 -0
- package/dist/validation/schemas.d.ts +69 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +94 -0
- package/dist/validation/schemas.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Person model for Biome platform
|
|
3
|
+
*
|
|
4
|
+
* ARCHITECTURE CLARIFICATION:
|
|
5
|
+
* - User = Someone/something that USES the system (can be a person OR another system like API, bot)
|
|
6
|
+
* - Person = Actual human with bio, profile, location (always human)
|
|
7
|
+
* - UserAsAPerson = Aggregate when User IS a Person (combines User + Person data)
|
|
8
|
+
* - Relationship: User ←1:0..1→ Person (not all users have person records)
|
|
9
|
+
*
|
|
10
|
+
* This model is shared between frontend and backend via the SDK.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Profile visibility type
|
|
14
|
+
*/
|
|
15
|
+
export type ProfileVisibility = 'public' | 'private';
|
|
16
|
+
/**
|
|
17
|
+
* Profile photo information from trunk_files table
|
|
18
|
+
*/
|
|
19
|
+
export interface ProfilePhoto {
|
|
20
|
+
id: number;
|
|
21
|
+
filename: string;
|
|
22
|
+
storagePath: string;
|
|
23
|
+
mimeType: string;
|
|
24
|
+
downloadUrl?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Person model - represents an actual human person with profile data
|
|
28
|
+
*
|
|
29
|
+
* Note: Not all Users are Persons!
|
|
30
|
+
* A User can be a person OR another system (API, bot, service account).
|
|
31
|
+
* Only human users have a corresponding Person record.
|
|
32
|
+
*
|
|
33
|
+
* Database table: person
|
|
34
|
+
* All fields correspond to actual database columns (camelCase)
|
|
35
|
+
*/
|
|
36
|
+
export interface Person {
|
|
37
|
+
id: number;
|
|
38
|
+
userId: number;
|
|
39
|
+
bio?: string;
|
|
40
|
+
location?: string;
|
|
41
|
+
website?: string;
|
|
42
|
+
profilePhotoFileId?: number | null;
|
|
43
|
+
profileVisibility: ProfileVisibility;
|
|
44
|
+
facebookUrl?: string;
|
|
45
|
+
instagramUrl?: string;
|
|
46
|
+
linkedinUrl?: string;
|
|
47
|
+
xingUrl?: string;
|
|
48
|
+
youtubeUrl?: string;
|
|
49
|
+
rumbleUrl?: string;
|
|
50
|
+
mastodonUrl?: string;
|
|
51
|
+
tildeverseUrl?: string;
|
|
52
|
+
twitchUrl?: string;
|
|
53
|
+
xUrl?: string;
|
|
54
|
+
createdAt: Date;
|
|
55
|
+
updatedAt: Date;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Aggregate model representing a User that IS a Person
|
|
59
|
+
*
|
|
60
|
+
* Use this when you need both User authentication data AND Person profile data.
|
|
61
|
+
* This is the common case for human users of the system.
|
|
62
|
+
*
|
|
63
|
+
* Replaces the old ProfileWithUser type with clearer semantic meaning.
|
|
64
|
+
*/
|
|
65
|
+
export interface UserAsAPerson {
|
|
66
|
+
id: number;
|
|
67
|
+
userId: number;
|
|
68
|
+
bio?: string;
|
|
69
|
+
location?: string;
|
|
70
|
+
website?: string;
|
|
71
|
+
profilePhotoFileId?: number | null;
|
|
72
|
+
profileVisibility: ProfileVisibility;
|
|
73
|
+
facebookUrl?: string;
|
|
74
|
+
instagramUrl?: string;
|
|
75
|
+
linkedinUrl?: string;
|
|
76
|
+
xingUrl?: string;
|
|
77
|
+
youtubeUrl?: string;
|
|
78
|
+
rumbleUrl?: string;
|
|
79
|
+
mastodonUrl?: string;
|
|
80
|
+
tildeverseUrl?: string;
|
|
81
|
+
twitchUrl?: string;
|
|
82
|
+
xUrl?: string;
|
|
83
|
+
createdAt: Date;
|
|
84
|
+
updatedAt: Date;
|
|
85
|
+
user: {
|
|
86
|
+
id: number;
|
|
87
|
+
username: string;
|
|
88
|
+
email: string;
|
|
89
|
+
timezoneId: number;
|
|
90
|
+
emailConfirmedAt: Date | null;
|
|
91
|
+
};
|
|
92
|
+
profilePhoto?: ProfilePhoto;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=person.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person.model.d.ts","sourceRoot":"","sources":["../../src/models/person.model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,EAAE,iBAAiB,CAAC;IAErC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAE1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,EAAE,iBAAiB,CAAC;IAErC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAGhB,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAC;KACjC,CAAC;IAGF,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Person model for Biome platform
|
|
4
|
+
*
|
|
5
|
+
* ARCHITECTURE CLARIFICATION:
|
|
6
|
+
* - User = Someone/something that USES the system (can be a person OR another system like API, bot)
|
|
7
|
+
* - Person = Actual human with bio, profile, location (always human)
|
|
8
|
+
* - UserAsAPerson = Aggregate when User IS a Person (combines User + Person data)
|
|
9
|
+
* - Relationship: User ←1:0..1→ Person (not all users have person records)
|
|
10
|
+
*
|
|
11
|
+
* This model is shared between frontend and backend via the SDK.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
//# sourceMappingURL=person.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person.model.js","sourceRoot":"","sources":["../../src/models/person.model.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Project model for Biome platform
|
|
3
|
+
* This model is shared between frontend and backend
|
|
4
|
+
*/
|
|
5
|
+
export declare enum PROJECT_STATE {
|
|
6
|
+
DRAFTING = 0,
|
|
7
|
+
PREPARING = 1,
|
|
8
|
+
RUNNING = 2,
|
|
9
|
+
FINISHING = 3,
|
|
10
|
+
COMPLETED = 4
|
|
11
|
+
}
|
|
12
|
+
export declare enum PROJECT_ACTOR {
|
|
13
|
+
CONCEPTUALIZER = "conceptualizer",
|
|
14
|
+
PROJECT_MANAGER = "project_manager"
|
|
15
|
+
}
|
|
16
|
+
export interface Project {
|
|
17
|
+
id?: number;
|
|
18
|
+
name: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
state: PROJECT_STATE;
|
|
21
|
+
isPublic: boolean;
|
|
22
|
+
isArchived: boolean;
|
|
23
|
+
isCancelled: boolean;
|
|
24
|
+
orgId?: number;
|
|
25
|
+
chatId: number;
|
|
26
|
+
managerId?: number;
|
|
27
|
+
conceptualizerId?: number;
|
|
28
|
+
ownerId?: number;
|
|
29
|
+
dueDate: string;
|
|
30
|
+
archivedAt?: string;
|
|
31
|
+
createdAt: Date;
|
|
32
|
+
createdBy: number;
|
|
33
|
+
updatedAt: Date;
|
|
34
|
+
updatedBy: number;
|
|
35
|
+
}
|
|
36
|
+
export type ProjectMinimal = Pick<Project, 'id' | 'name' | 'description' | 'state' | 'dueDate' | 'isPublic'>;
|
|
37
|
+
/**
|
|
38
|
+
* Project state helper functions
|
|
39
|
+
*/
|
|
40
|
+
export declare const ProjectStateHelper: {
|
|
41
|
+
/**
|
|
42
|
+
* Check if a project can transition to a new state
|
|
43
|
+
*/
|
|
44
|
+
canTransition: (currentState: PROJECT_STATE, newState: PROJECT_STATE, actor: PROJECT_ACTOR) => boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Get the display name for a project state
|
|
47
|
+
*/
|
|
48
|
+
getDisplayName: (state: PROJECT_STATE) => string;
|
|
49
|
+
/**
|
|
50
|
+
* Check if a project is in a final state
|
|
51
|
+
*/
|
|
52
|
+
isFinalState: (state: PROJECT_STATE) => boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Check if a project is active (not completed, archived, or cancelled)
|
|
55
|
+
*/
|
|
56
|
+
isActive: (state: PROJECT_STATE, isArchived: boolean, isCancelled: boolean) => boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Get the next valid states for a project
|
|
59
|
+
*/
|
|
60
|
+
getNextValidStates: (currentState: PROJECT_STATE) => PROJECT_STATE[];
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=project.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.model.d.ts","sourceRoot":"","sources":["../../src/models/project.model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,oBAAY,aAAa;IACrB,QAAQ,IAAI;IACZ,SAAS,IAAI;IACb,OAAO,IAAI;IACX,SAAS,IAAI;IACb,SAAS,IAAI;CAChB;AAED,oBAAY,aAAa;IACrB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;CACtC;AAED,MAAM,WAAW,OAAO;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AAE7G;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC3B;;OAEG;kCAC2B,aAAa,YAAY,aAAa,SAAS,aAAa,KAAG,OAAO;IA4BpG;;OAEG;4BACqB,aAAa,KAAG,MAAM;IAY9C;;OAEG;0BACmB,aAAa,KAAG,OAAO;IAI7C;;OAEG;sBACe,aAAa,cAAc,OAAO,eAAe,OAAO,KAAG,OAAO;IAIpF;;OAEG;uCACgC,aAAa,KAAG,aAAa,EAAE;CAWrE,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified Project model for Biome platform
|
|
4
|
+
* This model is shared between frontend and backend
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ProjectStateHelper = exports.PROJECT_ACTOR = exports.PROJECT_STATE = void 0;
|
|
8
|
+
var PROJECT_STATE;
|
|
9
|
+
(function (PROJECT_STATE) {
|
|
10
|
+
PROJECT_STATE[PROJECT_STATE["DRAFTING"] = 0] = "DRAFTING";
|
|
11
|
+
PROJECT_STATE[PROJECT_STATE["PREPARING"] = 1] = "PREPARING";
|
|
12
|
+
PROJECT_STATE[PROJECT_STATE["RUNNING"] = 2] = "RUNNING";
|
|
13
|
+
PROJECT_STATE[PROJECT_STATE["FINISHING"] = 3] = "FINISHING";
|
|
14
|
+
PROJECT_STATE[PROJECT_STATE["COMPLETED"] = 4] = "COMPLETED";
|
|
15
|
+
})(PROJECT_STATE || (exports.PROJECT_STATE = PROJECT_STATE = {}));
|
|
16
|
+
var PROJECT_ACTOR;
|
|
17
|
+
(function (PROJECT_ACTOR) {
|
|
18
|
+
PROJECT_ACTOR["CONCEPTUALIZER"] = "conceptualizer";
|
|
19
|
+
PROJECT_ACTOR["PROJECT_MANAGER"] = "project_manager";
|
|
20
|
+
})(PROJECT_ACTOR || (exports.PROJECT_ACTOR = PROJECT_ACTOR = {}));
|
|
21
|
+
/**
|
|
22
|
+
* Project state helper functions
|
|
23
|
+
*/
|
|
24
|
+
exports.ProjectStateHelper = {
|
|
25
|
+
/**
|
|
26
|
+
* Check if a project can transition to a new state
|
|
27
|
+
*/
|
|
28
|
+
canTransition: (currentState, newState, actor) => {
|
|
29
|
+
const validTransitions = {
|
|
30
|
+
[PROJECT_STATE.DRAFTING]: {
|
|
31
|
+
states: [PROJECT_STATE.PREPARING],
|
|
32
|
+
actors: [PROJECT_ACTOR.CONCEPTUALIZER, PROJECT_ACTOR.PROJECT_MANAGER],
|
|
33
|
+
},
|
|
34
|
+
[PROJECT_STATE.PREPARING]: {
|
|
35
|
+
states: [PROJECT_STATE.RUNNING],
|
|
36
|
+
actors: [PROJECT_ACTOR.PROJECT_MANAGER],
|
|
37
|
+
},
|
|
38
|
+
[PROJECT_STATE.RUNNING]: {
|
|
39
|
+
states: [PROJECT_STATE.FINISHING],
|
|
40
|
+
actors: [PROJECT_ACTOR.PROJECT_MANAGER],
|
|
41
|
+
},
|
|
42
|
+
[PROJECT_STATE.FINISHING]: {
|
|
43
|
+
states: [PROJECT_STATE.COMPLETED],
|
|
44
|
+
actors: [PROJECT_ACTOR.PROJECT_MANAGER],
|
|
45
|
+
},
|
|
46
|
+
[PROJECT_STATE.COMPLETED]: {
|
|
47
|
+
states: [],
|
|
48
|
+
actors: [],
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
const transition = validTransitions[currentState];
|
|
52
|
+
return transition?.states.includes(newState) && transition?.actors.includes(actor);
|
|
53
|
+
},
|
|
54
|
+
/**
|
|
55
|
+
* Get the display name for a project state
|
|
56
|
+
*/
|
|
57
|
+
getDisplayName: (state) => {
|
|
58
|
+
const stateNames = {
|
|
59
|
+
[PROJECT_STATE.DRAFTING]: 'Drafting',
|
|
60
|
+
[PROJECT_STATE.PREPARING]: 'Preparing',
|
|
61
|
+
[PROJECT_STATE.RUNNING]: 'Running',
|
|
62
|
+
[PROJECT_STATE.FINISHING]: 'Finishing',
|
|
63
|
+
[PROJECT_STATE.COMPLETED]: 'Completed',
|
|
64
|
+
};
|
|
65
|
+
return stateNames[state] || 'Unknown';
|
|
66
|
+
},
|
|
67
|
+
/**
|
|
68
|
+
* Check if a project is in a final state
|
|
69
|
+
*/
|
|
70
|
+
isFinalState: (state) => {
|
|
71
|
+
return state === PROJECT_STATE.COMPLETED;
|
|
72
|
+
},
|
|
73
|
+
/**
|
|
74
|
+
* Check if a project is active (not completed, archived, or cancelled)
|
|
75
|
+
*/
|
|
76
|
+
isActive: (state, isArchived, isCancelled) => {
|
|
77
|
+
return state !== PROJECT_STATE.COMPLETED && !isArchived && !isCancelled;
|
|
78
|
+
},
|
|
79
|
+
/**
|
|
80
|
+
* Get the next valid states for a project
|
|
81
|
+
*/
|
|
82
|
+
getNextValidStates: (currentState) => {
|
|
83
|
+
const validTransitions = {
|
|
84
|
+
[PROJECT_STATE.DRAFTING]: [PROJECT_STATE.PREPARING],
|
|
85
|
+
[PROJECT_STATE.PREPARING]: [PROJECT_STATE.RUNNING],
|
|
86
|
+
[PROJECT_STATE.RUNNING]: [PROJECT_STATE.FINISHING],
|
|
87
|
+
[PROJECT_STATE.FINISHING]: [PROJECT_STATE.COMPLETED],
|
|
88
|
+
[PROJECT_STATE.COMPLETED]: [],
|
|
89
|
+
};
|
|
90
|
+
return validTransitions[currentState] || [];
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=project.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.model.js","sourceRoot":"","sources":["../../src/models/project.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskUpdate model for Biome platform
|
|
3
|
+
* Represents an update entry added to a task in ACCEPTED state
|
|
4
|
+
* This model is shared between frontend and backend
|
|
5
|
+
*/
|
|
6
|
+
export interface TaskUpdate {
|
|
7
|
+
id: number;
|
|
8
|
+
taskId: number;
|
|
9
|
+
userId: number;
|
|
10
|
+
content: string;
|
|
11
|
+
createdAt: Date;
|
|
12
|
+
updatedAt?: Date | null;
|
|
13
|
+
editedBy?: number | null;
|
|
14
|
+
isEdited: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Request DTO for creating a new task update
|
|
18
|
+
*/
|
|
19
|
+
export interface CreateTaskUpdateRequest {
|
|
20
|
+
content: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Request DTO for updating an existing task update
|
|
24
|
+
*/
|
|
25
|
+
export interface UpdateTaskUpdateRequest {
|
|
26
|
+
content: string;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=task-update.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-update.model.d.ts","sourceRoot":"","sources":["../../src/models/task-update.model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TaskUpdate model for Biome platform
|
|
4
|
+
* Represents an update entry added to a task in ACCEPTED state
|
|
5
|
+
* This model is shared between frontend and backend
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
//# sourceMappingURL=task-update.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-update.model.js","sourceRoot":"","sources":["../../src/models/task-update.model.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents an external URL reference attached to a task.
|
|
3
|
+
*/
|
|
4
|
+
export interface TaskUrl {
|
|
5
|
+
id?: number;
|
|
6
|
+
taskId: number;
|
|
7
|
+
url: string;
|
|
8
|
+
title?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
tags?: string[];
|
|
11
|
+
createdById?: number;
|
|
12
|
+
createdAt?: Date;
|
|
13
|
+
updatedAt?: Date;
|
|
14
|
+
deletedAt?: Date;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=task-url.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-url.model.d.ts","sourceRoot":"","sources":["../../src/models/task-url.model.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-url.model.js","sourceRoot":"","sources":["../../src/models/task-url.model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Task model for Biome platform
|
|
3
|
+
* This model is shared between frontend and backend
|
|
4
|
+
*/
|
|
5
|
+
export interface Task {
|
|
6
|
+
id?: number;
|
|
7
|
+
projectId?: number;
|
|
8
|
+
parentId?: number;
|
|
9
|
+
title: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
summary?: string;
|
|
12
|
+
summaryLanguage?: string | null;
|
|
13
|
+
summaryRegenerating?: boolean | null;
|
|
14
|
+
state: string;
|
|
15
|
+
isImportant: boolean;
|
|
16
|
+
isUrgent: boolean;
|
|
17
|
+
assigneeId: number;
|
|
18
|
+
requesterId: number;
|
|
19
|
+
nextTouchDate?: Date | null;
|
|
20
|
+
dueDate?: Date | null;
|
|
21
|
+
proposedAt?: Date | null;
|
|
22
|
+
negociatedAt?: Date | null;
|
|
23
|
+
renegociatedAt?: Date | null;
|
|
24
|
+
acceptedAt?: Date | null;
|
|
25
|
+
rejectedAt?: Date | null;
|
|
26
|
+
deliveredAt?: Date | null;
|
|
27
|
+
evaluatedAt?: Date | null;
|
|
28
|
+
archivedAt?: Date | null;
|
|
29
|
+
archivedBy?: number;
|
|
30
|
+
quittedAt?: Date | null;
|
|
31
|
+
canceledAt?: Date | null;
|
|
32
|
+
refusedAt?: Date | null;
|
|
33
|
+
smartContract?: string;
|
|
34
|
+
createdAt: Date;
|
|
35
|
+
createdBy: number;
|
|
36
|
+
updatedAt: Date;
|
|
37
|
+
updatedBy: number;
|
|
38
|
+
deliveryNote?: string;
|
|
39
|
+
rejectionReason?: string;
|
|
40
|
+
cancellationReason?: string;
|
|
41
|
+
evaluation?: number;
|
|
42
|
+
tip?: number;
|
|
43
|
+
evaluationComment?: string;
|
|
44
|
+
}
|
|
45
|
+
export type TaskMinimal = Pick<Task, 'id' | 'title' | 'state' | 'dueDate' | 'assigneeId' | 'requesterId'>;
|
|
46
|
+
/**
|
|
47
|
+
* Task search parameters
|
|
48
|
+
*/
|
|
49
|
+
export interface TaskSearchParams {
|
|
50
|
+
offset?: number;
|
|
51
|
+
limit?: number;
|
|
52
|
+
status?: TASK_STATUS[];
|
|
53
|
+
assigneeId?: number;
|
|
54
|
+
requesterId?: number;
|
|
55
|
+
projectId?: number;
|
|
56
|
+
search?: string;
|
|
57
|
+
sort?: 'createdAt' | 'dueDate' | 'title';
|
|
58
|
+
order?: 'asc' | 'desc';
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Task Search Results Interface
|
|
62
|
+
* Standardized structure for task search API responses
|
|
63
|
+
*
|
|
64
|
+
* @description
|
|
65
|
+
* This interface defines the complete structure of task search results returned
|
|
66
|
+
* by the backend API and consumed by the frontend. It includes the search results
|
|
67
|
+
* array, pagination metadata, and aggregated state counts for filter tabs.
|
|
68
|
+
*
|
|
69
|
+
* Related: User Story 4 - Context-Sensitive Search (TMT #202)
|
|
70
|
+
*/
|
|
71
|
+
export interface TaskSearchResults {
|
|
72
|
+
/** Array of tasks matching the search query */
|
|
73
|
+
results: Task[];
|
|
74
|
+
/** Total number of tasks matching the search query (across all pages) */
|
|
75
|
+
total: number;
|
|
76
|
+
/** Current page number (1-indexed) */
|
|
77
|
+
page: number;
|
|
78
|
+
/** Whether more results are available (for infinite scroll) */
|
|
79
|
+
hasMore: boolean;
|
|
80
|
+
/** Count of matching tasks for each state (for filter tab display) */
|
|
81
|
+
stateCounts: Record<string, number>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Task State Enum - STRING values matching backend TaskState
|
|
85
|
+
* Defines all possible states a task can be in throughout its lifecycle
|
|
86
|
+
*/
|
|
87
|
+
export declare enum TASK_STATUS {
|
|
88
|
+
PROPOSED = "proposed",
|
|
89
|
+
NEGOTIATED = "negotiated",
|
|
90
|
+
ACCEPTED = "accepted",
|
|
91
|
+
REJECTED = "rejected",
|
|
92
|
+
QUITTED = "quitted",
|
|
93
|
+
CANCELED = "canceled",
|
|
94
|
+
DELIVERED = "delivered",
|
|
95
|
+
REFUSED = "refused",
|
|
96
|
+
EVALUATED = "evaluated",
|
|
97
|
+
ARCHIVED = "archived"
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Task status helper functions
|
|
101
|
+
*/
|
|
102
|
+
export declare const TaskStatusHelper: {
|
|
103
|
+
/**
|
|
104
|
+
* Check if a task can transition to a new status
|
|
105
|
+
*/
|
|
106
|
+
canTransition: (currentStatus: TASK_STATUS, newStatus: TASK_STATUS) => boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Get the display name for a task status
|
|
109
|
+
*/
|
|
110
|
+
getDisplayName: (status: TASK_STATUS) => string;
|
|
111
|
+
/**
|
|
112
|
+
* Check if a task is in a final state
|
|
113
|
+
*/
|
|
114
|
+
isFinalState: (status: TASK_STATUS) => boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Check if a task is active (not archived or quit)
|
|
117
|
+
*/
|
|
118
|
+
isActive: (status: TASK_STATUS) => boolean;
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=task.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.model.d.ts","sourceRoot":"","sources":["../../src/models/task.model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,IAAI;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,mBAAmB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;IAEd,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEtB,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAE7B,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAExB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAElB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAElB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC,CAAC;AAE1G;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;IACzC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAC9B,+CAA+C;IAC/C,OAAO,EAAE,IAAI,EAAE,CAAC;IAEhB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IAEd,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IAEb,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IAEjB,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,oBAAY,WAAW;IACnB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,QAAQ,aAAa;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;IACzB;;OAEG;mCAC4B,WAAW,aAAa,WAAW,KAAG,OAAO;IAiB5E;;OAEG;6BACsB,WAAW,KAAG,MAAM;IAiB7C;;OAEG;2BACoB,WAAW,KAAG,OAAO;IAI5C;;OAEG;uBACgB,WAAW,KAAG,OAAO;CAG3C,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified Task model for Biome platform
|
|
4
|
+
* This model is shared between frontend and backend
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TaskStatusHelper = exports.TASK_STATUS = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Task State Enum - STRING values matching backend TaskState
|
|
10
|
+
* Defines all possible states a task can be in throughout its lifecycle
|
|
11
|
+
*/
|
|
12
|
+
var TASK_STATUS;
|
|
13
|
+
(function (TASK_STATUS) {
|
|
14
|
+
TASK_STATUS["PROPOSED"] = "proposed";
|
|
15
|
+
TASK_STATUS["NEGOTIATED"] = "negotiated";
|
|
16
|
+
TASK_STATUS["ACCEPTED"] = "accepted";
|
|
17
|
+
TASK_STATUS["REJECTED"] = "rejected";
|
|
18
|
+
TASK_STATUS["QUITTED"] = "quitted";
|
|
19
|
+
TASK_STATUS["CANCELED"] = "canceled";
|
|
20
|
+
TASK_STATUS["DELIVERED"] = "delivered";
|
|
21
|
+
TASK_STATUS["REFUSED"] = "refused";
|
|
22
|
+
TASK_STATUS["EVALUATED"] = "evaluated";
|
|
23
|
+
TASK_STATUS["ARCHIVED"] = "archived";
|
|
24
|
+
})(TASK_STATUS || (exports.TASK_STATUS = TASK_STATUS = {}));
|
|
25
|
+
/**
|
|
26
|
+
* Task status helper functions
|
|
27
|
+
*/
|
|
28
|
+
exports.TaskStatusHelper = {
|
|
29
|
+
/**
|
|
30
|
+
* Check if a task can transition to a new status
|
|
31
|
+
*/
|
|
32
|
+
canTransition: (currentStatus, newStatus) => {
|
|
33
|
+
const validTransitions = {
|
|
34
|
+
[TASK_STATUS.PROPOSED]: [TASK_STATUS.NEGOTIATED, TASK_STATUS.ACCEPTED, TASK_STATUS.REJECTED, TASK_STATUS.CANCELED],
|
|
35
|
+
[TASK_STATUS.NEGOTIATED]: [TASK_STATUS.ACCEPTED, TASK_STATUS.REJECTED, TASK_STATUS.CANCELED],
|
|
36
|
+
[TASK_STATUS.ACCEPTED]: [TASK_STATUS.DELIVERED, TASK_STATUS.QUITTED, TASK_STATUS.CANCELED],
|
|
37
|
+
[TASK_STATUS.REJECTED]: [TASK_STATUS.PROPOSED, TASK_STATUS.CANCELED],
|
|
38
|
+
[TASK_STATUS.QUITTED]: [TASK_STATUS.PROPOSED, TASK_STATUS.ARCHIVED],
|
|
39
|
+
[TASK_STATUS.CANCELED]: [TASK_STATUS.ARCHIVED],
|
|
40
|
+
[TASK_STATUS.DELIVERED]: [TASK_STATUS.EVALUATED, TASK_STATUS.REFUSED],
|
|
41
|
+
[TASK_STATUS.REFUSED]: [TASK_STATUS.DELIVERED, TASK_STATUS.QUITTED],
|
|
42
|
+
[TASK_STATUS.EVALUATED]: [TASK_STATUS.ARCHIVED],
|
|
43
|
+
[TASK_STATUS.ARCHIVED]: [],
|
|
44
|
+
};
|
|
45
|
+
return validTransitions[currentStatus]?.includes(newStatus) || false;
|
|
46
|
+
},
|
|
47
|
+
/**
|
|
48
|
+
* Get the display name for a task status
|
|
49
|
+
*/
|
|
50
|
+
getDisplayName: (status) => {
|
|
51
|
+
const statusNames = {
|
|
52
|
+
[TASK_STATUS.PROPOSED]: 'Proposed',
|
|
53
|
+
[TASK_STATUS.NEGOTIATED]: 'Negotiated',
|
|
54
|
+
[TASK_STATUS.ACCEPTED]: 'Accepted',
|
|
55
|
+
[TASK_STATUS.REJECTED]: 'Rejected',
|
|
56
|
+
[TASK_STATUS.QUITTED]: 'Quitted',
|
|
57
|
+
[TASK_STATUS.CANCELED]: 'Canceled',
|
|
58
|
+
[TASK_STATUS.DELIVERED]: 'Delivered',
|
|
59
|
+
[TASK_STATUS.REFUSED]: 'Refused',
|
|
60
|
+
[TASK_STATUS.EVALUATED]: 'Evaluated',
|
|
61
|
+
[TASK_STATUS.ARCHIVED]: 'Archived',
|
|
62
|
+
};
|
|
63
|
+
return statusNames[status] || 'Unknown';
|
|
64
|
+
},
|
|
65
|
+
/**
|
|
66
|
+
* Check if a task is in a final state
|
|
67
|
+
*/
|
|
68
|
+
isFinalState: (status) => {
|
|
69
|
+
return status === TASK_STATUS.ARCHIVED;
|
|
70
|
+
},
|
|
71
|
+
/**
|
|
72
|
+
* Check if a task is active (not archived or quit)
|
|
73
|
+
*/
|
|
74
|
+
isActive: (status) => {
|
|
75
|
+
return status !== TASK_STATUS.ARCHIVED && status !== TASK_STATUS.QUITTED;
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=task.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.model.js","sourceRoot":"","sources":["../../src/models/task.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Timezone model for Biome platform
|
|
3
|
+
* This model is shared between frontend and backend
|
|
4
|
+
*
|
|
5
|
+
* Structure matches database schema from migrations:
|
|
6
|
+
* - 20250218005249_timezone_table.ts (initial: id, code, offset)
|
|
7
|
+
* - 20250425010843_update_timezone_table.ts (added: name, dst, sdt)
|
|
8
|
+
* - 20250428124001_table_timezones_rename_columns.ts (camelCase)
|
|
9
|
+
*/
|
|
10
|
+
export interface Timezone {
|
|
11
|
+
id?: number;
|
|
12
|
+
code: string;
|
|
13
|
+
name: string;
|
|
14
|
+
dst: number;
|
|
15
|
+
sdt: number;
|
|
16
|
+
createdAt: Date;
|
|
17
|
+
updatedAt: Date;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=timezone.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timezone.model.d.ts","sourceRoot":"","sources":["../../src/models/timezone.model.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified Timezone model for Biome platform
|
|
4
|
+
* This model is shared between frontend and backend
|
|
5
|
+
*
|
|
6
|
+
* Structure matches database schema from migrations:
|
|
7
|
+
* - 20250218005249_timezone_table.ts (initial: id, code, offset)
|
|
8
|
+
* - 20250425010843_update_timezone_table.ts (added: name, dst, sdt)
|
|
9
|
+
* - 20250428124001_table_timezones_rename_columns.ts (camelCase)
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
//# sourceMappingURL=timezone.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timezone.model.js","sourceRoot":"","sources":["../../src/models/timezone.model.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
|