@kipicore/dbcore 1.1.32 → 1.1.33

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.
Files changed (220) hide show
  1. package/dist/models/psql/SubCategoriesModel.d.ts +1 -0
  2. package/dist/models/psql/SubCategoriesModel.js +60 -63
  3. package/dist/models/psql/academicCalendarModel.d.ts +2 -3
  4. package/dist/models/psql/academicCalendarModel.js +45 -42
  5. package/dist/models/psql/accountHasReceiptDetailsModel.d.ts +6 -5
  6. package/dist/models/psql/accountHasReceiptDetailsModel.js +47 -68
  7. package/dist/models/psql/announcementModel.d.ts +10 -8
  8. package/dist/models/psql/announcementModel.js +90 -109
  9. package/dist/models/psql/areaModel.d.ts +5 -1
  10. package/dist/models/psql/areaModel.js +13 -12
  11. package/dist/models/psql/bankAccountDetailsModel.d.ts +6 -5
  12. package/dist/models/psql/bankAccountDetailsModel.js +25 -37
  13. package/dist/models/psql/bannerModel.d.ts +18 -18
  14. package/dist/models/psql/bannerModel.js +53 -81
  15. package/dist/models/psql/batchModel.d.ts +3 -1
  16. package/dist/models/psql/batchModel.js +77 -135
  17. package/dist/models/psql/batchSubjectBookAssessmentModel.d.ts +2 -1
  18. package/dist/models/psql/batchSubjectBookAssessmentModel.js +57 -104
  19. package/dist/models/psql/batchSubjectProjectAssessmentModel.d.ts +2 -1
  20. package/dist/models/psql/batchSubjectProjectAssessmentModel.js +59 -92
  21. package/dist/models/psql/bookAssessmentDateModel.d.ts +2 -1
  22. package/dist/models/psql/bookAssessmentDateModel.js +26 -46
  23. package/dist/models/psql/categoriesModel.d.ts +2 -1
  24. package/dist/models/psql/categoriesModel.js +25 -45
  25. package/dist/models/psql/cityModel.d.ts +2 -1
  26. package/dist/models/psql/cityModel.js +21 -33
  27. package/dist/models/psql/classRoomModel.d.ts +2 -1
  28. package/dist/models/psql/classRoomModel.js +41 -67
  29. package/dist/models/psql/cloudStorageModel.d.ts +2 -1
  30. package/dist/models/psql/cloudStorageModel.js +18 -29
  31. package/dist/models/psql/coinPurchaseOfferModel.d.ts +5 -4
  32. package/dist/models/psql/coinPurchaseOfferModel.js +18 -29
  33. package/dist/models/psql/contactFeedBackModel.d.ts +2 -1
  34. package/dist/models/psql/contactFeedBackModel.js +49 -62
  35. package/dist/models/psql/countryModel.d.ts +1 -1
  36. package/dist/models/psql/countryModel.js +2 -0
  37. package/dist/models/psql/courseHasVisitorsModel.d.ts +2 -1
  38. package/dist/models/psql/courseHasVisitorsModel.js +25 -38
  39. package/dist/models/psql/courseModel.d.ts +2 -1
  40. package/dist/models/psql/courseModel.js +41 -56
  41. package/dist/models/psql/driverModel.d.ts +3 -1
  42. package/dist/models/psql/driverModel.js +61 -65
  43. package/dist/models/psql/entityGroupModel.d.ts +2 -1
  44. package/dist/models/psql/entityGroupModel.js +25 -45
  45. package/dist/models/psql/facilityModel.d.ts +3 -1
  46. package/dist/models/psql/facilityModel.js +63 -73
  47. package/dist/models/psql/featureActionModel.d.ts +3 -2
  48. package/dist/models/psql/featureActionModel.js +21 -36
  49. package/dist/models/psql/feeHistoryDetailsModel.d.ts +2 -1
  50. package/dist/models/psql/feeHistoryDetailsModel.js +65 -106
  51. package/dist/models/psql/feeHistoryModel.d.ts +4 -2
  52. package/dist/models/psql/feeHistoryModel.js +154 -309
  53. package/dist/models/psql/feeReminderModel.d.ts +2 -0
  54. package/dist/models/psql/feeReminderModel.js +147 -179
  55. package/dist/models/psql/feeReminderSettingModel.d.ts +1 -0
  56. package/dist/models/psql/feeReminderSettingModel.js +23 -47
  57. package/dist/models/psql/feeTypeHasTermsModel.d.ts +1 -0
  58. package/dist/models/psql/feeTypeHasTermsModel.js +48 -51
  59. package/dist/models/psql/feeTypeModel.d.ts +1 -0
  60. package/dist/models/psql/feeTypeModel.js +44 -72
  61. package/dist/models/psql/feesCollectionModel.d.ts +2 -0
  62. package/dist/models/psql/feesCollectionModel.js +112 -144
  63. package/dist/models/psql/fileStorageModel.d.ts +1 -0
  64. package/dist/models/psql/fileStorageModel.js +27 -29
  65. package/dist/models/psql/floorManagementModel.d.ts +1 -0
  66. package/dist/models/psql/floorManagementModel.js +23 -42
  67. package/dist/models/psql/greetingsModel.d.ts +3 -2
  68. package/dist/models/psql/greetingsModel.js +64 -66
  69. package/dist/models/psql/homeWorkModel.d.ts +1 -0
  70. package/dist/models/psql/homeWorkModel.js +40 -70
  71. package/dist/models/psql/index.js +6 -3
  72. package/dist/models/psql/instituteEntityModel.d.ts +1 -0
  73. package/dist/models/psql/instituteEntityModel.js +59 -62
  74. package/dist/models/psql/instituteEntityTypeModel.d.ts +1 -0
  75. package/dist/models/psql/instituteEntityTypeModel.js +15 -28
  76. package/dist/models/psql/instituteModel.d.ts +1 -0
  77. package/dist/models/psql/instituteModel.js +66 -185
  78. package/dist/models/psql/instituteSubscriptionPlanModel.d.ts +1 -0
  79. package/dist/models/psql/instituteSubscriptionPlanModel.js +40 -81
  80. package/dist/models/psql/inventoryHistoryModel.d.ts +1 -0
  81. package/dist/models/psql/inventoryHistoryModel.js +39 -79
  82. package/dist/models/psql/inventoryModel.d.ts +1 -0
  83. package/dist/models/psql/inventoryModel.js +31 -62
  84. package/dist/models/psql/lectureHistoryModel.d.ts +1 -0
  85. package/dist/models/psql/lectureHistoryModel.js +65 -196
  86. package/dist/models/psql/lectureModel.d.ts +2 -0
  87. package/dist/models/psql/lectureModel.js +191 -454
  88. package/dist/models/psql/masterLeaveModel.d.ts +2 -0
  89. package/dist/models/psql/masterLeaveModel.js +71 -71
  90. package/dist/models/psql/moduleFeatureModel.d.ts +1 -0
  91. package/dist/models/psql/moduleFeatureModel.js +41 -44
  92. package/dist/models/psql/moduleModel.d.ts +1 -0
  93. package/dist/models/psql/moduleModel.js +48 -52
  94. package/dist/models/psql/offerModel.d.ts +1 -0
  95. package/dist/models/psql/offerModel.js +43 -64
  96. package/dist/models/psql/paymentTermsModel.d.ts +1 -0
  97. package/dist/models/psql/paymentTermsModel.js +43 -45
  98. package/dist/models/psql/pdcChequeModel.d.ts +1 -0
  99. package/dist/models/psql/pdcChequeModel.js +59 -64
  100. package/dist/models/psql/pdcHistoryModel.d.ts +1 -0
  101. package/dist/models/psql/pdcHistoryModel.js +55 -73
  102. package/dist/models/psql/pincodeModel.d.ts +1 -0
  103. package/dist/models/psql/pincodeModel.js +6 -9
  104. package/dist/models/psql/productModel.d.ts +1 -0
  105. package/dist/models/psql/productModel.js +40 -80
  106. package/dist/models/psql/projectAssessmentOptionModel.d.ts +1 -0
  107. package/dist/models/psql/projectAssessmentOptionModel.js +23 -45
  108. package/dist/models/psql/roleModel.d.ts +1 -0
  109. package/dist/models/psql/roleModel.js +15 -38
  110. package/dist/models/psql/rulesRegulationModel.d.ts +3 -2
  111. package/dist/models/psql/rulesRegulationModel.js +20 -33
  112. package/dist/models/psql/schoolFeeCollectionModel.d.ts +1 -0
  113. package/dist/models/psql/schoolFeeCollectionModel.js +47 -94
  114. package/dist/models/psql/schoolOfferModel.d.ts +1 -0
  115. package/dist/models/psql/schoolOfferModel.js +39 -78
  116. package/dist/models/psql/sendNotificationModel.d.ts +1 -0
  117. package/dist/models/psql/sendNotificationModel.js +37 -61
  118. package/dist/models/psql/slotModel.d.ts +2 -0
  119. package/dist/models/psql/slotModel.js +46 -58
  120. package/dist/models/psql/stateModel.d.ts +1 -0
  121. package/dist/models/psql/stateModel.js +17 -18
  122. package/dist/models/psql/subjectHasFeeModel.d.ts +1 -0
  123. package/dist/models/psql/subjectHasFeeModel.js +49 -46
  124. package/dist/models/psql/subjectHasPayFeeHistoryModel.d.ts +1 -0
  125. package/dist/models/psql/subjectHasPayFeeHistoryModel.js +74 -69
  126. package/dist/models/psql/syllabusModel.d.ts +1 -0
  127. package/dist/models/psql/syllabusModel.js +72 -85
  128. package/dist/models/psql/testimonialModel.d.ts +2 -0
  129. package/dist/models/psql/testimonialModel.js +97 -100
  130. package/dist/models/psql/toDoModel.d.ts +2 -0
  131. package/dist/models/psql/toDoModel.js +64 -64
  132. package/dist/models/psql/tripModel.d.ts +1 -0
  133. package/dist/models/psql/tripModel.js +51 -55
  134. package/dist/models/psql/typeManagementModel.d.ts +2 -0
  135. package/dist/models/psql/typeManagementModel.js +69 -69
  136. package/dist/models/psql/userBookAssessmentModel.d.ts +1 -0
  137. package/dist/models/psql/userBookAssessmentModel.js +83 -89
  138. package/dist/models/psql/userFeeTypeByAccountModel.d.ts +1 -0
  139. package/dist/models/psql/userFeeTypeByAccountModel.js +117 -122
  140. package/dist/models/psql/userFeeTypeModel.d.ts +1 -0
  141. package/dist/models/psql/userFeeTypeModel.js +97 -102
  142. package/dist/models/psql/userHasAnnouncementModel.d.ts +1 -0
  143. package/dist/models/psql/userHasAnnouncementModel.js +63 -66
  144. package/dist/models/psql/userHasBatchModel.d.ts +1 -0
  145. package/dist/models/psql/userHasBatchModel.js +55 -57
  146. package/dist/models/psql/userHasCourseModel.d.ts +1 -0
  147. package/dist/models/psql/userHasCourseModel.js +51 -55
  148. package/dist/models/psql/userHasDeviceModel.d.ts +1 -0
  149. package/dist/models/psql/userHasDeviceModel.js +35 -38
  150. package/dist/models/psql/userHasFeeTermsModel.d.ts +1 -0
  151. package/dist/models/psql/userHasFeeTermsModel.js +51 -117
  152. package/dist/models/psql/userHasFileModel.d.ts +1 -0
  153. package/dist/models/psql/userHasFileModel.js +33 -61
  154. package/dist/models/psql/userHasHomeWorkModel.d.ts +9 -6
  155. package/dist/models/psql/userHasHomeWorkModel.js +50 -72
  156. package/dist/models/psql/userHasInventoryHistoryModel.d.ts +5 -4
  157. package/dist/models/psql/userHasInventoryHistoryModel.js +42 -59
  158. package/dist/models/psql/userHasInventoryModel.d.ts +5 -4
  159. package/dist/models/psql/userHasInventoryModel.js +30 -54
  160. package/dist/models/psql/userHasLeaveHistoryModel.d.ts +5 -4
  161. package/dist/models/psql/userHasLeaveHistoryModel.js +21 -36
  162. package/dist/models/psql/userHasLeaveModel.d.ts +6 -5
  163. package/dist/models/psql/userHasLeaveModel.js +47 -68
  164. package/dist/models/psql/userHasOfferModel.d.ts +8 -7
  165. package/dist/models/psql/userHasOfferModel.js +54 -109
  166. package/dist/models/psql/userHasParentModel.d.ts +7 -5
  167. package/dist/models/psql/userHasParentModel.js +38 -65
  168. package/dist/models/psql/userHasRoleModel.d.ts +6 -5
  169. package/dist/models/psql/userHasRoleModel.js +27 -56
  170. package/dist/models/psql/userHasRollNumberModel.d.ts +5 -4
  171. package/dist/models/psql/userHasRollNumberModel.js +39 -54
  172. package/dist/models/psql/userHasStorageModel.d.ts +5 -4
  173. package/dist/models/psql/userHasStorageModel.js +31 -35
  174. package/dist/models/psql/userHasSubjectFeeModel.d.ts +5 -4
  175. package/dist/models/psql/userHasSubjectFeeModel.js +32 -47
  176. package/dist/models/psql/userLeaveRequestModel.d.ts +6 -5
  177. package/dist/models/psql/userLeaveRequestModel.js +24 -40
  178. package/dist/models/psql/userModel.d.ts +2 -2
  179. package/dist/models/psql/userModel.js +174 -370
  180. package/dist/models/psql/userPayoutDetailsModel.d.ts +1 -0
  181. package/dist/models/psql/userPayoutDetailsModel.js +65 -146
  182. package/dist/models/psql/userPayoutHistoryModel.d.ts +1 -0
  183. package/dist/models/psql/userPayoutHistoryModel.js +39 -66
  184. package/dist/models/psql/userPayoutModel.d.ts +2 -0
  185. package/dist/models/psql/userPayoutModel.js +205 -240
  186. package/dist/models/psql/userProjectAssessmentOptionModel.d.ts +1 -0
  187. package/dist/models/psql/userProjectAssessmentOptionModel.js +39 -74
  188. package/dist/models/psql/userRequiredStepsModel.d.ts +1 -0
  189. package/dist/models/psql/userRequiredStepsModel.js +23 -36
  190. package/dist/models/psql/vehicleModel.d.ts +1 -0
  191. package/dist/models/psql/vehicleModel.js +27 -53
  192. package/dist/models/psql/vendorManagementModel.d.ts +6 -5
  193. package/dist/models/psql/vendorManagementModel.js +48 -97
  194. package/dist/models/psql/walletHistoryModel.d.ts +2 -1
  195. package/dist/models/psql/walletHistoryModel.js +31 -33
  196. package/dist/models/psql/walletModel.d.ts +2 -1
  197. package/dist/models/psql/walletModel.js +28 -46
  198. package/dist/models/psql/workingDayModel.d.ts +3 -2
  199. package/dist/models/psql/workingDayModel.js +18 -31
  200. package/dist/models/psql/workingShiftModel.d.ts +3 -2
  201. package/dist/models/psql/workingShiftModel.js +43 -40
  202. package/dist/types/accountHasReceiptDetailsType.d.ts +1 -1
  203. package/dist/types/bannerType.d.ts +1 -1
  204. package/dist/types/batchSubjectBookAssessmentType.d.ts +1 -1
  205. package/dist/types/batchSubjectProjectAssessmentType.d.ts +1 -1
  206. package/dist/types/batchType.d.ts +1 -1
  207. package/dist/types/bookAssessmentDateType.d.ts +1 -1
  208. package/dist/types/examType.d.ts +1 -1
  209. package/dist/types/feeHistoryType.d.ts +1 -1
  210. package/dist/types/greetingsType.d.ts +1 -1
  211. package/dist/types/holidayType.js +1 -1
  212. package/dist/types/paymentTermsType.js +1 -1
  213. package/dist/types/projectAssessmentOptionType.d.ts +1 -1
  214. package/dist/types/subjectIndexType.d.ts +1 -1
  215. package/dist/types/syllabusType.d.ts +1 -1
  216. package/dist/types/testimonialType.d.ts +1 -1
  217. package/dist/types/userBookAssessmentType.d.ts +1 -1
  218. package/dist/types/userHasBatchType.d.ts +1 -1
  219. package/dist/types/userProjectAssessmentOptionType.d.ts +1 -1
  220. package/package.json +1 -1
@@ -6,199 +6,184 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const sequelize_1 = require("sequelize");
7
7
  const index_1 = require("./index");
8
8
  const app_1 = require("../../constants/app");
9
- const countryModel_1 = __importDefault(require("./countryModel"));
10
- const stateModel_1 = __importDefault(require("./stateModel"));
11
- const cityModel_1 = __importDefault(require("./cityModel"));
12
- const tokenModel_1 = __importDefault(require("./tokenModel"));
13
- const areaModel_1 = __importDefault(require("./areaModel"));
14
- const utils_1 = require("../../helpers/utils");
15
9
  const uniqueNumberCounterModel_1 = __importDefault(require("../mongodb/uniqueNumberCounterModel"));
10
+ const utils_1 = require("../../helpers/utils");
16
11
  class UserModel extends sequelize_1.Model {
17
- // declare addParent: BelongsToManyAddAssociationMixin<UserModel, string>;
18
- // declare getParents: BelongsToManyGetAssociationsMixin<UserModel>;
19
- static associate() { }
12
+ static associate(models) {
13
+ const { CountryModel, StateModel, CityModel, TokenModel, UserModel, AreaModel } = models;
14
+ UserModel.belongsTo(CountryModel, { foreignKey: 'country' });
15
+ UserModel.belongsTo(StateModel, { foreignKey: 'state' });
16
+ UserModel.belongsTo(CityModel, { foreignKey: 'city' });
17
+ UserModel.hasMany(TokenModel, {
18
+ foreignKey: { name: 'userId', field: 'user_id', allowNull: false },
19
+ sourceKey: 'id',
20
+ as: 'tokens',
21
+ });
22
+ UserModel.belongsTo(UserModel, {
23
+ foreignKey: { name: 'createdBy', allowNull: true, field: 'created_by' },
24
+ as: 'createdByUser',
25
+ });
26
+ UserModel.belongsTo(UserModel, {
27
+ foreignKey: { name: 'updatedBy', allowNull: true, field: 'updated_by' },
28
+ as: 'updatedByUser',
29
+ });
30
+ UserModel.belongsTo(UserModel, {
31
+ foreignKey: { name: 'deletedBy', allowNull: true, field: 'deleted_by' },
32
+ as: 'deletedByUser',
33
+ });
34
+ }
35
+ static addHooks(models) {
36
+ const { AreaModel, CityModel } = models;
37
+ const upsertArea = async (city) => {
38
+ try {
39
+ const exists = await AreaModel.findOne({ where: { city } });
40
+ if (!exists) {
41
+ const cityData = await CityModel.findOne({ where: { id: city } });
42
+ if (cityData) {
43
+ const areas = await (0, utils_1.getCityAreas)(cityData.name);
44
+ const data = areas.map(name => ({
45
+ area: name,
46
+ city,
47
+ }));
48
+ await AreaModel.bulkCreate(data);
49
+ }
50
+ }
51
+ }
52
+ catch (err) {
53
+ throw err;
54
+ }
55
+ };
56
+ const beforeUpdateHook = async (user) => {
57
+ if (user.type === app_1.USER_TYPES.PARENTS || user.type === app_1.USER_TYPES.STUDENT) {
58
+ user.appType = app_1.APP_TYPE.STUDENT_APP;
59
+ }
60
+ if (user.city) {
61
+ upsertArea(user.city);
62
+ }
63
+ };
64
+ const generateGlobalUniqueNumber = async (type, userType) => {
65
+ const MAX_NUMBER = 99999999;
66
+ let rollNumber = '';
67
+ if (userType && type) {
68
+ const USER_TYPE_PREFIXES = {
69
+ [app_1.USER_TYPES.MASTER_ADMIN]: 'K-MA',
70
+ [app_1.USER_TYPES.ADMIN]: 'K-ADM',
71
+ [app_1.USER_TYPES.INSTITUTE_MASTER_ADMIN]: 'K-IMA',
72
+ [app_1.USER_TYPES.INSTITUTE_ADMIN]: 'K-IA',
73
+ [app_1.USER_TYPES.TEACHER]: 'K-TEA',
74
+ [app_1.USER_TYPES.STUDENT]: 'K-STU',
75
+ [app_1.USER_TYPES.PARENTS]: 'K-PAR',
76
+ [app_1.USER_TYPES.DRIVER]: 'K-DRI',
77
+ };
78
+ const prefix = USER_TYPE_PREFIXES[userType] || `K-${userType.substring(0, 3).toUpperCase()}`;
79
+ let data = await uniqueNumberCounterModel_1.default.findOne({ type, userType, instituteId: null });
80
+ if (!data) {
81
+ data = await uniqueNumberCounterModel_1.default.create({ type, userType, lastRollNumber: 1, letterCode: 'A' });
82
+ }
83
+ else {
84
+ data.letterCode = data.letterCode || 'A';
85
+ if (data.lastRollNumber >= MAX_NUMBER) {
86
+ data.lastRollNumber = 1;
87
+ data.letterCode = (0, utils_1.getNextLetter)(data.letterCode);
88
+ }
89
+ else {
90
+ data.lastRollNumber += 1;
91
+ }
92
+ await uniqueNumberCounterModel_1.default.updateOne({ id: data.id }, { $set: { lastRollNumber: data.lastRollNumber, letterCode: data.letterCode } });
93
+ }
94
+ rollNumber = `${prefix}-${data.letterCode}-${String(data.lastRollNumber).padStart(8, '0')}`;
95
+ }
96
+ if (type && !userType) {
97
+ const prefix = `K-${type.substring(0, 3).toUpperCase()}`;
98
+ let data = await uniqueNumberCounterModel_1.default.findOne({ type, userType: null, instituteId: null });
99
+ if (!data) {
100
+ data = await uniqueNumberCounterModel_1.default.create({ type, lastRollNumber: 1, letterCode: 'A' });
101
+ }
102
+ else {
103
+ data.letterCode = data.letterCode || 'A';
104
+ if (data.lastRollNumber >= MAX_NUMBER) {
105
+ data.lastRollNumber = 1;
106
+ data.letterCode = (0, utils_1.getNextLetter)(data.letterCode);
107
+ }
108
+ else {
109
+ data.lastRollNumber += 1;
110
+ }
111
+ await uniqueNumberCounterModel_1.default.updateOne({ id: data.id }, { $set: { lastRollNumber: data.lastRollNumber, letterCode: data.letterCode } });
112
+ }
113
+ rollNumber = `${prefix}-${data.letterCode}-${String(data.lastRollNumber).padStart(8, '0')}`;
114
+ }
115
+ return rollNumber;
116
+ };
117
+ const userBeforeCreateHook = async (user) => {
118
+ if (user.type === app_1.USER_TYPES.PARENTS || user.type === app_1.USER_TYPES.STUDENT) {
119
+ user.appType = app_1.APP_TYPE.STUDENT_APP;
120
+ }
121
+ if (user.type) {
122
+ user.globalId = await generateGlobalUniqueNumber(app_1.TYPE_OF_USER.USER, user.type);
123
+ }
124
+ user.uuid = crypto.randomUUID();
125
+ const where = { email: user.email, uuid: { [sequelize_1.Op.ne]: null } };
126
+ const existUuid = await UserModel.findOne({ where });
127
+ if (existUuid)
128
+ user.uuid = existUuid.uuid;
129
+ if (user.city) {
130
+ upsertArea(user.city);
131
+ }
132
+ if (user.email) {
133
+ user.email = user.email.toLowerCase().trim();
134
+ }
135
+ };
136
+ UserModel.beforeCreate(userBeforeCreateHook);
137
+ UserModel.beforeBulkCreate(async (instances) => {
138
+ for (const instance of instances) {
139
+ await userBeforeCreateHook(instance);
140
+ }
141
+ });
142
+ UserModel.beforeBulkUpdate(async (options) => {
143
+ await beforeUpdateHook(options.attributes);
144
+ });
145
+ }
20
146
  }
21
147
  UserModel.init({
22
- id: {
23
- type: sequelize_1.DataTypes.UUID,
24
- defaultValue: sequelize_1.DataTypes.UUIDV4,
25
- allowNull: false,
26
- primaryKey: true,
27
- },
28
- uuid: {
29
- type: sequelize_1.DataTypes.UUID,
30
- allowNull: true,
31
- },
32
- firstName: {
33
- type: sequelize_1.DataTypes.STRING(25),
34
- allowNull: false,
35
- field: 'first_name',
36
- },
37
- lastName: {
38
- type: sequelize_1.DataTypes.STRING(25),
39
- allowNull: false,
40
- field: 'last_name',
41
- },
42
- middleName: {
43
- type: sequelize_1.DataTypes.STRING(25),
44
- allowNull: true,
45
- field: 'middle_name',
46
- },
47
- email: {
48
- type: sequelize_1.DataTypes.STRING(50),
49
- allowNull: false,
50
- },
51
- // userProfileImage: {
52
- // type: DataTypes.UUID,
53
- // allowNull: true,
54
- // field: 'profile_image',
55
- // },
56
- mobile: {
57
- type: sequelize_1.DataTypes.STRING(10),
58
- allowNull: true,
59
- },
60
- password: {
61
- type: sequelize_1.DataTypes.STRING,
62
- allowNull: true,
63
- },
64
- emailVerification: {
65
- type: sequelize_1.DataTypes.STRING(30),
66
- allowNull: false,
67
- field: 'email_varification',
68
- defaultValue: app_1.EMAIL_VERIFICATION.PENDING,
69
- },
70
- mobileVerification: {
71
- type: sequelize_1.DataTypes.STRING(30),
72
- allowNull: false,
73
- field: 'mobile_varification',
74
- defaultValue: app_1.MOBILE_VERIFICATION.PENDING,
75
- },
76
- appType: {
77
- type: sequelize_1.DataTypes.ENUM,
78
- values: Object.values(app_1.APP_TYPE),
79
- allowNull: true,
80
- field: 'app_type',
81
- defaultValue: app_1.APP_TYPE.INSTITUTE_APP,
82
- },
83
- type: {
84
- type: sequelize_1.DataTypes.STRING(30),
85
- allowNull: false,
86
- },
87
- globalId: {
88
- type: sequelize_1.DataTypes.STRING,
89
- field: 'global_id',
90
- defaultValue: null,
91
- allowNull: true,
92
- },
93
- address1: {
94
- type: sequelize_1.DataTypes.STRING,
95
- allowNull: true,
96
- },
97
- address2: {
98
- type: sequelize_1.DataTypes.STRING,
99
- allowNull: true,
100
- },
101
- gender: {
102
- type: sequelize_1.DataTypes.STRING,
103
- allowNull: true,
104
- },
105
- dob: {
106
- type: sequelize_1.DataTypes.STRING,
107
- allowNull: true,
108
- },
109
- bloodGroup: {
110
- type: sequelize_1.DataTypes.STRING,
111
- allowNull: true,
112
- },
113
- motherTongue: {
114
- type: sequelize_1.DataTypes.STRING,
115
- allowNull: true,
116
- },
117
- otherLanguages: {
118
- type: sequelize_1.DataTypes.STRING,
119
- allowNull: true,
120
- },
121
- degree: {
122
- type: sequelize_1.DataTypes.STRING,
123
- allowNull: true,
124
- },
125
- college: {
126
- type: sequelize_1.DataTypes.STRING,
127
- allowNull: true,
128
- },
129
- passingYear: {
130
- type: sequelize_1.DataTypes.STRING,
131
- allowNull: true,
132
- },
133
- pinCode: {
134
- type: sequelize_1.DataTypes.STRING,
135
- allowNull: true,
136
- field: 'pin_code',
137
- },
138
- country: {
139
- type: sequelize_1.DataTypes.INTEGER,
140
- allowNull: true,
141
- },
142
- area: {
143
- type: sequelize_1.DataTypes.STRING,
144
- allowNull: true,
145
- },
146
- district: {
147
- type: sequelize_1.DataTypes.STRING,
148
- allowNull: true,
149
- },
150
- state: {
151
- type: sequelize_1.DataTypes.INTEGER,
152
- allowNull: true,
153
- },
154
- city: {
155
- type: sequelize_1.DataTypes.INTEGER,
156
- allowNull: true,
157
- },
158
- verificationOtp: {
159
- type: sequelize_1.DataTypes.STRING(10),
160
- allowNull: true,
161
- },
162
- schoolName: {
163
- type: sequelize_1.DataTypes.STRING,
164
- allowNull: true,
165
- field: 'school_name',
166
- },
167
- board: {
168
- type: sequelize_1.DataTypes.STRING,
169
- allowNull: true,
170
- },
171
- medium: {
172
- type: sequelize_1.DataTypes.STRING,
173
- allowNull: true,
174
- },
175
- standard: {
176
- type: sequelize_1.DataTypes.STRING,
177
- allowNull: true,
178
- },
179
- stream: {
180
- type: sequelize_1.DataTypes.STRING,
181
- allowNull: true,
182
- },
183
- schoolAddress: {
184
- type: sequelize_1.DataTypes.STRING,
185
- allowNull: true,
186
- field: 'school_address',
187
- },
188
- knownAllergies: {
189
- type: sequelize_1.DataTypes.STRING,
190
- allowNull: true,
191
- field: 'known_allergies',
192
- },
193
- medications: {
194
- type: sequelize_1.DataTypes.STRING,
195
- allowNull: true,
196
- field: 'medications',
197
- },
198
- relation: {
199
- type: sequelize_1.DataTypes.STRING,
200
- allowNull: true,
201
- },
148
+ id: { type: sequelize_1.DataTypes.UUID, defaultValue: sequelize_1.DataTypes.UUIDV4, allowNull: false, primaryKey: true },
149
+ uuid: { type: sequelize_1.DataTypes.UUID, allowNull: true },
150
+ firstName: { type: sequelize_1.DataTypes.STRING(25), allowNull: false, field: 'first_name' },
151
+ lastName: { type: sequelize_1.DataTypes.STRING(25), allowNull: false, field: 'last_name' },
152
+ middleName: { type: sequelize_1.DataTypes.STRING(25), allowNull: true, field: 'middle_name' },
153
+ email: { type: sequelize_1.DataTypes.STRING(50), allowNull: false },
154
+ mobile: { type: sequelize_1.DataTypes.STRING(10), allowNull: true },
155
+ password: { type: sequelize_1.DataTypes.STRING, allowNull: true },
156
+ emailVerification: { type: sequelize_1.DataTypes.STRING(30), allowNull: false, field: 'email_varification', defaultValue: app_1.EMAIL_VERIFICATION.PENDING },
157
+ mobileVerification: { type: sequelize_1.DataTypes.STRING(30), allowNull: false, field: 'mobile_varification', defaultValue: app_1.MOBILE_VERIFICATION.PENDING },
158
+ appType: { type: sequelize_1.DataTypes.ENUM, values: Object.values(app_1.APP_TYPE), allowNull: true, field: 'app_type', defaultValue: app_1.APP_TYPE.INSTITUTE_APP },
159
+ type: { type: sequelize_1.DataTypes.STRING(30), allowNull: false },
160
+ globalId: { type: sequelize_1.DataTypes.STRING, field: 'global_id', defaultValue: null, allowNull: true },
161
+ address1: { type: sequelize_1.DataTypes.STRING, allowNull: true },
162
+ address2: { type: sequelize_1.DataTypes.STRING, allowNull: true },
163
+ gender: { type: sequelize_1.DataTypes.STRING, allowNull: true },
164
+ dob: { type: sequelize_1.DataTypes.STRING, allowNull: true },
165
+ bloodGroup: { type: sequelize_1.DataTypes.STRING, allowNull: true },
166
+ motherTongue: { type: sequelize_1.DataTypes.STRING, allowNull: true },
167
+ otherLanguages: { type: sequelize_1.DataTypes.STRING, allowNull: true },
168
+ degree: { type: sequelize_1.DataTypes.STRING, allowNull: true },
169
+ college: { type: sequelize_1.DataTypes.STRING, allowNull: true },
170
+ passingYear: { type: sequelize_1.DataTypes.STRING, allowNull: true },
171
+ pinCode: { type: sequelize_1.DataTypes.STRING, allowNull: true, field: 'pin_code' },
172
+ country: { type: sequelize_1.DataTypes.INTEGER, allowNull: true },
173
+ area: { type: sequelize_1.DataTypes.STRING, allowNull: true },
174
+ district: { type: sequelize_1.DataTypes.STRING, allowNull: true },
175
+ state: { type: sequelize_1.DataTypes.INTEGER, allowNull: true },
176
+ city: { type: sequelize_1.DataTypes.INTEGER, allowNull: true },
177
+ verificationOtp: { type: sequelize_1.DataTypes.STRING(10), allowNull: true },
178
+ schoolName: { type: sequelize_1.DataTypes.STRING, allowNull: true, field: 'school_name' },
179
+ board: { type: sequelize_1.DataTypes.STRING, allowNull: true },
180
+ medium: { type: sequelize_1.DataTypes.STRING, allowNull: true },
181
+ standard: { type: sequelize_1.DataTypes.STRING, allowNull: true },
182
+ stream: { type: sequelize_1.DataTypes.STRING, allowNull: true },
183
+ schoolAddress: { type: sequelize_1.DataTypes.STRING, allowNull: true, field: 'school_address' },
184
+ knownAllergies: { type: sequelize_1.DataTypes.STRING, allowNull: true, field: 'known_allergies' },
185
+ medications: { type: sequelize_1.DataTypes.STRING, allowNull: true, field: 'medications' },
186
+ relation: { type: sequelize_1.DataTypes.STRING, allowNull: true },
202
187
  }, {
203
188
  modelName: 'UserModel',
204
189
  tableName: 'users',
@@ -206,185 +191,4 @@ UserModel.init({
206
191
  paranoid: true,
207
192
  sequelize: index_1.sequelize,
208
193
  });
209
- UserModel.belongsTo(countryModel_1.default, { foreignKey: 'country' });
210
- UserModel.belongsTo(stateModel_1.default, { foreignKey: 'state' });
211
- UserModel.belongsTo(cityModel_1.default, { foreignKey: 'city' });
212
- UserModel.hasMany(tokenModel_1.default, {
213
- foreignKey: {
214
- name: 'userId',
215
- field: 'user_id',
216
- allowNull: false,
217
- },
218
- sourceKey: 'id',
219
- as: 'tokens',
220
- });
221
- UserModel.belongsTo(UserModel, {
222
- foreignKey: {
223
- name: 'createdBy',
224
- allowNull: true,
225
- field: 'created_by',
226
- },
227
- as: 'createdByUser',
228
- });
229
- UserModel.belongsTo(UserModel, {
230
- foreignKey: {
231
- name: 'updatedBy',
232
- allowNull: true,
233
- field: 'updated_by',
234
- },
235
- as: 'updatedByUser',
236
- });
237
- // UserModel.belongsTo(FileStorageModel, { foreignKey: 'userProfileImage', as: 'userProfileImageDetails' });
238
- UserModel.belongsTo(UserModel, {
239
- foreignKey: {
240
- name: 'deletedBy',
241
- allowNull: true,
242
- field: 'deleted_by',
243
- },
244
- as: 'deletedByUser',
245
- });
246
- const upsertArea = async (city) => {
247
- try {
248
- const exists = await areaModel_1.default.findOne({ where: { city: city } });
249
- if (!exists) {
250
- const cityData = await cityModel_1.default.findOne({ where: { id: city } });
251
- if (cityData) {
252
- const areas = await (0, utils_1.getCityAreas)(cityData.name);
253
- const data = areas.map(name => ({
254
- area: name,
255
- city,
256
- }));
257
- await areaModel_1.default.bulkCreate(data);
258
- }
259
- }
260
- }
261
- catch (err) {
262
- throw err;
263
- }
264
- };
265
- const beforeUpdateHook = async (user) => {
266
- if (user.type === app_1.USER_TYPES.PARENTS || user.type === app_1.USER_TYPES.STUDENT) {
267
- user.appType = app_1.APP_TYPE.STUDENT_APP;
268
- }
269
- if (user.city) {
270
- upsertArea(user.city);
271
- }
272
- };
273
- const generateGlobalUniqueNumber = async (type, userType) => {
274
- const MAX_NUMBER = 99999999;
275
- let rollNumber = '';
276
- if (userType && type) {
277
- const USER_TYPE_PREFIXES = {
278
- [app_1.USER_TYPES.MASTER_ADMIN]: 'K-MA',
279
- [app_1.USER_TYPES.ADMIN]: 'K-ADM',
280
- [app_1.USER_TYPES.INSTITUTE_MASTER_ADMIN]: 'K-IMA',
281
- [app_1.USER_TYPES.INSTITUTE_ADMIN]: 'K-IA',
282
- [app_1.USER_TYPES.TEACHER]: 'K-TEA',
283
- [app_1.USER_TYPES.STUDENT]: 'K-STU',
284
- [app_1.USER_TYPES.PARENTS]: 'K-PAR',
285
- [app_1.USER_TYPES.DRIVER]: 'K-DRI',
286
- };
287
- const prefix = USER_TYPE_PREFIXES[userType] || `K-${userType.substring(0, 3).toUpperCase()}`;
288
- let data = await uniqueNumberCounterModel_1.default.findOne({
289
- type: type,
290
- userType: userType,
291
- instituteId: null,
292
- });
293
- if (!data) {
294
- data = await uniqueNumberCounterModel_1.default.create({
295
- type: type,
296
- userType: userType,
297
- lastRollNumber: 1,
298
- letterCode: 'A',
299
- });
300
- }
301
- else {
302
- data.letterCode = data.letterCode || 'A';
303
- if (data.lastRollNumber >= MAX_NUMBER) {
304
- data.lastRollNumber = 1;
305
- data.letterCode = (0, utils_1.getNextLetter)(data.letterCode);
306
- }
307
- else {
308
- data.lastRollNumber += 1;
309
- }
310
- await uniqueNumberCounterModel_1.default.updateOne({ id: data.id }, {
311
- $set: {
312
- lastRollNumber: data.lastRollNumber,
313
- letterCode: data.letterCode,
314
- },
315
- });
316
- }
317
- rollNumber = `${prefix}-${data.letterCode}-${String(data.lastRollNumber).padStart(8, '0')}`;
318
- }
319
- if (type && !userType) {
320
- const prefix = `K-${type.substring(0, 3).toUpperCase()}`;
321
- let data = await uniqueNumberCounterModel_1.default.findOne({
322
- type: type,
323
- userType: null,
324
- instituteId: null,
325
- });
326
- if (!data) {
327
- data = await uniqueNumberCounterModel_1.default.create({
328
- type: type,
329
- lastRollNumber: 1,
330
- letterCode: 'A',
331
- });
332
- }
333
- else {
334
- data.letterCode = data.letterCode || 'A';
335
- if (data.lastRollNumber >= MAX_NUMBER) {
336
- data.lastRollNumber = 1;
337
- data.letterCode = (0, utils_1.getNextLetter)(data.letterCode);
338
- }
339
- else {
340
- data.lastRollNumber += 1;
341
- }
342
- await uniqueNumberCounterModel_1.default.updateOne({ id: data.id }, {
343
- $set: {
344
- lastRollNumber: data.lastRollNumber,
345
- letterCode: data.letterCode,
346
- },
347
- });
348
- }
349
- rollNumber = `${prefix}-${data.letterCode}-${String(data.lastRollNumber).padStart(8, '0')}`;
350
- }
351
- return rollNumber;
352
- };
353
- const userBeforeCreateHook = async (user) => {
354
- if (user.type === app_1.USER_TYPES.PARENTS || user.type === app_1.USER_TYPES.STUDENT) {
355
- user.appType = app_1.APP_TYPE.STUDENT_APP;
356
- }
357
- if (user.type) {
358
- user.globalId = await generateGlobalUniqueNumber(app_1.TYPE_OF_USER.USER, user.type);
359
- }
360
- user.uuid = crypto.randomUUID();
361
- const where = {
362
- email: user.email,
363
- uuid: { [sequelize_1.Op.ne]: null }, // uuid must not be null
364
- };
365
- const existUuid = await UserModel.findOne({ where });
366
- if (existUuid)
367
- user.uuid = existUuid.uuid;
368
- if (user.city) {
369
- upsertArea(user.city);
370
- }
371
- if (user.email) {
372
- user.email = user.email.toLowerCase().trim();
373
- }
374
- };
375
- UserModel.beforeCreate(userBeforeCreateHook);
376
- UserModel.beforeBulkCreate(async (instances) => {
377
- for (const instance of instances) {
378
- await userBeforeCreateHook(instance);
379
- }
380
- });
381
- UserModel.beforeBulkUpdate(async (options) => {
382
- await beforeUpdateHook(options.attributes);
383
- });
384
- // UserModel.belongsToMany(UserModel, {
385
- // through: 'user_parents', // The join table
386
- // as: 'parents',
387
- // foreignKey: 'userId',
388
- // otherKey: 'parentId',
389
- // });
390
194
  exports.default = UserModel;
@@ -17,5 +17,6 @@ declare class UserPayoutDetailsModel extends Model<IUserPayoutDetailsModelAttrib
17
17
  readonly createdAt: Date;
18
18
  readonly deletedAt: Date;
19
19
  readonly updatedAt: Date;
20
+ static associate(models: any): void;
20
21
  }
21
22
  export default UserPayoutDetailsModel;