@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,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified API Error model for Biome platform
|
|
4
|
+
* This model is shared between frontend and backend
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ApiStandardError = exports.API_ERROR_TYPE = void 0;
|
|
8
|
+
var API_ERROR_TYPE;
|
|
9
|
+
(function (API_ERROR_TYPE) {
|
|
10
|
+
API_ERROR_TYPE["BAD_REQUEST"] = "BAD_REQUEST";
|
|
11
|
+
API_ERROR_TYPE["UNAUTHORIZED"] = "UNAUTHORIZED";
|
|
12
|
+
API_ERROR_TYPE["FORBIDDEN"] = "FORBIDDEN";
|
|
13
|
+
API_ERROR_TYPE["NOT_FOUND"] = "NOT_FOUND";
|
|
14
|
+
API_ERROR_TYPE["INTERNAL_SERVER_ERROR"] = "INTERNAL_SERVER_ERROR";
|
|
15
|
+
API_ERROR_TYPE["VALIDATION_ERROR"] = "VALIDATION_ERROR";
|
|
16
|
+
API_ERROR_TYPE["CONFLICT"] = "CONFLICT";
|
|
17
|
+
API_ERROR_TYPE["RATE_LIMIT_EXCEEDED"] = "RATE_LIMIT_EXCEEDED";
|
|
18
|
+
})(API_ERROR_TYPE || (exports.API_ERROR_TYPE = API_ERROR_TYPE = {}));
|
|
19
|
+
/**
|
|
20
|
+
* API Error helper class for backend usage
|
|
21
|
+
*/
|
|
22
|
+
class ApiStandardError extends Error {
|
|
23
|
+
constructor(type, message, details) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.type = type;
|
|
26
|
+
this.message = message;
|
|
27
|
+
this.details = details;
|
|
28
|
+
this.statusCode = this.getStatusCode(type);
|
|
29
|
+
}
|
|
30
|
+
getStatusCode(type) {
|
|
31
|
+
switch (type) {
|
|
32
|
+
case API_ERROR_TYPE.BAD_REQUEST:
|
|
33
|
+
return 400;
|
|
34
|
+
case API_ERROR_TYPE.UNAUTHORIZED:
|
|
35
|
+
return 401;
|
|
36
|
+
case API_ERROR_TYPE.FORBIDDEN:
|
|
37
|
+
return 403;
|
|
38
|
+
case API_ERROR_TYPE.NOT_FOUND:
|
|
39
|
+
return 404;
|
|
40
|
+
case API_ERROR_TYPE.CONFLICT:
|
|
41
|
+
return 409;
|
|
42
|
+
case API_ERROR_TYPE.RATE_LIMIT_EXCEEDED:
|
|
43
|
+
return 429;
|
|
44
|
+
case API_ERROR_TYPE.VALIDATION_ERROR:
|
|
45
|
+
return 422;
|
|
46
|
+
case API_ERROR_TYPE.INTERNAL_SERVER_ERROR:
|
|
47
|
+
default:
|
|
48
|
+
return 500;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.ApiStandardError = ApiStandardError;
|
|
53
|
+
//# sourceMappingURL=api-error.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-error.model.js","sourceRoot":"","sources":["../../src/models/api-error.model.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,IAAY,cASX;AATD,WAAY,cAAc;IACtB,6CAA2B,CAAA;IAC3B,+CAA6B,CAAA;IAC7B,yCAAuB,CAAA;IACvB,yCAAuB,CAAA;IACvB,iEAA+C,CAAA;IAC/C,uDAAqC,CAAA;IACrC,uCAAqB,CAAA;IACrB,6DAA2C,CAAA;AAC/C,CAAC,EATW,cAAc,8BAAd,cAAc,QASzB;AASD;;GAEG;AACH,MAAa,gBAAiB,SAAQ,KAAK;IAKvC,YAAY,IAAoB,EAAE,OAAe,EAAE,OAAiC;QAChF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEO,aAAa,CAAC,IAAoB;QACtC,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,cAAc,CAAC,WAAW;gBAC3B,OAAO,GAAG,CAAC;YACf,KAAK,cAAc,CAAC,YAAY;gBAC5B,OAAO,GAAG,CAAC;YACf,KAAK,cAAc,CAAC,SAAS;gBACzB,OAAO,GAAG,CAAC;YACf,KAAK,cAAc,CAAC,SAAS;gBACzB,OAAO,GAAG,CAAC;YACf,KAAK,cAAc,CAAC,QAAQ;gBACxB,OAAO,GAAG,CAAC;YACf,KAAK,cAAc,CAAC,mBAAmB;gBACnC,OAAO,GAAG,CAAC;YACf,KAAK,cAAc,CAAC,gBAAgB;gBAChC,OAAO,GAAG,CAAC;YACf,KAAK,cAAc,CAAC,qBAAqB,CAAC;YAC1C;gBACI,OAAO,GAAG,CAAC;QACnB,CAAC;IACL,CAAC;CACJ;AAlCD,4CAkCC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified API Response model for Biome platform
|
|
3
|
+
* This model is shared between frontend and backend
|
|
4
|
+
*/
|
|
5
|
+
export type ApiResponseType = 'created' | 'updated' | 'deleted' | 'denied' | 'granted' | 'not-created' | 'not-updated' | 'not-deleted' | 'not-found' | 'done' | 'found' | 'no' | 'yes' | 'error' | 'success';
|
|
6
|
+
export declare const API_RESPONSE_TYPE: {
|
|
7
|
+
readonly CREATED: ApiResponseType;
|
|
8
|
+
readonly UPDATED: ApiResponseType;
|
|
9
|
+
readonly DELETED: ApiResponseType;
|
|
10
|
+
readonly DENIED: ApiResponseType;
|
|
11
|
+
readonly GRANTED: ApiResponseType;
|
|
12
|
+
readonly NOT_CREATED: ApiResponseType;
|
|
13
|
+
readonly NOT_UPDATED: ApiResponseType;
|
|
14
|
+
readonly NOT_DELETED: ApiResponseType;
|
|
15
|
+
readonly NOT_FOUND: ApiResponseType;
|
|
16
|
+
readonly FOUND: ApiResponseType;
|
|
17
|
+
readonly NEGATIVE: ApiResponseType;
|
|
18
|
+
readonly POSITIVE: ApiResponseType;
|
|
19
|
+
readonly DONE: ApiResponseType;
|
|
20
|
+
readonly ERROR: ApiResponseType;
|
|
21
|
+
readonly SUCCESS: ApiResponseType;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* API Response class for Biome platform
|
|
25
|
+
*
|
|
26
|
+
* Generic type-safe API response wrapper.
|
|
27
|
+
*
|
|
28
|
+
* @template T - The type of the payload data
|
|
29
|
+
* - Use specific types for data responses: ApiResponse<User>
|
|
30
|
+
* - Use null for no-data responses: ApiResponse<null>
|
|
31
|
+
* - Default is void for backward compatibility
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Success with data
|
|
35
|
+
* new ApiResponse<User>(API_RESPONSE_TYPE.SUCCESS, userData, 'User found')
|
|
36
|
+
*
|
|
37
|
+
* // Success without data (deletion, etc.)
|
|
38
|
+
* new ApiResponse<null>(API_RESPONSE_TYPE.SUCCESS, null, 'Deleted successfully')
|
|
39
|
+
*
|
|
40
|
+
* // Error response
|
|
41
|
+
* new ApiResponse<null>(API_RESPONSE_TYPE.DENIED, null, 'Forbidden')
|
|
42
|
+
*/
|
|
43
|
+
export declare class ApiResponse<T = void> {
|
|
44
|
+
result: ApiResponseType;
|
|
45
|
+
payload: T;
|
|
46
|
+
message: string;
|
|
47
|
+
isSuccess: boolean;
|
|
48
|
+
constructor(result: ApiResponseType, payload: T, message?: string);
|
|
49
|
+
private evaluateSuccess;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=api-response.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-response.model.d.ts","sourceRoot":"","sources":["../../src/models/api-response.model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,eAAe,GACrB,SAAS,GACT,SAAS,GACT,SAAS,GACT,QAAQ,GACR,SAAS,GACT,aAAa,GACb,aAAa,GACb,aAAa,GACb,WAAW,GACX,MAAM,GACN,OAAO,GACP,IAAI,GACJ,KAAK,GACL,OAAO,GACP,SAAS,CAAC;AAEhB,eAAO,MAAM,iBAAiB;sBACJ,eAAe;sBACf,eAAe;sBACf,eAAe;qBACjB,eAAe;sBACb,eAAe;0BACP,eAAe;0BACf,eAAe;0BACf,eAAe;wBACnB,eAAe;oBACvB,eAAe;uBACf,eAAe;uBACd,eAAe;mBAClB,eAAe;oBACb,eAAe;sBACX,eAAe;CAC/B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,IAAI;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;gBAEd,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,SAAK;IAO7D,OAAO,CAAC,eAAe;CAyB1B"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified API Response model for Biome platform
|
|
4
|
+
* This model is shared between frontend and backend
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ApiResponse = exports.API_RESPONSE_TYPE = void 0;
|
|
8
|
+
exports.API_RESPONSE_TYPE = {
|
|
9
|
+
CREATED: 'created',
|
|
10
|
+
UPDATED: 'updated',
|
|
11
|
+
DELETED: 'deleted',
|
|
12
|
+
DENIED: 'denied',
|
|
13
|
+
GRANTED: 'granted',
|
|
14
|
+
NOT_CREATED: 'not-created',
|
|
15
|
+
NOT_UPDATED: 'not-updated',
|
|
16
|
+
NOT_DELETED: 'not-deleted',
|
|
17
|
+
NOT_FOUND: 'not-found',
|
|
18
|
+
FOUND: 'found',
|
|
19
|
+
NEGATIVE: 'no',
|
|
20
|
+
POSITIVE: 'yes',
|
|
21
|
+
DONE: 'done',
|
|
22
|
+
ERROR: 'error',
|
|
23
|
+
SUCCESS: 'success',
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* API Response class for Biome platform
|
|
27
|
+
*
|
|
28
|
+
* Generic type-safe API response wrapper.
|
|
29
|
+
*
|
|
30
|
+
* @template T - The type of the payload data
|
|
31
|
+
* - Use specific types for data responses: ApiResponse<User>
|
|
32
|
+
* - Use null for no-data responses: ApiResponse<null>
|
|
33
|
+
* - Default is void for backward compatibility
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // Success with data
|
|
37
|
+
* new ApiResponse<User>(API_RESPONSE_TYPE.SUCCESS, userData, 'User found')
|
|
38
|
+
*
|
|
39
|
+
* // Success without data (deletion, etc.)
|
|
40
|
+
* new ApiResponse<null>(API_RESPONSE_TYPE.SUCCESS, null, 'Deleted successfully')
|
|
41
|
+
*
|
|
42
|
+
* // Error response
|
|
43
|
+
* new ApiResponse<null>(API_RESPONSE_TYPE.DENIED, null, 'Forbidden')
|
|
44
|
+
*/
|
|
45
|
+
class ApiResponse {
|
|
46
|
+
constructor(result, payload, message = '') {
|
|
47
|
+
this.result = result;
|
|
48
|
+
this.payload = payload;
|
|
49
|
+
this.message = message;
|
|
50
|
+
this.isSuccess = this.evaluateSuccess(result);
|
|
51
|
+
}
|
|
52
|
+
evaluateSuccess(code) {
|
|
53
|
+
switch (code) {
|
|
54
|
+
case exports.API_RESPONSE_TYPE.CREATED:
|
|
55
|
+
case exports.API_RESPONSE_TYPE.UPDATED:
|
|
56
|
+
case exports.API_RESPONSE_TYPE.DELETED:
|
|
57
|
+
case exports.API_RESPONSE_TYPE.GRANTED:
|
|
58
|
+
case exports.API_RESPONSE_TYPE.FOUND:
|
|
59
|
+
case exports.API_RESPONSE_TYPE.DONE:
|
|
60
|
+
case exports.API_RESPONSE_TYPE.POSITIVE:
|
|
61
|
+
case exports.API_RESPONSE_TYPE.NEGATIVE:
|
|
62
|
+
case exports.API_RESPONSE_TYPE.NOT_FOUND:
|
|
63
|
+
case exports.API_RESPONSE_TYPE.SUCCESS:
|
|
64
|
+
return true;
|
|
65
|
+
case exports.API_RESPONSE_TYPE.DENIED:
|
|
66
|
+
case exports.API_RESPONSE_TYPE.NOT_CREATED:
|
|
67
|
+
case exports.API_RESPONSE_TYPE.NOT_UPDATED:
|
|
68
|
+
case exports.API_RESPONSE_TYPE.NOT_DELETED:
|
|
69
|
+
case exports.API_RESPONSE_TYPE.ERROR:
|
|
70
|
+
return false;
|
|
71
|
+
default:
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.ApiResponse = ApiResponse;
|
|
77
|
+
//# sourceMappingURL=api-response.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-response.model.js","sourceRoot":"","sources":["../../src/models/api-response.model.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAmBU,QAAA,iBAAiB,GAAG;IAC7B,OAAO,EAAE,SAA4B;IACrC,OAAO,EAAE,SAA4B;IACrC,OAAO,EAAE,SAA4B;IACrC,MAAM,EAAE,QAA2B;IACnC,OAAO,EAAE,SAA4B;IACrC,WAAW,EAAE,aAAgC;IAC7C,WAAW,EAAE,aAAgC;IAC7C,WAAW,EAAE,aAAgC;IAC7C,SAAS,EAAE,WAA8B;IACzC,KAAK,EAAE,OAA0B;IACjC,QAAQ,EAAE,IAAuB;IACjC,QAAQ,EAAE,KAAwB;IAClC,IAAI,EAAE,MAAyB;IAC/B,KAAK,EAAE,OAA0B;IACjC,OAAO,EAAE,SAA4B;CAC/B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,WAAW;IAMpB,YAAY,MAAuB,EAAE,OAAU,EAAE,OAAO,GAAG,EAAE;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAEO,eAAe,CAAC,IAAqB;QACzC,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,yBAAiB,CAAC,OAAO,CAAC;YAC/B,KAAK,yBAAiB,CAAC,OAAO,CAAC;YAC/B,KAAK,yBAAiB,CAAC,OAAO,CAAC;YAC/B,KAAK,yBAAiB,CAAC,OAAO,CAAC;YAC/B,KAAK,yBAAiB,CAAC,KAAK,CAAC;YAC7B,KAAK,yBAAiB,CAAC,IAAI,CAAC;YAC5B,KAAK,yBAAiB,CAAC,QAAQ,CAAC;YAChC,KAAK,yBAAiB,CAAC,QAAQ,CAAC;YAChC,KAAK,yBAAiB,CAAC,SAAS,CAAC;YACjC,KAAK,yBAAiB,CAAC,OAAO;gBAC1B,OAAO,IAAI,CAAC;YAEhB,KAAK,yBAAiB,CAAC,MAAM,CAAC;YAC9B,KAAK,yBAAiB,CAAC,WAAW,CAAC;YACnC,KAAK,yBAAiB,CAAC,WAAW,CAAC;YACnC,KAAK,yBAAiB,CAAC,WAAW,CAAC;YACnC,KAAK,yBAAiB,CAAC,KAAK;gBACxB,OAAO,KAAK,CAAC;YAEjB;gBACI,OAAO,KAAK,CAAC;QACrB,CAAC;IACL,CAAC;CACJ;AAtCD,kCAsCC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export type ChatContextType = 'task' | 'project' | 'guild' | 'direct';
|
|
2
|
+
export interface Chat {
|
|
3
|
+
id: number;
|
|
4
|
+
contextType: ChatContextType;
|
|
5
|
+
contextId: number;
|
|
6
|
+
createdAt: Date;
|
|
7
|
+
updatedAt: Date;
|
|
8
|
+
}
|
|
9
|
+
export interface ChatParticipant {
|
|
10
|
+
id: number;
|
|
11
|
+
chatId: number;
|
|
12
|
+
userId: number;
|
|
13
|
+
role?: string | null;
|
|
14
|
+
avatarFileId?: number | null;
|
|
15
|
+
avatarStoragePath?: string | null;
|
|
16
|
+
avatarFilename?: string | null;
|
|
17
|
+
createdAt: Date;
|
|
18
|
+
updatedAt: Date;
|
|
19
|
+
}
|
|
20
|
+
export interface ChatMessage {
|
|
21
|
+
id: number;
|
|
22
|
+
chatId: number;
|
|
23
|
+
senderId: number;
|
|
24
|
+
content: string;
|
|
25
|
+
createdAt: Date;
|
|
26
|
+
updatedAt: Date;
|
|
27
|
+
}
|
|
28
|
+
export interface ChatMessageReceipt {
|
|
29
|
+
id: number;
|
|
30
|
+
messageId: number;
|
|
31
|
+
userId: number;
|
|
32
|
+
readAt: Date | null;
|
|
33
|
+
createdAt: Date;
|
|
34
|
+
updatedAt: Date;
|
|
35
|
+
}
|
|
36
|
+
export interface ChatParticipantProfile {
|
|
37
|
+
userId: number;
|
|
38
|
+
displayName: string | null;
|
|
39
|
+
email: string;
|
|
40
|
+
avatarFileId?: number | null;
|
|
41
|
+
avatarStoragePath?: string | null;
|
|
42
|
+
avatarFilename?: string | null;
|
|
43
|
+
role?: string | null;
|
|
44
|
+
}
|
|
45
|
+
export interface ChatMessageWithSender extends ChatMessage {
|
|
46
|
+
sender: {
|
|
47
|
+
id: number;
|
|
48
|
+
displayName: string;
|
|
49
|
+
email: string;
|
|
50
|
+
avatarFileId?: number | null;
|
|
51
|
+
avatarStoragePath?: string | null;
|
|
52
|
+
avatarFilename?: string | null;
|
|
53
|
+
};
|
|
54
|
+
receipts: Array<Pick<ChatMessageReceipt, 'userId' | 'readAt'>>;
|
|
55
|
+
}
|
|
56
|
+
export interface ChatWithParticipants extends Chat {
|
|
57
|
+
participants: ChatParticipantProfile[];
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=chat.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.model.d.ts","sourceRoot":"","sources":["../../src/models/chat.model.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,IAAI;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,eAAe,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACtD,MAAM,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI;IAC9C,YAAY,EAAE,sBAAsB,EAAE,CAAC;CAC1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.model.js","sourceRoot":"","sources":["../../src/models/chat.model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Ecosystem model for Biome platform
|
|
3
|
+
* This model is shared between frontend and backend
|
|
4
|
+
*/
|
|
5
|
+
export interface Ecosystem {
|
|
6
|
+
id?: number;
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
deleted: boolean;
|
|
10
|
+
createdAt: Date;
|
|
11
|
+
createdBy: number;
|
|
12
|
+
updatedAt: Date;
|
|
13
|
+
updatedBy: number;
|
|
14
|
+
}
|
|
15
|
+
export type EcosystemMinimal = Pick<Ecosystem, 'id' | 'name' | 'description'>;
|
|
16
|
+
//# sourceMappingURL=ecosystem.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecosystem.model.d.ts","sourceRoot":"","sources":["../../src/models/ecosystem.model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecosystem.model.js","sourceRoot":"","sources":["../../src/models/ecosystem.model.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared file model definitions used across backend and frontend.
|
|
3
|
+
* These interfaces describe files stored in the Trunk storage system.
|
|
4
|
+
*/
|
|
5
|
+
export interface File {
|
|
6
|
+
id?: number;
|
|
7
|
+
taskId?: number;
|
|
8
|
+
filename: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
mimeType: string;
|
|
12
|
+
size: number;
|
|
13
|
+
isPublic: boolean;
|
|
14
|
+
ownerId: number;
|
|
15
|
+
folder?: string;
|
|
16
|
+
storagePath: string;
|
|
17
|
+
downloadUrl?: string;
|
|
18
|
+
createdAt?: Date;
|
|
19
|
+
updatedAt?: Date;
|
|
20
|
+
deletedAt?: Date;
|
|
21
|
+
tags?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface FileUploadRequest {
|
|
24
|
+
file: any;
|
|
25
|
+
name?: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
tags?: string[];
|
|
28
|
+
isPublic?: boolean;
|
|
29
|
+
folder?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface FileUpdateRequest {
|
|
32
|
+
name?: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
tags?: string[];
|
|
35
|
+
isPublic?: boolean;
|
|
36
|
+
folder?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface FilePermission {
|
|
39
|
+
id?: number;
|
|
40
|
+
fileId: number;
|
|
41
|
+
userId: number;
|
|
42
|
+
permissions: string[];
|
|
43
|
+
grantedBy: number;
|
|
44
|
+
grantedAt?: Date;
|
|
45
|
+
}
|
|
46
|
+
export interface FileSearchOptions {
|
|
47
|
+
page?: number;
|
|
48
|
+
limit?: number;
|
|
49
|
+
sort?: string;
|
|
50
|
+
order?: 'asc' | 'desc';
|
|
51
|
+
search?: string;
|
|
52
|
+
tags?: string[];
|
|
53
|
+
type?: string;
|
|
54
|
+
folder?: string;
|
|
55
|
+
isPublic?: boolean;
|
|
56
|
+
ownerId?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface FileListResponse {
|
|
59
|
+
files: File[];
|
|
60
|
+
pagination: {
|
|
61
|
+
page: number;
|
|
62
|
+
limit: number;
|
|
63
|
+
total: number;
|
|
64
|
+
pages: number;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=file.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.model.d.ts","sourceRoot":"","sources":["../../src/models/file.model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,IAAI;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,GAAG,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.model.js","sourceRoot":"","sources":["../../src/models/file.model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Notification model for Biome platform
|
|
3
|
+
* This model is shared between frontend and backend
|
|
4
|
+
*
|
|
5
|
+
* CRITICAL: This model matches the database schema exactly (all fields in camelCase)
|
|
6
|
+
* Database table: notifications
|
|
7
|
+
* All fields correspond to actual database columns
|
|
8
|
+
*
|
|
9
|
+
* Story 7: Global Notification System Infrastructure
|
|
10
|
+
* @see docs/user-stories/global_stories.md#story-7
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Complete Notification model matching database schema
|
|
14
|
+
* Includes all fields from the notifications table
|
|
15
|
+
*/
|
|
16
|
+
export interface Notification {
|
|
17
|
+
/** Unique notification identifier (UUID) */
|
|
18
|
+
id?: number;
|
|
19
|
+
/** Recipient user ID (who receives the notification) */
|
|
20
|
+
userId: number;
|
|
21
|
+
/** Source tool that generated the notification */
|
|
22
|
+
originTool: OriginTool;
|
|
23
|
+
/** Specific event type within the origin tool */
|
|
24
|
+
notificationType: string;
|
|
25
|
+
/** Short notification title/subject */
|
|
26
|
+
title: string;
|
|
27
|
+
/** Notification body/description */
|
|
28
|
+
message: string;
|
|
29
|
+
/** User who triggered the event (nullable - can be system-generated) */
|
|
30
|
+
actorId?: number | null;
|
|
31
|
+
/** URL/route to navigate to (e.g., "/tasks/123", "/projects/456") */
|
|
32
|
+
targetLink: string;
|
|
33
|
+
/** Flexible JSONB object with tool-specific data */
|
|
34
|
+
metadata?: Record<string, any>;
|
|
35
|
+
/** Boolean flag indicating if notification has been read */
|
|
36
|
+
isRead: boolean;
|
|
37
|
+
/** Timestamp when notification was read (nullable) */
|
|
38
|
+
readAt?: Date | null;
|
|
39
|
+
/** Timestamp when notification was created */
|
|
40
|
+
createdAt: Date;
|
|
41
|
+
/** Timestamp when notification was last updated */
|
|
42
|
+
updatedAt: Date;
|
|
43
|
+
/** Soft delete timestamp (nullable) */
|
|
44
|
+
deletedAt?: Date | null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Origin Tool Enum
|
|
48
|
+
* Defines all Biome tools that can generate notifications
|
|
49
|
+
*/
|
|
50
|
+
export declare enum OriginTool {
|
|
51
|
+
TASKS = "tasks",
|
|
52
|
+
PROJECTS = "projects",
|
|
53
|
+
CIRCLES = "circles",
|
|
54
|
+
BUSINESS = "business",
|
|
55
|
+
SYSTEM = "system",
|
|
56
|
+
LEGACY = "legacy"
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Notification type safe for frontend display
|
|
60
|
+
* Includes all fields, as no sensitive data exists in notifications
|
|
61
|
+
*/
|
|
62
|
+
export type NotificationPublic = Notification;
|
|
63
|
+
/**
|
|
64
|
+
* Lightweight notification representation for lists
|
|
65
|
+
* Minimal fields for performance in badge count and quick queries
|
|
66
|
+
*/
|
|
67
|
+
export type NotificationMinimal = Pick<Notification, 'id' | 'userId' | 'isRead' | 'createdAt'>;
|
|
68
|
+
/**
|
|
69
|
+
* Extended notification with actor user information
|
|
70
|
+
* Combines Notification model with User data for the actor
|
|
71
|
+
*/
|
|
72
|
+
export interface NotificationWithActor extends Notification {
|
|
73
|
+
actor?: {
|
|
74
|
+
id: number;
|
|
75
|
+
username: string;
|
|
76
|
+
displayName?: string;
|
|
77
|
+
} | null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Type for notification creation (without auto-generated or auto-managed fields)
|
|
81
|
+
*/
|
|
82
|
+
export type CreateNotificationDto = Omit<Notification, 'id' | 'isRead' | 'readAt' | 'createdAt' | 'updatedAt' | 'deletedAt'> & {
|
|
83
|
+
/** Optional override for isRead (defaults to false) */
|
|
84
|
+
isRead?: boolean;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Type for notification updates (partial, without auto-managed fields)
|
|
88
|
+
*/
|
|
89
|
+
export type UpdateNotificationDto = Partial<Omit<Notification, 'id' | 'userId' | 'createdAt' | 'updatedAt' | 'deletedAt'>>;
|
|
90
|
+
/**
|
|
91
|
+
* Notification Settings Model
|
|
92
|
+
* Per-tool notification preferences for each user
|
|
93
|
+
*/
|
|
94
|
+
export interface NotificationSettings {
|
|
95
|
+
id?: number;
|
|
96
|
+
userId: number;
|
|
97
|
+
/** Enable/disable notifications for tasks tool */
|
|
98
|
+
tasks: boolean;
|
|
99
|
+
/** Enable/disable notifications for projects tool */
|
|
100
|
+
projects: boolean;
|
|
101
|
+
/** Enable/disable notifications for circles tool */
|
|
102
|
+
circles: boolean;
|
|
103
|
+
/** Enable/disable notifications for business tool */
|
|
104
|
+
business: boolean;
|
|
105
|
+
/** Enable/disable notifications for system events */
|
|
106
|
+
system: boolean;
|
|
107
|
+
/** Global master toggle (overrides all tool settings if false) */
|
|
108
|
+
enabled: boolean;
|
|
109
|
+
createdAt: Date;
|
|
110
|
+
updatedAt: Date;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Type for updating notification settings
|
|
114
|
+
*/
|
|
115
|
+
export type UpdateNotificationSettingsDto = Partial<Omit<NotificationSettings, 'id' | 'userId' | 'createdAt' | 'updatedAt'>>;
|
|
116
|
+
/**
|
|
117
|
+
* Notification List Query Parameters
|
|
118
|
+
* Query parameters for GET /notifications endpoint
|
|
119
|
+
*/
|
|
120
|
+
export interface NotificationListParams {
|
|
121
|
+
/** Page number (1-indexed) */
|
|
122
|
+
page?: number;
|
|
123
|
+
/** Number of items per page */
|
|
124
|
+
limit?: number;
|
|
125
|
+
/** Filter to only unread notifications */
|
|
126
|
+
unreadOnly?: boolean;
|
|
127
|
+
/** Filter by specific origin tool */
|
|
128
|
+
originTool?: OriginTool;
|
|
129
|
+
/** Sort order: 'newest' or 'oldest' (defaults to newest) */
|
|
130
|
+
sortOrder?: 'newest' | 'oldest';
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Notification List Response
|
|
134
|
+
* Standardized structure for notification list API responses
|
|
135
|
+
*/
|
|
136
|
+
export interface NotificationListResponse {
|
|
137
|
+
/** Array of notifications */
|
|
138
|
+
notifications: Notification[];
|
|
139
|
+
/** Total count of unread notifications (for badge) */
|
|
140
|
+
unreadCount: number;
|
|
141
|
+
/** Pagination metadata */
|
|
142
|
+
pagination: {
|
|
143
|
+
total: number;
|
|
144
|
+
page: number;
|
|
145
|
+
totalPages: number;
|
|
146
|
+
hasMore: boolean;
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Notification Helper Functions
|
|
151
|
+
*/
|
|
152
|
+
export declare const NotificationHelper: {
|
|
153
|
+
/**
|
|
154
|
+
* Check if a notification is unread
|
|
155
|
+
*/
|
|
156
|
+
isUnread: (notification: Notification) => boolean;
|
|
157
|
+
/**
|
|
158
|
+
* Check if a notification is deleted (soft delete)
|
|
159
|
+
*/
|
|
160
|
+
isDeleted: (notification: Notification) => boolean;
|
|
161
|
+
/**
|
|
162
|
+
* Get relative time string for notification timestamp
|
|
163
|
+
* @example "5 minutes ago", "2 hours ago", "3 days ago"
|
|
164
|
+
*/
|
|
165
|
+
getRelativeTime: (date: Date) => string;
|
|
166
|
+
/**
|
|
167
|
+
* Format badge count for display
|
|
168
|
+
* Shows actual count for 1-99, shows "99+" for 100 or more
|
|
169
|
+
*/
|
|
170
|
+
formatBadgeCount: (count: number) => string;
|
|
171
|
+
};
|
|
172
|
+
//# sourceMappingURL=notification.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.model.d.ts","sourceRoot":"","sources":["../../src/models/notification.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified Notification model for Biome platform
|
|
4
|
+
* This model is shared between frontend and backend
|
|
5
|
+
*
|
|
6
|
+
* CRITICAL: This model matches the database schema exactly (all fields in camelCase)
|
|
7
|
+
* Database table: notifications
|
|
8
|
+
* All fields correspond to actual database columns
|
|
9
|
+
*
|
|
10
|
+
* Story 7: Global Notification System Infrastructure
|
|
11
|
+
* @see docs/user-stories/global_stories.md#story-7
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.NotificationHelper = exports.OriginTool = void 0;
|
|
15
|
+
/**
|
|
16
|
+
* Origin Tool Enum
|
|
17
|
+
* Defines all Biome tools that can generate notifications
|
|
18
|
+
*/
|
|
19
|
+
var OriginTool;
|
|
20
|
+
(function (OriginTool) {
|
|
21
|
+
OriginTool["TASKS"] = "tasks";
|
|
22
|
+
OriginTool["PROJECTS"] = "projects";
|
|
23
|
+
OriginTool["CIRCLES"] = "circles";
|
|
24
|
+
OriginTool["BUSINESS"] = "business";
|
|
25
|
+
OriginTool["SYSTEM"] = "system";
|
|
26
|
+
OriginTool["LEGACY"] = "legacy";
|
|
27
|
+
})(OriginTool || (exports.OriginTool = OriginTool = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Notification Helper Functions
|
|
30
|
+
*/
|
|
31
|
+
exports.NotificationHelper = {
|
|
32
|
+
/**
|
|
33
|
+
* Check if a notification is unread
|
|
34
|
+
*/
|
|
35
|
+
isUnread: (notification) => {
|
|
36
|
+
return !notification.isRead;
|
|
37
|
+
},
|
|
38
|
+
/**
|
|
39
|
+
* Check if a notification is deleted (soft delete)
|
|
40
|
+
*/
|
|
41
|
+
isDeleted: (notification) => {
|
|
42
|
+
return notification.deletedAt !== null && notification.deletedAt !== undefined;
|
|
43
|
+
},
|
|
44
|
+
/**
|
|
45
|
+
* Get relative time string for notification timestamp
|
|
46
|
+
* @example "5 minutes ago", "2 hours ago", "3 days ago"
|
|
47
|
+
*/
|
|
48
|
+
getRelativeTime: (date) => {
|
|
49
|
+
const now = new Date();
|
|
50
|
+
const diffMs = now.getTime() - new Date(date).getTime();
|
|
51
|
+
const diffMinutes = Math.floor(diffMs / 60000);
|
|
52
|
+
const diffHours = Math.floor(diffMs / 3600000);
|
|
53
|
+
const diffDays = Math.floor(diffMs / 86400000);
|
|
54
|
+
if (diffMinutes < 1)
|
|
55
|
+
return 'just now';
|
|
56
|
+
if (diffMinutes < 60)
|
|
57
|
+
return `${diffMinutes} minute${diffMinutes === 1 ? '' : 's'} ago`;
|
|
58
|
+
if (diffHours < 24)
|
|
59
|
+
return `${diffHours} hour${diffHours === 1 ? '' : 's'} ago`;
|
|
60
|
+
if (diffDays < 7)
|
|
61
|
+
return `${diffDays} day${diffDays === 1 ? '' : 's'} ago`;
|
|
62
|
+
// For older notifications, return formatted date
|
|
63
|
+
return new Date(date).toLocaleDateString();
|
|
64
|
+
},
|
|
65
|
+
/**
|
|
66
|
+
* Format badge count for display
|
|
67
|
+
* Shows actual count for 1-99, shows "99+" for 100 or more
|
|
68
|
+
*/
|
|
69
|
+
formatBadgeCount: (count) => {
|
|
70
|
+
if (count === 0)
|
|
71
|
+
return '';
|
|
72
|
+
if (count <= 99)
|
|
73
|
+
return count.toString();
|
|
74
|
+
return '99+';
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=notification.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.model.js","sourceRoot":"","sources":["../../src/models/notification.model.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAkDH;;;GAGG;AACH,IAAY,UAOX;AAPD,WAAY,UAAU;IAClB,6BAAe,CAAA;IACf,mCAAqB,CAAA;IACrB,iCAAmB,CAAA;IACnB,mCAAqB,CAAA;IACrB,+BAAiB,CAAA;IACjB,+BAAiB,CAAA;AACrB,CAAC,EAPW,UAAU,0BAAV,UAAU,QAOrB;AA0GD;;GAEG;AACU,QAAA,kBAAkB,GAAG;IAC9B;;OAEG;IACH,QAAQ,EAAE,CAAC,YAA0B,EAAW,EAAE;QAC9C,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,SAAS,EAAE,CAAC,YAA0B,EAAW,EAAE;QAC/C,OAAO,YAAY,CAAC,SAAS,KAAK,IAAI,IAAI,YAAY,CAAC,SAAS,KAAK,SAAS,CAAC;IACnF,CAAC;IAED;;;OAGG;IACH,eAAe,EAAE,CAAC,IAAU,EAAU,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAE/C,IAAI,WAAW,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC;QACvC,IAAI,WAAW,GAAG,EAAE;YAAE,OAAO,GAAG,WAAW,UAAU,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACxF,IAAI,SAAS,GAAG,EAAE;YAAE,OAAO,GAAG,SAAS,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAChF,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,GAAG,QAAQ,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAE3E,iDAAiD;QACjD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,gBAAgB,EAAE,CAAC,KAAa,EAAU,EAAE;QACxC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3B,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ,CAAC"}
|