@experts_hub/shared 1.0.431 → 1.0.433
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/dist/entities/client-candidate-preference.entity.d.ts +3 -0
- package/dist/entities/f2f-interview.entity.d.ts +5 -2
- package/dist/entities/job-recommendation.entity.d.ts +2 -0
- package/dist/entities/job.entity.d.ts +2 -0
- package/dist/index.d.mts +22 -16
- package/dist/index.d.ts +22 -16
- package/dist/index.js +200 -175
- package/dist/index.mjs +215 -188
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2799,11 +2799,18 @@ __decorateClass([
|
|
|
2799
2799
|
__decorateClass([
|
|
2800
2800
|
(0, import_typeorm18.Column)({ name: "round", type: "varchar", nullable: true })
|
|
2801
2801
|
], F2FInterview.prototype, "round", 2);
|
|
2802
|
+
__decorateClass([
|
|
2803
|
+
(0, import_typeorm18.Column)({ name: "job_id", type: "integer", nullable: true })
|
|
2804
|
+
], F2FInterview.prototype, "jobId", 2);
|
|
2805
|
+
__decorateClass([
|
|
2806
|
+
(0, import_typeorm18.ManyToOne)(() => Job, (job) => job.f2fInterviews, { nullable: true }),
|
|
2807
|
+
(0, import_typeorm18.JoinColumn)({ name: "job_id" })
|
|
2808
|
+
], F2FInterview.prototype, "job", 2);
|
|
2802
2809
|
__decorateClass([
|
|
2803
2810
|
(0, import_typeorm18.Column)({ name: "interview_id", type: "integer", nullable: true })
|
|
2804
2811
|
], F2FInterview.prototype, "interviewId", 2);
|
|
2805
2812
|
__decorateClass([
|
|
2806
|
-
(0, import_typeorm18.ManyToOne)(() => Interview, (interview) => interview.
|
|
2813
|
+
(0, import_typeorm18.ManyToOne)(() => Interview, (interview) => interview.f2fInterviews, { nullable: true }),
|
|
2807
2814
|
(0, import_typeorm18.JoinColumn)({ name: "interview_id" })
|
|
2808
2815
|
], F2FInterview.prototype, "interview", 2);
|
|
2809
2816
|
__decorateClass([
|
|
@@ -2963,36 +2970,91 @@ Interview = __decorateClass([
|
|
|
2963
2970
|
], Interview);
|
|
2964
2971
|
|
|
2965
2972
|
// src/entities/job-recommendation.entity.ts
|
|
2973
|
+
var import_typeorm21 = require("typeorm");
|
|
2974
|
+
|
|
2975
|
+
// src/entities/client-candidate-preference.entity.ts
|
|
2966
2976
|
var import_typeorm20 = require("typeorm");
|
|
2977
|
+
var ClientCandidatePreferenceEnum = /* @__PURE__ */ ((ClientCandidatePreferenceEnum2) => {
|
|
2978
|
+
ClientCandidatePreferenceEnum2["NOT_SUITABLE"] = "NOT_SUITABLE";
|
|
2979
|
+
ClientCandidatePreferenceEnum2["SHORTLISTED"] = "SHORTLISTED";
|
|
2980
|
+
return ClientCandidatePreferenceEnum2;
|
|
2981
|
+
})(ClientCandidatePreferenceEnum || {});
|
|
2982
|
+
var ClientCandidatePreference = class extends BaseEntity {
|
|
2983
|
+
};
|
|
2984
|
+
__decorateClass([
|
|
2985
|
+
(0, import_typeorm20.Column)({ name: "client_id", type: "integer" }),
|
|
2986
|
+
(0, import_typeorm20.Index)()
|
|
2987
|
+
], ClientCandidatePreference.prototype, "clientId", 2);
|
|
2988
|
+
__decorateClass([
|
|
2989
|
+
(0, import_typeorm20.ManyToOne)(() => User, (user) => user.clientPreferencesGiven),
|
|
2990
|
+
(0, import_typeorm20.JoinColumn)({ name: "client_id" })
|
|
2991
|
+
], ClientCandidatePreference.prototype, "client", 2);
|
|
2992
|
+
__decorateClass([
|
|
2993
|
+
(0, import_typeorm20.Column)({ name: "candidate_id", type: "integer" }),
|
|
2994
|
+
(0, import_typeorm20.Index)()
|
|
2995
|
+
], ClientCandidatePreference.prototype, "candidateId", 2);
|
|
2996
|
+
__decorateClass([
|
|
2997
|
+
(0, import_typeorm20.ManyToOne)(() => User, (user) => user.clientPreferencesReceived),
|
|
2998
|
+
(0, import_typeorm20.JoinColumn)({ name: "candidate_id" })
|
|
2999
|
+
], ClientCandidatePreference.prototype, "candidate", 2);
|
|
3000
|
+
__decorateClass([
|
|
3001
|
+
(0, import_typeorm20.Column)({ name: "job_id", type: "integer", nullable: true }),
|
|
3002
|
+
(0, import_typeorm20.Index)()
|
|
3003
|
+
], ClientCandidatePreference.prototype, "jobId", 2);
|
|
3004
|
+
__decorateClass([
|
|
3005
|
+
(0, import_typeorm20.ManyToOne)(() => Job, (job) => job.clientCandidatePreferences, { nullable: true }),
|
|
3006
|
+
(0, import_typeorm20.JoinColumn)({ name: "job_id" })
|
|
3007
|
+
], ClientCandidatePreference.prototype, "job", 2);
|
|
3008
|
+
__decorateClass([
|
|
3009
|
+
(0, import_typeorm20.Column)({ name: "recommendation_id", type: "integer", nullable: true }),
|
|
3010
|
+
(0, import_typeorm20.Index)()
|
|
3011
|
+
], ClientCandidatePreference.prototype, "recommendationId", 2);
|
|
3012
|
+
__decorateClass([
|
|
3013
|
+
(0, import_typeorm20.OneToOne)(() => JobRecommendation, (jobRecommendation) => jobRecommendation.preference, { nullable: true }),
|
|
3014
|
+
(0, import_typeorm20.JoinColumn)({ name: "recommendation_id" })
|
|
3015
|
+
], ClientCandidatePreference.prototype, "recommendation", 2);
|
|
3016
|
+
__decorateClass([
|
|
3017
|
+
(0, import_typeorm20.Column)({
|
|
3018
|
+
name: "preference",
|
|
3019
|
+
type: "enum",
|
|
3020
|
+
enum: ClientCandidatePreferenceEnum
|
|
3021
|
+
}),
|
|
3022
|
+
(0, import_typeorm20.Index)()
|
|
3023
|
+
], ClientCandidatePreference.prototype, "preference", 2);
|
|
3024
|
+
ClientCandidatePreference = __decorateClass([
|
|
3025
|
+
(0, import_typeorm20.Entity)("client_candidate_preferences")
|
|
3026
|
+
], ClientCandidatePreference);
|
|
3027
|
+
|
|
3028
|
+
// src/entities/job-recommendation.entity.ts
|
|
2967
3029
|
var JobRecommendation = class {
|
|
2968
3030
|
};
|
|
2969
3031
|
__decorateClass([
|
|
2970
|
-
(0,
|
|
3032
|
+
(0, import_typeorm21.PrimaryGeneratedColumn)("increment", { type: "integer" })
|
|
2971
3033
|
], JobRecommendation.prototype, "id", 2);
|
|
2972
3034
|
__decorateClass([
|
|
2973
|
-
(0,
|
|
2974
|
-
(0,
|
|
3035
|
+
(0, import_typeorm21.Column)({ name: "job_id", type: "integer" }),
|
|
3036
|
+
(0, import_typeorm21.Index)()
|
|
2975
3037
|
], JobRecommendation.prototype, "jobId", 2);
|
|
2976
3038
|
__decorateClass([
|
|
2977
|
-
(0,
|
|
2978
|
-
(0,
|
|
3039
|
+
(0, import_typeorm21.ManyToOne)(() => Job, (job) => job.recommendations, { onDelete: "CASCADE" }),
|
|
3040
|
+
(0, import_typeorm21.JoinColumn)({ name: "job_id" })
|
|
2979
3041
|
], JobRecommendation.prototype, "job", 2);
|
|
2980
3042
|
__decorateClass([
|
|
2981
|
-
(0,
|
|
2982
|
-
(0,
|
|
3043
|
+
(0, import_typeorm21.Column)({ name: "freelancer_id", type: "integer" }),
|
|
3044
|
+
(0, import_typeorm21.Index)()
|
|
2983
3045
|
], JobRecommendation.prototype, "freelancerId", 2);
|
|
2984
3046
|
__decorateClass([
|
|
2985
|
-
(0,
|
|
2986
|
-
(0,
|
|
3047
|
+
(0, import_typeorm21.Column)({ name: "client_id", type: "integer" }),
|
|
3048
|
+
(0, import_typeorm21.Index)()
|
|
2987
3049
|
], JobRecommendation.prototype, "clientId", 2);
|
|
2988
3050
|
__decorateClass([
|
|
2989
|
-
(0,
|
|
3051
|
+
(0, import_typeorm21.Column)({ name: "match_score", type: "numeric", precision: 5, scale: 2 })
|
|
2990
3052
|
], JobRecommendation.prototype, "matchScore", 2);
|
|
2991
3053
|
__decorateClass([
|
|
2992
|
-
(0,
|
|
3054
|
+
(0, import_typeorm21.Column)({ name: "match_score_summary", type: "jsonb", nullable: true })
|
|
2993
3055
|
], JobRecommendation.prototype, "matchScoreSummary", 2);
|
|
2994
3056
|
__decorateClass([
|
|
2995
|
-
(0,
|
|
3057
|
+
(0, import_typeorm21.Column)({
|
|
2996
3058
|
name: "matching_skills",
|
|
2997
3059
|
type: "text",
|
|
2998
3060
|
array: true,
|
|
@@ -3000,10 +3062,10 @@ __decorateClass([
|
|
|
3000
3062
|
})
|
|
3001
3063
|
], JobRecommendation.prototype, "matchingSkills", 2);
|
|
3002
3064
|
__decorateClass([
|
|
3003
|
-
(0,
|
|
3065
|
+
(0, import_typeorm21.Column)({ name: "matching_skills_count", type: "int", nullable: true })
|
|
3004
3066
|
], JobRecommendation.prototype, "matchingSkillsCount", 2);
|
|
3005
3067
|
__decorateClass([
|
|
3006
|
-
(0,
|
|
3068
|
+
(0, import_typeorm21.Column)({
|
|
3007
3069
|
name: "required_skills",
|
|
3008
3070
|
type: "text",
|
|
3009
3071
|
array: true,
|
|
@@ -3011,21 +3073,24 @@ __decorateClass([
|
|
|
3011
3073
|
})
|
|
3012
3074
|
], JobRecommendation.prototype, "requiredSkills", 2);
|
|
3013
3075
|
__decorateClass([
|
|
3014
|
-
(0,
|
|
3076
|
+
(0, import_typeorm21.Column)({ name: "required_skills_count", type: "int", nullable: true })
|
|
3015
3077
|
], JobRecommendation.prototype, "requiredSkillsCount", 2);
|
|
3016
3078
|
__decorateClass([
|
|
3017
|
-
(0,
|
|
3079
|
+
(0, import_typeorm21.Column)({
|
|
3018
3080
|
name: "last_calculated_at",
|
|
3019
3081
|
type: "timestamp with time zone",
|
|
3020
3082
|
nullable: true
|
|
3021
3083
|
})
|
|
3022
3084
|
], JobRecommendation.prototype, "lastCalculatedAt", 2);
|
|
3085
|
+
__decorateClass([
|
|
3086
|
+
(0, import_typeorm21.OneToOne)(() => ClientCandidatePreference, (clientCandidatePreference) => clientCandidatePreference.recommendation)
|
|
3087
|
+
], JobRecommendation.prototype, "preference", 2);
|
|
3023
3088
|
JobRecommendation = __decorateClass([
|
|
3024
|
-
(0,
|
|
3089
|
+
(0, import_typeorm21.Entity)("job_recommendations")
|
|
3025
3090
|
], JobRecommendation);
|
|
3026
3091
|
|
|
3027
3092
|
// src/entities/contract.entity.ts
|
|
3028
|
-
var
|
|
3093
|
+
var import_typeorm22 = require("typeorm");
|
|
3029
3094
|
var ContractStatusEnum = /* @__PURE__ */ ((ContractStatusEnum2) => {
|
|
3030
3095
|
ContractStatusEnum2["GENERATED"] = "GENERATED";
|
|
3031
3096
|
ContractStatusEnum2["DRAFTED"] = "DRAFTED";
|
|
@@ -3048,37 +3113,37 @@ var Contract = class extends BaseEntity {
|
|
|
3048
3113
|
// stores the positions JSON
|
|
3049
3114
|
};
|
|
3050
3115
|
__decorateClass([
|
|
3051
|
-
(0,
|
|
3116
|
+
(0, import_typeorm22.Column)({ name: "contract_unique_id", type: "varchar", nullable: true, unique: true })
|
|
3052
3117
|
], Contract.prototype, "contractUniqueId", 2);
|
|
3053
3118
|
__decorateClass([
|
|
3054
|
-
(0,
|
|
3055
|
-
(0,
|
|
3119
|
+
(0, import_typeorm22.Column)({ name: "job_id", type: "integer", nullable: true }),
|
|
3120
|
+
(0, import_typeorm22.Index)()
|
|
3056
3121
|
], Contract.prototype, "jobId", 2);
|
|
3057
3122
|
__decorateClass([
|
|
3058
|
-
(0,
|
|
3059
|
-
(0,
|
|
3123
|
+
(0, import_typeorm22.ManyToOne)(() => Job, (job) => job.contracts),
|
|
3124
|
+
(0, import_typeorm22.JoinColumn)({ name: "job_id" })
|
|
3060
3125
|
], Contract.prototype, "job", 2);
|
|
3061
3126
|
__decorateClass([
|
|
3062
|
-
(0,
|
|
3063
|
-
(0,
|
|
3127
|
+
(0, import_typeorm22.Column)({ name: "client_id", type: "integer", nullable: true }),
|
|
3128
|
+
(0, import_typeorm22.Index)()
|
|
3064
3129
|
], Contract.prototype, "clientId", 2);
|
|
3065
3130
|
__decorateClass([
|
|
3066
|
-
(0,
|
|
3067
|
-
(0,
|
|
3131
|
+
(0, import_typeorm22.ManyToOne)(() => User, (user) => user.clientContracts),
|
|
3132
|
+
(0, import_typeorm22.JoinColumn)({ name: "client_id" })
|
|
3068
3133
|
], Contract.prototype, "client", 2);
|
|
3069
3134
|
__decorateClass([
|
|
3070
|
-
(0,
|
|
3071
|
-
(0,
|
|
3135
|
+
(0, import_typeorm22.Column)({ name: "freelancer_id", type: "integer", nullable: true }),
|
|
3136
|
+
(0, import_typeorm22.Index)()
|
|
3072
3137
|
], Contract.prototype, "freelancerId", 2);
|
|
3073
3138
|
__decorateClass([
|
|
3074
|
-
(0,
|
|
3075
|
-
(0,
|
|
3139
|
+
(0, import_typeorm22.ManyToOne)(() => User, (user) => user.freelancerContracts),
|
|
3140
|
+
(0, import_typeorm22.JoinColumn)({ name: "freelancer_id" })
|
|
3076
3141
|
], Contract.prototype, "freelancer", 2);
|
|
3077
3142
|
__decorateClass([
|
|
3078
|
-
(0,
|
|
3143
|
+
(0, import_typeorm22.Column)({ name: "duration", type: "integer", nullable: true })
|
|
3079
3144
|
], Contract.prototype, "duration", 2);
|
|
3080
3145
|
__decorateClass([
|
|
3081
|
-
(0,
|
|
3146
|
+
(0, import_typeorm22.Column)({
|
|
3082
3147
|
name: "status",
|
|
3083
3148
|
type: "enum",
|
|
3084
3149
|
enum: ContractStatusEnum,
|
|
@@ -3086,7 +3151,7 @@ __decorateClass([
|
|
|
3086
3151
|
})
|
|
3087
3152
|
], Contract.prototype, "status", 2);
|
|
3088
3153
|
__decorateClass([
|
|
3089
|
-
(0,
|
|
3154
|
+
(0, import_typeorm22.Column)({
|
|
3090
3155
|
name: "type",
|
|
3091
3156
|
type: "enum",
|
|
3092
3157
|
enum: ContractTypeEnum,
|
|
@@ -3094,74 +3159,74 @@ __decorateClass([
|
|
|
3094
3159
|
})
|
|
3095
3160
|
], Contract.prototype, "type", 2);
|
|
3096
3161
|
__decorateClass([
|
|
3097
|
-
(0,
|
|
3162
|
+
(0, import_typeorm22.Column)({
|
|
3098
3163
|
name: "start_date",
|
|
3099
3164
|
type: "timestamp with time zone",
|
|
3100
3165
|
nullable: true
|
|
3101
3166
|
})
|
|
3102
3167
|
], Contract.prototype, "startDate", 2);
|
|
3103
3168
|
__decorateClass([
|
|
3104
|
-
(0,
|
|
3169
|
+
(0, import_typeorm22.Column)({
|
|
3105
3170
|
name: "end_date",
|
|
3106
3171
|
type: "timestamp with time zone",
|
|
3107
3172
|
nullable: true
|
|
3108
3173
|
})
|
|
3109
3174
|
], Contract.prototype, "endDate", 2);
|
|
3110
3175
|
__decorateClass([
|
|
3111
|
-
(0,
|
|
3176
|
+
(0, import_typeorm22.Column)({ name: "original_document_url", type: "varchar", nullable: true })
|
|
3112
3177
|
], Contract.prototype, "originalDocumentUrl", 2);
|
|
3113
3178
|
__decorateClass([
|
|
3114
|
-
(0,
|
|
3179
|
+
(0, import_typeorm22.Column)({ name: "contract_document_url", type: "varchar", nullable: true })
|
|
3115
3180
|
], Contract.prototype, "contractDocumentUrl", 2);
|
|
3116
3181
|
__decorateClass([
|
|
3117
|
-
(0,
|
|
3182
|
+
(0, import_typeorm22.Column)({
|
|
3118
3183
|
name: "client_signed_at",
|
|
3119
3184
|
type: "timestamp with time zone",
|
|
3120
3185
|
nullable: true
|
|
3121
3186
|
})
|
|
3122
3187
|
], Contract.prototype, "clientSignedAt", 2);
|
|
3123
3188
|
__decorateClass([
|
|
3124
|
-
(0,
|
|
3189
|
+
(0, import_typeorm22.Column)({ name: "freelancer_viewed", type: "boolean", default: false })
|
|
3125
3190
|
], Contract.prototype, "freelancerViewed", 2);
|
|
3126
3191
|
__decorateClass([
|
|
3127
|
-
(0,
|
|
3192
|
+
(0, import_typeorm22.Column)({
|
|
3128
3193
|
name: "freelancer_viewed_at",
|
|
3129
3194
|
type: "timestamp with time zone",
|
|
3130
3195
|
nullable: true
|
|
3131
3196
|
})
|
|
3132
3197
|
], Contract.prototype, "freelancerViewedAt", 2);
|
|
3133
3198
|
__decorateClass([
|
|
3134
|
-
(0,
|
|
3199
|
+
(0, import_typeorm22.Column)({
|
|
3135
3200
|
name: "freelancer_signed_at",
|
|
3136
3201
|
type: "timestamp with time zone",
|
|
3137
3202
|
nullable: true
|
|
3138
3203
|
})
|
|
3139
3204
|
], Contract.prototype, "freelancerSignedAt", 2);
|
|
3140
3205
|
__decorateClass([
|
|
3141
|
-
(0,
|
|
3206
|
+
(0, import_typeorm22.Column)({
|
|
3142
3207
|
name: "rejectd_at",
|
|
3143
3208
|
type: "timestamp with time zone",
|
|
3144
3209
|
nullable: true
|
|
3145
3210
|
})
|
|
3146
3211
|
], Contract.prototype, "rejectedAt", 2);
|
|
3147
3212
|
__decorateClass([
|
|
3148
|
-
(0,
|
|
3213
|
+
(0, import_typeorm22.Column)({ name: "reject_reason", type: "varchar", nullable: true })
|
|
3149
3214
|
], Contract.prototype, "rejectReason", 2);
|
|
3150
3215
|
__decorateClass([
|
|
3151
|
-
(0,
|
|
3216
|
+
(0, import_typeorm22.Column)({ name: "is_work_contract_sent", type: "boolean", default: false })
|
|
3152
3217
|
], Contract.prototype, "isWorkContractSent", 2);
|
|
3153
3218
|
__decorateClass([
|
|
3154
|
-
(0,
|
|
3219
|
+
(0, import_typeorm22.Column)({ name: "is_escrow_deposited", type: "boolean", default: false })
|
|
3155
3220
|
], Contract.prototype, "isEscrowDeposited", 2);
|
|
3156
3221
|
__decorateClass([
|
|
3157
|
-
(0,
|
|
3222
|
+
(0, import_typeorm22.Column)({ name: "signature_positions", type: "jsonb", nullable: true })
|
|
3158
3223
|
], Contract.prototype, "signaturePositions", 2);
|
|
3159
3224
|
Contract = __decorateClass([
|
|
3160
|
-
(0,
|
|
3225
|
+
(0, import_typeorm22.Entity)("contracts")
|
|
3161
3226
|
], Contract);
|
|
3162
3227
|
|
|
3163
3228
|
// src/entities/timesheets.entity.ts
|
|
3164
|
-
var
|
|
3229
|
+
var import_typeorm23 = require("typeorm");
|
|
3165
3230
|
var TimesheetStatusEnum = /* @__PURE__ */ ((TimesheetStatusEnum2) => {
|
|
3166
3231
|
TimesheetStatusEnum2["DRAFT"] = "DRAFT";
|
|
3167
3232
|
TimesheetStatusEnum2["SEND"] = "SEND";
|
|
@@ -3174,148 +3239,148 @@ var TimesheetStatusEnum = /* @__PURE__ */ ((TimesheetStatusEnum2) => {
|
|
|
3174
3239
|
var Timesheet = class extends BaseEntity {
|
|
3175
3240
|
};
|
|
3176
3241
|
__decorateClass([
|
|
3177
|
-
(0,
|
|
3178
|
-
(0,
|
|
3242
|
+
(0, import_typeorm23.Column)({ name: "job_id", type: "integer", nullable: true }),
|
|
3243
|
+
(0, import_typeorm23.Index)()
|
|
3179
3244
|
], Timesheet.prototype, "jobId", 2);
|
|
3180
3245
|
__decorateClass([
|
|
3181
|
-
(0,
|
|
3182
|
-
(0,
|
|
3246
|
+
(0, import_typeorm23.ManyToOne)(() => Job, (job) => job.timesheets),
|
|
3247
|
+
(0, import_typeorm23.JoinColumn)({ name: "job_id" })
|
|
3183
3248
|
], Timesheet.prototype, "job", 2);
|
|
3184
3249
|
__decorateClass([
|
|
3185
|
-
(0,
|
|
3186
|
-
(0,
|
|
3250
|
+
(0, import_typeorm23.Column)({ name: "client_id", type: "integer", nullable: true }),
|
|
3251
|
+
(0, import_typeorm23.Index)()
|
|
3187
3252
|
], Timesheet.prototype, "clientId", 2);
|
|
3188
3253
|
__decorateClass([
|
|
3189
|
-
(0,
|
|
3190
|
-
(0,
|
|
3254
|
+
(0, import_typeorm23.ManyToOne)(() => User, (user) => user.clientTimesheets),
|
|
3255
|
+
(0, import_typeorm23.JoinColumn)({ name: "client_id" })
|
|
3191
3256
|
], Timesheet.prototype, "client", 2);
|
|
3192
3257
|
__decorateClass([
|
|
3193
|
-
(0,
|
|
3194
|
-
(0,
|
|
3258
|
+
(0, import_typeorm23.Column)({ name: "freelancer_id", type: "integer", nullable: true }),
|
|
3259
|
+
(0, import_typeorm23.Index)()
|
|
3195
3260
|
], Timesheet.prototype, "freelancerId", 2);
|
|
3196
3261
|
__decorateClass([
|
|
3197
|
-
(0,
|
|
3198
|
-
(0,
|
|
3262
|
+
(0, import_typeorm23.ManyToOne)(() => User, (user) => user.freelancerTimesheets),
|
|
3263
|
+
(0, import_typeorm23.JoinColumn)({ name: "freelancer_id" })
|
|
3199
3264
|
], Timesheet.prototype, "freelancer", 2);
|
|
3200
3265
|
__decorateClass([
|
|
3201
|
-
(0,
|
|
3266
|
+
(0, import_typeorm23.Column)({
|
|
3202
3267
|
name: "start_date",
|
|
3203
3268
|
type: "date",
|
|
3204
3269
|
nullable: true
|
|
3205
3270
|
})
|
|
3206
3271
|
], Timesheet.prototype, "startDate", 2);
|
|
3207
3272
|
__decorateClass([
|
|
3208
|
-
(0,
|
|
3273
|
+
(0, import_typeorm23.Column)({
|
|
3209
3274
|
name: "end_date",
|
|
3210
3275
|
type: "date",
|
|
3211
3276
|
nullable: true
|
|
3212
3277
|
})
|
|
3213
3278
|
], Timesheet.prototype, "endDate", 2);
|
|
3214
3279
|
__decorateClass([
|
|
3215
|
-
(0,
|
|
3280
|
+
(0, import_typeorm23.Column)({ name: "start_time", type: "varchar", nullable: true })
|
|
3216
3281
|
], Timesheet.prototype, "startTime", 2);
|
|
3217
3282
|
__decorateClass([
|
|
3218
|
-
(0,
|
|
3283
|
+
(0, import_typeorm23.Column)({ name: "end_time", type: "varchar", nullable: true })
|
|
3219
3284
|
], Timesheet.prototype, "endTime", 2);
|
|
3220
3285
|
__decorateClass([
|
|
3221
|
-
(0,
|
|
3286
|
+
(0, import_typeorm23.Column)({ name: "worked_hours", type: "varchar", nullable: true })
|
|
3222
3287
|
], Timesheet.prototype, "workedHours", 2);
|
|
3223
3288
|
__decorateClass([
|
|
3224
|
-
(0,
|
|
3289
|
+
(0, import_typeorm23.Column)({ name: "task_id", type: "integer", nullable: true })
|
|
3225
3290
|
], Timesheet.prototype, "taskId", 2);
|
|
3226
3291
|
__decorateClass([
|
|
3227
|
-
(0,
|
|
3292
|
+
(0, import_typeorm23.Column)({ name: "task_name", type: "varchar", nullable: true })
|
|
3228
3293
|
], Timesheet.prototype, "taskName", 2);
|
|
3229
3294
|
__decorateClass([
|
|
3230
|
-
(0,
|
|
3295
|
+
(0, import_typeorm23.Column)({ name: "description", type: "varchar", nullable: true })
|
|
3231
3296
|
], Timesheet.prototype, "description", 2);
|
|
3232
3297
|
__decorateClass([
|
|
3233
|
-
(0,
|
|
3298
|
+
(0, import_typeorm23.Column)({ name: "week_start_date", type: "date", nullable: true })
|
|
3234
3299
|
], Timesheet.prototype, "weekStartDate", 2);
|
|
3235
3300
|
__decorateClass([
|
|
3236
|
-
(0,
|
|
3301
|
+
(0, import_typeorm23.Column)({ name: "week_end_date", type: "date", nullable: true })
|
|
3237
3302
|
], Timesheet.prototype, "weekEndDate", 2);
|
|
3238
3303
|
__decorateClass([
|
|
3239
|
-
(0,
|
|
3304
|
+
(0, import_typeorm23.Column)({ name: "rejected_at", type: "timestamp with time zone", nullable: true })
|
|
3240
3305
|
], Timesheet.prototype, "rejectedAt", 2);
|
|
3241
3306
|
__decorateClass([
|
|
3242
|
-
(0,
|
|
3307
|
+
(0, import_typeorm23.Column)({ name: "submitted_at", type: "timestamp with time zone", nullable: true })
|
|
3243
3308
|
], Timesheet.prototype, "submittedAt", 2);
|
|
3244
3309
|
__decorateClass([
|
|
3245
|
-
(0,
|
|
3310
|
+
(0, import_typeorm23.Column)({ name: "resubmiited_at", type: "timestamp with time zone", nullable: true })
|
|
3246
3311
|
], Timesheet.prototype, "resubmittedAt", 2);
|
|
3247
3312
|
__decorateClass([
|
|
3248
|
-
(0,
|
|
3313
|
+
(0, import_typeorm23.Column)({ name: "approved_at", type: "timestamp with time zone", nullable: true })
|
|
3249
3314
|
], Timesheet.prototype, "approvedAt", 2);
|
|
3250
3315
|
__decorateClass([
|
|
3251
|
-
(0,
|
|
3316
|
+
(0, import_typeorm23.Column)({ name: "status", type: "enum", enum: TimesheetStatusEnum, nullable: true })
|
|
3252
3317
|
], Timesheet.prototype, "status", 2);
|
|
3253
3318
|
__decorateClass([
|
|
3254
|
-
(0,
|
|
3319
|
+
(0, import_typeorm23.Column)({ name: "client_send_back_reason", type: "varchar", nullable: true })
|
|
3255
3320
|
], Timesheet.prototype, "clientSendBackReason", 2);
|
|
3256
3321
|
Timesheet = __decorateClass([
|
|
3257
|
-
(0,
|
|
3322
|
+
(0, import_typeorm23.Entity)("timesheets")
|
|
3258
3323
|
], Timesheet);
|
|
3259
3324
|
|
|
3260
3325
|
// src/entities/timesheet-line.entity.ts
|
|
3261
|
-
var
|
|
3326
|
+
var import_typeorm26 = require("typeorm");
|
|
3262
3327
|
|
|
3263
3328
|
// src/entities/timesheet-logs.entity.ts
|
|
3264
|
-
var
|
|
3329
|
+
var import_typeorm24 = require("typeorm");
|
|
3265
3330
|
var TimesheetLogs = class extends BaseEntity {
|
|
3266
3331
|
};
|
|
3267
3332
|
__decorateClass([
|
|
3268
|
-
(0,
|
|
3269
|
-
(0,
|
|
3333
|
+
(0, import_typeorm24.Column)({ name: "timesheet_line_id", type: "integer", nullable: false }),
|
|
3334
|
+
(0, import_typeorm24.Index)()
|
|
3270
3335
|
], TimesheetLogs.prototype, "timesheetLineId", 2);
|
|
3271
3336
|
__decorateClass([
|
|
3272
|
-
(0,
|
|
3273
|
-
(0,
|
|
3337
|
+
(0, import_typeorm24.ManyToOne)(() => TimesheetLine, (timesheetLine) => timesheetLine.timesheetLogs),
|
|
3338
|
+
(0, import_typeorm24.JoinColumn)({ name: "timesheet_line_id" })
|
|
3274
3339
|
], TimesheetLogs.prototype, "timesheetLine", 2);
|
|
3275
3340
|
__decorateClass([
|
|
3276
|
-
(0,
|
|
3341
|
+
(0, import_typeorm24.Column)({
|
|
3277
3342
|
name: "start_date",
|
|
3278
3343
|
type: "date",
|
|
3279
3344
|
nullable: true
|
|
3280
3345
|
})
|
|
3281
3346
|
], TimesheetLogs.prototype, "startDate", 2);
|
|
3282
3347
|
__decorateClass([
|
|
3283
|
-
(0,
|
|
3348
|
+
(0, import_typeorm24.Column)({
|
|
3284
3349
|
name: "end_date",
|
|
3285
3350
|
type: "date",
|
|
3286
3351
|
nullable: true
|
|
3287
3352
|
})
|
|
3288
3353
|
], TimesheetLogs.prototype, "endDate", 2);
|
|
3289
3354
|
__decorateClass([
|
|
3290
|
-
(0,
|
|
3355
|
+
(0, import_typeorm24.Column)({ name: "start_time", type: "varchar", nullable: true })
|
|
3291
3356
|
], TimesheetLogs.prototype, "startTime", 2);
|
|
3292
3357
|
__decorateClass([
|
|
3293
|
-
(0,
|
|
3358
|
+
(0, import_typeorm24.Column)({ name: "end_time", type: "varchar", nullable: true })
|
|
3294
3359
|
], TimesheetLogs.prototype, "endTime", 2);
|
|
3295
3360
|
__decorateClass([
|
|
3296
|
-
(0,
|
|
3361
|
+
(0, import_typeorm24.Column)({ name: "worked_hours", type: "varchar", nullable: true })
|
|
3297
3362
|
], TimesheetLogs.prototype, "workedHours", 2);
|
|
3298
3363
|
__decorateClass([
|
|
3299
|
-
(0,
|
|
3364
|
+
(0, import_typeorm24.Column)({ name: "task_id", type: "integer", nullable: true })
|
|
3300
3365
|
], TimesheetLogs.prototype, "taskId", 2);
|
|
3301
3366
|
__decorateClass([
|
|
3302
|
-
(0,
|
|
3367
|
+
(0, import_typeorm24.Column)({ name: "project_name", type: "varchar", nullable: true })
|
|
3303
3368
|
], TimesheetLogs.prototype, "projectName", 2);
|
|
3304
3369
|
__decorateClass([
|
|
3305
|
-
(0,
|
|
3370
|
+
(0, import_typeorm24.Column)({ name: "deliverable", type: "varchar", nullable: true })
|
|
3306
3371
|
], TimesheetLogs.prototype, "deliverable", 2);
|
|
3307
3372
|
__decorateClass([
|
|
3308
|
-
(0,
|
|
3373
|
+
(0, import_typeorm24.Column)({ name: "task_name", type: "varchar", nullable: true })
|
|
3309
3374
|
], TimesheetLogs.prototype, "taskName", 2);
|
|
3310
3375
|
__decorateClass([
|
|
3311
|
-
(0,
|
|
3376
|
+
(0, import_typeorm24.Column)({ name: "description", type: "varchar", nullable: true })
|
|
3312
3377
|
], TimesheetLogs.prototype, "description", 2);
|
|
3313
3378
|
TimesheetLogs = __decorateClass([
|
|
3314
|
-
(0,
|
|
3379
|
+
(0, import_typeorm24.Entity)("timesheet_logs")
|
|
3315
3380
|
], TimesheetLogs);
|
|
3316
3381
|
|
|
3317
3382
|
// src/entities/timesheet-line-history.entity.ts
|
|
3318
|
-
var
|
|
3383
|
+
var import_typeorm25 = require("typeorm");
|
|
3319
3384
|
var TimesheetLineHistoryStatusEnum = /* @__PURE__ */ ((TimesheetLineHistoryStatusEnum2) => {
|
|
3320
3385
|
TimesheetLineHistoryStatusEnum2["DRAFT"] = "DRAFT";
|
|
3321
3386
|
TimesheetLineHistoryStatusEnum2["SEND"] = "SEND";
|
|
@@ -3339,19 +3404,19 @@ var TimesheetSubmissionActionEnum = /* @__PURE__ */ ((TimesheetSubmissionActionE
|
|
|
3339
3404
|
var TimesheetLineHistory = class extends BaseEntity {
|
|
3340
3405
|
};
|
|
3341
3406
|
__decorateClass([
|
|
3342
|
-
(0,
|
|
3343
|
-
(0,
|
|
3407
|
+
(0, import_typeorm25.Column)({ name: "timesheet_line_id", type: "integer", nullable: false }),
|
|
3408
|
+
(0, import_typeorm25.Index)()
|
|
3344
3409
|
], TimesheetLineHistory.prototype, "timesheetLineId", 2);
|
|
3345
3410
|
__decorateClass([
|
|
3346
|
-
(0,
|
|
3347
|
-
(0,
|
|
3411
|
+
(0, import_typeorm25.ManyToOne)(() => TimesheetLine, (timesheetLine) => timesheetLine.timesheetLineHistory),
|
|
3412
|
+
(0, import_typeorm25.JoinColumn)({ name: "timesheet_line_id" })
|
|
3348
3413
|
], TimesheetLineHistory.prototype, "timesheetLine", 2);
|
|
3349
3414
|
__decorateClass([
|
|
3350
|
-
(0,
|
|
3351
|
-
(0,
|
|
3415
|
+
(0, import_typeorm25.Column)({ name: "changed_by", type: "integer", nullable: true }),
|
|
3416
|
+
(0, import_typeorm25.Index)()
|
|
3352
3417
|
], TimesheetLineHistory.prototype, "changedBy", 2);
|
|
3353
3418
|
__decorateClass([
|
|
3354
|
-
(0,
|
|
3419
|
+
(0, import_typeorm25.Column)({
|
|
3355
3420
|
name: "previous_status",
|
|
3356
3421
|
type: "enum",
|
|
3357
3422
|
enum: TimesheetLineHistoryStatusEnum,
|
|
@@ -3359,7 +3424,7 @@ __decorateClass([
|
|
|
3359
3424
|
})
|
|
3360
3425
|
], TimesheetLineHistory.prototype, "previousStatus", 2);
|
|
3361
3426
|
__decorateClass([
|
|
3362
|
-
(0,
|
|
3427
|
+
(0, import_typeorm25.Column)({
|
|
3363
3428
|
name: "new_status",
|
|
3364
3429
|
type: "enum",
|
|
3365
3430
|
enum: TimesheetLineHistoryStatusEnum,
|
|
@@ -3367,7 +3432,7 @@ __decorateClass([
|
|
|
3367
3432
|
})
|
|
3368
3433
|
], TimesheetLineHistory.prototype, "newStatus", 2);
|
|
3369
3434
|
__decorateClass([
|
|
3370
|
-
(0,
|
|
3435
|
+
(0, import_typeorm25.Column)({
|
|
3371
3436
|
name: "action_type",
|
|
3372
3437
|
type: "enum",
|
|
3373
3438
|
enum: TimesheetSubmissionActionEnum,
|
|
@@ -3375,10 +3440,10 @@ __decorateClass([
|
|
|
3375
3440
|
})
|
|
3376
3441
|
], TimesheetLineHistory.prototype, "actionType", 2);
|
|
3377
3442
|
__decorateClass([
|
|
3378
|
-
(0,
|
|
3443
|
+
(0, import_typeorm25.Column)({ name: "remarks", type: "varchar", nullable: true })
|
|
3379
3444
|
], TimesheetLineHistory.prototype, "remarks", 2);
|
|
3380
3445
|
TimesheetLineHistory = __decorateClass([
|
|
3381
|
-
(0,
|
|
3446
|
+
(0, import_typeorm25.Entity)("timesheet_line_histories")
|
|
3382
3447
|
], TimesheetLineHistory);
|
|
3383
3448
|
|
|
3384
3449
|
// src/entities/timesheet-line.entity.ts
|
|
@@ -3396,113 +3461,68 @@ var TimesheetLineStatusEnum = /* @__PURE__ */ ((TimesheetLineStatusEnum2) => {
|
|
|
3396
3461
|
var TimesheetLine = class extends BaseEntity {
|
|
3397
3462
|
};
|
|
3398
3463
|
__decorateClass([
|
|
3399
|
-
(0,
|
|
3400
|
-
(0,
|
|
3464
|
+
(0, import_typeorm26.Column)({ name: "job_id", type: "integer", nullable: true }),
|
|
3465
|
+
(0, import_typeorm26.Index)()
|
|
3401
3466
|
], TimesheetLine.prototype, "jobId", 2);
|
|
3402
3467
|
__decorateClass([
|
|
3403
|
-
(0,
|
|
3404
|
-
(0,
|
|
3468
|
+
(0, import_typeorm26.ManyToOne)(() => Job, (job) => job.timesheetLine),
|
|
3469
|
+
(0, import_typeorm26.JoinColumn)({ name: "job_id" })
|
|
3405
3470
|
], TimesheetLine.prototype, "job", 2);
|
|
3406
3471
|
__decorateClass([
|
|
3407
|
-
(0,
|
|
3408
|
-
(0,
|
|
3472
|
+
(0, import_typeorm26.Column)({ name: "client_id", type: "integer", nullable: true }),
|
|
3473
|
+
(0, import_typeorm26.Index)()
|
|
3409
3474
|
], TimesheetLine.prototype, "clientId", 2);
|
|
3410
3475
|
__decorateClass([
|
|
3411
|
-
(0,
|
|
3412
|
-
(0,
|
|
3476
|
+
(0, import_typeorm26.ManyToOne)(() => User, (user) => user.clientTimesheetLine),
|
|
3477
|
+
(0, import_typeorm26.JoinColumn)({ name: "client_id" })
|
|
3413
3478
|
], TimesheetLine.prototype, "client", 2);
|
|
3414
3479
|
__decorateClass([
|
|
3415
|
-
(0,
|
|
3416
|
-
(0,
|
|
3480
|
+
(0, import_typeorm26.Column)({ name: "freelancer_id", type: "integer", nullable: true }),
|
|
3481
|
+
(0, import_typeorm26.Index)()
|
|
3417
3482
|
], TimesheetLine.prototype, "freelancerId", 2);
|
|
3418
3483
|
__decorateClass([
|
|
3419
|
-
(0,
|
|
3420
|
-
(0,
|
|
3484
|
+
(0, import_typeorm26.ManyToOne)(() => User, (user) => user.freelancerTimesheetLine),
|
|
3485
|
+
(0, import_typeorm26.JoinColumn)({ name: "freelancer_id" })
|
|
3421
3486
|
], TimesheetLine.prototype, "freelancer", 2);
|
|
3422
3487
|
__decorateClass([
|
|
3423
|
-
(0,
|
|
3488
|
+
(0, import_typeorm26.OneToMany)(() => TimesheetLogs, (timesheetLogs) => timesheetLogs.timesheetLine)
|
|
3424
3489
|
], TimesheetLine.prototype, "timesheetLogs", 2);
|
|
3425
3490
|
__decorateClass([
|
|
3426
|
-
(0,
|
|
3491
|
+
(0, import_typeorm26.OneToMany)(() => TimesheetLineHistory, (timesheetLineHistory) => timesheetLineHistory.timesheetLine)
|
|
3427
3492
|
], TimesheetLine.prototype, "timesheetLineHistory", 2);
|
|
3428
3493
|
__decorateClass([
|
|
3429
|
-
(0,
|
|
3494
|
+
(0, import_typeorm26.Column)({ name: "unique_id", type: "varchar", nullable: true })
|
|
3430
3495
|
], TimesheetLine.prototype, "uniqueId", 2);
|
|
3431
3496
|
__decorateClass([
|
|
3432
|
-
(0,
|
|
3497
|
+
(0, import_typeorm26.Column)({
|
|
3433
3498
|
name: "week_start_date",
|
|
3434
3499
|
type: "date",
|
|
3435
3500
|
nullable: true
|
|
3436
3501
|
})
|
|
3437
3502
|
], TimesheetLine.prototype, "weekStartDate", 2);
|
|
3438
3503
|
__decorateClass([
|
|
3439
|
-
(0,
|
|
3504
|
+
(0, import_typeorm26.Column)({
|
|
3440
3505
|
name: "week_end_date",
|
|
3441
3506
|
type: "date",
|
|
3442
3507
|
nullable: true
|
|
3443
3508
|
})
|
|
3444
3509
|
], TimesheetLine.prototype, "weekEndDate", 2);
|
|
3445
3510
|
__decorateClass([
|
|
3446
|
-
(0,
|
|
3511
|
+
(0, import_typeorm26.Column)({ name: "status", type: "enum", enum: TimesheetLineStatusEnum, nullable: true })
|
|
3447
3512
|
], TimesheetLine.prototype, "status", 2);
|
|
3448
3513
|
__decorateClass([
|
|
3449
|
-
(0,
|
|
3514
|
+
(0, import_typeorm26.Column)({ name: "weekly_hours_sum", type: "varchar", nullable: true })
|
|
3450
3515
|
], TimesheetLine.prototype, "weeklyHoursSum", 2);
|
|
3451
3516
|
__decorateClass([
|
|
3452
|
-
(0,
|
|
3517
|
+
(0, import_typeorm26.Column)({ name: "is_invoice_genrated", type: "boolean", default: false })
|
|
3453
3518
|
], TimesheetLine.prototype, "isInvoiceGenrated", 2);
|
|
3454
3519
|
__decorateClass([
|
|
3455
|
-
(0,
|
|
3520
|
+
(0, import_typeorm26.Column)({ name: "is_invoice_approved", type: "boolean", default: false })
|
|
3456
3521
|
], TimesheetLine.prototype, "isInvoiceApproved", 2);
|
|
3457
3522
|
TimesheetLine = __decorateClass([
|
|
3458
|
-
(0,
|
|
3523
|
+
(0, import_typeorm26.Entity)("timesheet_lines")
|
|
3459
3524
|
], TimesheetLine);
|
|
3460
3525
|
|
|
3461
|
-
// src/entities/client-candidate-preference.entity.ts
|
|
3462
|
-
var import_typeorm26 = require("typeorm");
|
|
3463
|
-
var ClientCandidatePreferenceEnum = /* @__PURE__ */ ((ClientCandidatePreferenceEnum2) => {
|
|
3464
|
-
ClientCandidatePreferenceEnum2["NOT_SUITABLE"] = "NOT_SUITABLE";
|
|
3465
|
-
ClientCandidatePreferenceEnum2["SHORTLISTED"] = "SHORTLISTED";
|
|
3466
|
-
return ClientCandidatePreferenceEnum2;
|
|
3467
|
-
})(ClientCandidatePreferenceEnum || {});
|
|
3468
|
-
var ClientCandidatePreference = class extends BaseEntity {
|
|
3469
|
-
};
|
|
3470
|
-
__decorateClass([
|
|
3471
|
-
(0, import_typeorm26.Column)({ name: "client_id", type: "integer" }),
|
|
3472
|
-
(0, import_typeorm26.Index)()
|
|
3473
|
-
], ClientCandidatePreference.prototype, "clientId", 2);
|
|
3474
|
-
__decorateClass([
|
|
3475
|
-
(0, import_typeorm26.ManyToOne)(() => User, (user) => user.clientPreferencesGiven),
|
|
3476
|
-
(0, import_typeorm26.JoinColumn)({ name: "client_id" })
|
|
3477
|
-
], ClientCandidatePreference.prototype, "client", 2);
|
|
3478
|
-
__decorateClass([
|
|
3479
|
-
(0, import_typeorm26.Column)({ name: "candidate_id", type: "integer" }),
|
|
3480
|
-
(0, import_typeorm26.Index)()
|
|
3481
|
-
], ClientCandidatePreference.prototype, "candidateId", 2);
|
|
3482
|
-
__decorateClass([
|
|
3483
|
-
(0, import_typeorm26.ManyToOne)(() => User, (user) => user.clientPreferencesReceived),
|
|
3484
|
-
(0, import_typeorm26.JoinColumn)({ name: "candidate_id" })
|
|
3485
|
-
], ClientCandidatePreference.prototype, "candidate", 2);
|
|
3486
|
-
__decorateClass([
|
|
3487
|
-
(0, import_typeorm26.Column)({ name: "job_id", type: "integer", nullable: true }),
|
|
3488
|
-
(0, import_typeorm26.Index)()
|
|
3489
|
-
], ClientCandidatePreference.prototype, "jobId", 2);
|
|
3490
|
-
__decorateClass([
|
|
3491
|
-
(0, import_typeorm26.ManyToOne)(() => Job, (job) => job.clientCandidatePreferences, { nullable: true }),
|
|
3492
|
-
(0, import_typeorm26.JoinColumn)({ name: "job_id" })
|
|
3493
|
-
], ClientCandidatePreference.prototype, "job", 2);
|
|
3494
|
-
__decorateClass([
|
|
3495
|
-
(0, import_typeorm26.Column)({
|
|
3496
|
-
name: "preference",
|
|
3497
|
-
type: "enum",
|
|
3498
|
-
enum: ClientCandidatePreferenceEnum
|
|
3499
|
-
}),
|
|
3500
|
-
(0, import_typeorm26.Index)()
|
|
3501
|
-
], ClientCandidatePreference.prototype, "preference", 2);
|
|
3502
|
-
ClientCandidatePreference = __decorateClass([
|
|
3503
|
-
(0, import_typeorm26.Entity)("client_candidate_preferences")
|
|
3504
|
-
], ClientCandidatePreference);
|
|
3505
|
-
|
|
3506
3526
|
// src/entities/invoice.entity.ts
|
|
3507
3527
|
var import_typeorm27 = require("typeorm");
|
|
3508
3528
|
var InvoiceStatusEnum = /* @__PURE__ */ ((InvoiceStatusEnum2) => {
|
|
@@ -3832,6 +3852,11 @@ __decorateClass([
|
|
|
3832
3852
|
cascade: true
|
|
3833
3853
|
})
|
|
3834
3854
|
], Job.prototype, "interviews", 2);
|
|
3855
|
+
__decorateClass([
|
|
3856
|
+
(0, import_typeorm28.OneToMany)(() => F2FInterview, (f2fInterview) => f2fInterview.job, {
|
|
3857
|
+
cascade: true
|
|
3858
|
+
})
|
|
3859
|
+
], Job.prototype, "f2fInterviews", 2);
|
|
3835
3860
|
__decorateClass([
|
|
3836
3861
|
(0, import_typeorm28.OneToMany)(
|
|
3837
3862
|
() => JobRecommendation,
|