uaxi-shared-entities 1.0.0

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 (218) hide show
  1. package/README.md +136 -0
  2. package/dist/config/database.config.d.ts +3 -0
  3. package/dist/config/database.config.d.ts.map +1 -0
  4. package/dist/config/database.config.js +21 -0
  5. package/dist/config/database.config.js.map +1 -0
  6. package/dist/config/index.d.ts +2 -0
  7. package/dist/config/index.d.ts.map +1 -0
  8. package/dist/config/index.js +18 -0
  9. package/dist/config/index.js.map +1 -0
  10. package/dist/entities/address.entity.d.ts +64 -0
  11. package/dist/entities/address.entity.d.ts.map +1 -0
  12. package/dist/entities/address.entity.js +254 -0
  13. package/dist/entities/address.entity.js.map +1 -0
  14. package/dist/entities/brand.entity.d.ts +16 -0
  15. package/dist/entities/brand.entity.d.ts.map +1 -0
  16. package/dist/entities/brand.entity.js +95 -0
  17. package/dist/entities/brand.entity.js.map +1 -0
  18. package/dist/entities/camping_coupons.entity.d.ts +13 -0
  19. package/dist/entities/camping_coupons.entity.d.ts.map +1 -0
  20. package/dist/entities/camping_coupons.entity.js +74 -0
  21. package/dist/entities/camping_coupons.entity.js.map +1 -0
  22. package/dist/entities/coupon.entity.d.ts +50 -0
  23. package/dist/entities/coupon.entity.d.ts.map +1 -0
  24. package/dist/entities/coupon.entity.js +227 -0
  25. package/dist/entities/coupon.entity.js.map +1 -0
  26. package/dist/entities/coupon_usages.entity.d.ts +28 -0
  27. package/dist/entities/coupon_usages.entity.d.ts.map +1 -0
  28. package/dist/entities/coupon_usages.entity.js +136 -0
  29. package/dist/entities/coupon_usages.entity.js.map +1 -0
  30. package/dist/entities/coupon_user_mappings.entity.d.ts +18 -0
  31. package/dist/entities/coupon_user_mappings.entity.d.ts.map +1 -0
  32. package/dist/entities/coupon_user_mappings.entity.js +108 -0
  33. package/dist/entities/coupon_user_mappings.entity.js.map +1 -0
  34. package/dist/entities/driver.entity.d.ts +46 -0
  35. package/dist/entities/driver.entity.d.ts.map +1 -0
  36. package/dist/entities/driver.entity.js +157 -0
  37. package/dist/entities/driver.entity.js.map +1 -0
  38. package/dist/entities/farerates.entity.d.ts +14 -0
  39. package/dist/entities/farerates.entity.d.ts.map +1 -0
  40. package/dist/entities/farerates.entity.js +97 -0
  41. package/dist/entities/farerates.entity.js.map +1 -0
  42. package/dist/entities/geofence.entity.d.ts +23 -0
  43. package/dist/entities/geofence.entity.d.ts.map +1 -0
  44. package/dist/entities/geofence.entity.js +120 -0
  45. package/dist/entities/geofence.entity.js.map +1 -0
  46. package/dist/entities/index.d.ts +24 -0
  47. package/dist/entities/index.d.ts.map +1 -0
  48. package/dist/entities/index.js +40 -0
  49. package/dist/entities/index.js.map +1 -0
  50. package/dist/entities/notifications.entity.d.ts +25 -0
  51. package/dist/entities/notifications.entity.d.ts.map +1 -0
  52. package/dist/entities/notifications.entity.js +101 -0
  53. package/dist/entities/notifications.entity.js.map +1 -0
  54. package/dist/entities/payments.entity.d.ts +30 -0
  55. package/dist/entities/payments.entity.d.ts.map +1 -0
  56. package/dist/entities/payments.entity.js +123 -0
  57. package/dist/entities/payments.entity.js.map +1 -0
  58. package/dist/entities/promotion_camping.d.ts +26 -0
  59. package/dist/entities/promotion_camping.d.ts.map +1 -0
  60. package/dist/entities/promotion_camping.js +131 -0
  61. package/dist/entities/promotion_camping.js.map +1 -0
  62. package/dist/entities/raitings.entity.d.ts +15 -0
  63. package/dist/entities/raitings.entity.d.ts.map +1 -0
  64. package/dist/entities/raitings.entity.js +90 -0
  65. package/dist/entities/raitings.entity.js.map +1 -0
  66. package/dist/entities/recent_serch.entity.d.ts +16 -0
  67. package/dist/entities/recent_serch.entity.d.ts.map +1 -0
  68. package/dist/entities/recent_serch.entity.js +107 -0
  69. package/dist/entities/recent_serch.entity.js.map +1 -0
  70. package/dist/entities/roles.entity.d.ts +11 -0
  71. package/dist/entities/roles.entity.d.ts.map +1 -0
  72. package/dist/entities/roles.entity.js +66 -0
  73. package/dist/entities/roles.entity.js.map +1 -0
  74. package/dist/entities/supportticket.entity.d.ts +30 -0
  75. package/dist/entities/supportticket.entity.d.ts.map +1 -0
  76. package/dist/entities/supportticket.entity.js +123 -0
  77. package/dist/entities/supportticket.entity.js.map +1 -0
  78. package/dist/entities/trip-route-change.entity.d.ts +49 -0
  79. package/dist/entities/trip-route-change.entity.d.ts.map +1 -0
  80. package/dist/entities/trip-route-change.entity.js +228 -0
  81. package/dist/entities/trip-route-change.entity.js.map +1 -0
  82. package/dist/entities/trip-stop.entity.d.ts +44 -0
  83. package/dist/entities/trip-stop.entity.d.ts.map +1 -0
  84. package/dist/entities/trip-stop.entity.js +232 -0
  85. package/dist/entities/trip-stop.entity.js.map +1 -0
  86. package/dist/entities/triplocation.entity.d.ts +15 -0
  87. package/dist/entities/triplocation.entity.d.ts.map +1 -0
  88. package/dist/entities/triplocation.entity.js +110 -0
  89. package/dist/entities/triplocation.entity.js.map +1 -0
  90. package/dist/entities/trips.entity.d.ts +64 -0
  91. package/dist/entities/trips.entity.d.ts.map +1 -0
  92. package/dist/entities/trips.entity.js +331 -0
  93. package/dist/entities/trips.entity.js.map +1 -0
  94. package/dist/entities/user.entity.d.ts +54 -0
  95. package/dist/entities/user.entity.d.ts.map +1 -0
  96. package/dist/entities/user.entity.js +199 -0
  97. package/dist/entities/user.entity.js.map +1 -0
  98. package/dist/entities/userCard.entity.d.ts +45 -0
  99. package/dist/entities/userCard.entity.d.ts.map +1 -0
  100. package/dist/entities/userCard.entity.js +143 -0
  101. package/dist/entities/userCard.entity.js.map +1 -0
  102. package/dist/entities/vehicle-model.entity.d.ts +22 -0
  103. package/dist/entities/vehicle-model.entity.d.ts.map +1 -0
  104. package/dist/entities/vehicle-model.entity.js +128 -0
  105. package/dist/entities/vehicle-model.entity.js.map +1 -0
  106. package/dist/entities/vehicle.entity.d.ts +34 -0
  107. package/dist/entities/vehicle.entity.d.ts.map +1 -0
  108. package/dist/entities/vehicle.entity.js +168 -0
  109. package/dist/entities/vehicle.entity.js.map +1 -0
  110. package/dist/entities/wallet.entity.d.ts +23 -0
  111. package/dist/entities/wallet.entity.d.ts.map +1 -0
  112. package/dist/entities/wallet.entity.js +116 -0
  113. package/dist/entities/wallet.entity.js.map +1 -0
  114. package/dist/entities/walletTransaction.entity.d.ts +52 -0
  115. package/dist/entities/walletTransaction.entity.d.ts.map +1 -0
  116. package/dist/entities/walletTransaction.entity.js +183 -0
  117. package/dist/entities/walletTransaction.entity.js.map +1 -0
  118. package/dist/enums/address.enum.d.ts +7 -0
  119. package/dist/enums/address.enum.d.ts.map +1 -0
  120. package/dist/enums/address.enum.js +11 -0
  121. package/dist/enums/address.enum.js.map +1 -0
  122. package/dist/enums/coupon.enum.d.ts +32 -0
  123. package/dist/enums/coupon.enum.d.ts.map +1 -0
  124. package/dist/enums/coupon.enum.js +43 -0
  125. package/dist/enums/coupon.enum.js.map +1 -0
  126. package/dist/enums/driver.enum.d.ts +7 -0
  127. package/dist/enums/driver.enum.d.ts.map +1 -0
  128. package/dist/enums/driver.enum.js +14 -0
  129. package/dist/enums/driver.enum.js.map +1 -0
  130. package/dist/enums/geofence.enum.d.ts +9 -0
  131. package/dist/enums/geofence.enum.d.ts.map +1 -0
  132. package/dist/enums/geofence.enum.js +16 -0
  133. package/dist/enums/geofence.enum.js.map +1 -0
  134. package/dist/enums/index.d.ts +10 -0
  135. package/dist/enums/index.d.ts.map +1 -0
  136. package/dist/enums/index.js +29 -0
  137. package/dist/enums/index.js.map +1 -0
  138. package/dist/enums/notification.enum.d.ts +12 -0
  139. package/dist/enums/notification.enum.d.ts.map +1 -0
  140. package/dist/enums/notification.enum.js +19 -0
  141. package/dist/enums/notification.enum.js.map +1 -0
  142. package/dist/enums/payment.enum.d.ts +14 -0
  143. package/dist/enums/payment.enum.d.ts.map +1 -0
  144. package/dist/enums/payment.enum.js +22 -0
  145. package/dist/enums/payment.enum.js.map +1 -0
  146. package/dist/enums/trip.enum.d.ts +9 -0
  147. package/dist/enums/trip.enum.d.ts.map +1 -0
  148. package/dist/enums/trip.enum.js +16 -0
  149. package/dist/enums/trip.enum.js.map +1 -0
  150. package/dist/enums/user.enum.d.ts +7 -0
  151. package/dist/enums/user.enum.d.ts.map +1 -0
  152. package/dist/enums/user.enum.js +14 -0
  153. package/dist/enums/user.enum.js.map +1 -0
  154. package/dist/enums/vehicle.enum.d.ts +6 -0
  155. package/dist/enums/vehicle.enum.d.ts.map +1 -0
  156. package/dist/enums/vehicle.enum.js +13 -0
  157. package/dist/enums/vehicle.enum.js.map +1 -0
  158. package/dist/enums/wallet.enum.d.ts +33 -0
  159. package/dist/enums/wallet.enum.d.ts.map +1 -0
  160. package/dist/enums/wallet.enum.js +43 -0
  161. package/dist/enums/wallet.enum.js.map +1 -0
  162. package/dist/index.d.ts +5 -0
  163. package/dist/index.d.ts.map +1 -0
  164. package/dist/index.js +28 -0
  165. package/dist/index.js.map +1 -0
  166. package/dist/types/common.types.d.ts +34 -0
  167. package/dist/types/common.types.d.ts.map +1 -0
  168. package/dist/types/common.types.js +6 -0
  169. package/dist/types/common.types.js.map +1 -0
  170. package/dist/types/index.d.ts +2 -0
  171. package/dist/types/index.d.ts.map +1 -0
  172. package/dist/types/index.js +21 -0
  173. package/dist/types/index.js.map +1 -0
  174. package/package.json +37 -0
  175. package/src/config/database.config.ts +39 -0
  176. package/src/config/index.ts +1 -0
  177. package/src/entities/address.entity.ts +239 -0
  178. package/src/entities/brand.entity.ts +87 -0
  179. package/src/entities/camping_coupons.entity.ts +60 -0
  180. package/src/entities/coupon.entity.ts +167 -0
  181. package/src/entities/coupon_usages.entity.ts +108 -0
  182. package/src/entities/coupon_user_mappings.entity.ts +89 -0
  183. package/src/entities/driver.entity.ts +151 -0
  184. package/src/entities/farerates.entity.ts +72 -0
  185. package/src/entities/geofence.entity.ts +88 -0
  186. package/src/entities/index.ts +27 -0
  187. package/src/entities/notifications.entity.ts +74 -0
  188. package/src/entities/payments.entity.ts +146 -0
  189. package/src/entities/promotion_camping.ts +96 -0
  190. package/src/entities/raitings.entity.ts +74 -0
  191. package/src/entities/recent_serch.entity.ts +86 -0
  192. package/src/entities/roles.entity.ts +44 -0
  193. package/src/entities/supportticket.entity.ts +104 -0
  194. package/src/entities/trip-route-change.entity.ts +196 -0
  195. package/src/entities/trip-stop.entity.ts +199 -0
  196. package/src/entities/triplocation.entity.ts +96 -0
  197. package/src/entities/trips.entity.ts +290 -0
  198. package/src/entities/user.entity.ts +170 -0
  199. package/src/entities/userCard.entity.ts +139 -0
  200. package/src/entities/vehicle-model.entity.ts +120 -0
  201. package/src/entities/vehicle.entity.ts +154 -0
  202. package/src/entities/wallet.entity.ts +104 -0
  203. package/src/entities/walletTransaction.entity.ts +103 -0
  204. package/src/enums/address.enum.ts +6 -0
  205. package/src/enums/coupon.enum.ts +39 -0
  206. package/src/enums/driver.enum.ts +10 -0
  207. package/src/enums/geofence.enum.ts +12 -0
  208. package/src/enums/index.ts +14 -0
  209. package/src/enums/notification.enum.ts +15 -0
  210. package/src/enums/payment.enum.ts +18 -0
  211. package/src/enums/trip.enum.ts +12 -0
  212. package/src/enums/user.enum.ts +10 -0
  213. package/src/enums/vehicle.enum.ts +9 -0
  214. package/src/enums/wallet.enum.ts +29 -0
  215. package/src/index.ts +15 -0
  216. package/src/types/common.types.ts +43 -0
  217. package/src/types/index.ts +5 -0
  218. package/tsconfig.json +24 -0
@@ -0,0 +1,60 @@
1
+ // =============================================
2
+ // CAMPAIGN COUPON MAPPING MODEL
3
+ // =============================================
4
+
5
+ import {
6
+ BelongsTo,
7
+ Column,
8
+ DataType,
9
+ ForeignKey,
10
+ Model,
11
+ Table,
12
+ } from 'sequelize-typescript';
13
+ import { PromotionCampaign } from './promotion_camping';
14
+ import { Coupon } from './coupon.entity';
15
+
16
+ @Table({
17
+ tableName: 'campaign_coupons',
18
+ timestamps: true,
19
+ })
20
+ export class CampaignCoupon extends Model<CampaignCoupon> {
21
+ @Column({
22
+ type: DataType.UUID,
23
+ defaultValue: DataType.UUIDV4,
24
+ primaryKey: true,
25
+ })
26
+ declare id: string;
27
+
28
+ @ForeignKey(() => PromotionCampaign)
29
+ @Column({
30
+ type: DataType.UUID,
31
+ allowNull: false,
32
+ })
33
+ campaignId: string;
34
+
35
+ @ForeignKey(() => Coupon)
36
+ @Column({
37
+ type: DataType.UUID,
38
+ allowNull: false,
39
+ })
40
+ couponId: string;
41
+
42
+ @Column({
43
+ type: DataType.INTEGER,
44
+ defaultValue: 0,
45
+ })
46
+ distributedCount: number; // Cuántos cupones se han distribuido
47
+
48
+ @Column({
49
+ type: DataType.INTEGER,
50
+ defaultValue: 0,
51
+ })
52
+ redeemedCount: number; // Cuántos cupones se han canjeado
53
+
54
+ // Associations
55
+ @BelongsTo(() => PromotionCampaign)
56
+ campaign: PromotionCampaign;
57
+
58
+ @BelongsTo(() => Coupon)
59
+ coupon: Coupon;
60
+ }
@@ -0,0 +1,167 @@
1
+ // =============================================
2
+ // COUPON MODEL
3
+ // =============================================
4
+
5
+ import { Column, DataType, HasMany, Table, Model } from "sequelize-typescript";
6
+ import { CouponUsage } from "./coupon_usages.entity";
7
+ import { CouponUserMapping } from "./coupon_user_mappings.entity";
8
+ import { CouponApplicability, CouponStatus, CouponType } from "../enums";
9
+
10
+ @Table({
11
+ tableName: "coupons",
12
+ timestamps: true,
13
+ })
14
+ export class Coupon extends Model<Coupon> {
15
+ @Column({
16
+ type: DataType.UUID,
17
+ defaultValue: DataType.UUIDV4,
18
+ primaryKey: true,
19
+ })
20
+ declare id: string;
21
+
22
+ @Column({
23
+ type: DataType.STRING,
24
+ allowNull: false,
25
+ unique: true,
26
+ })
27
+ code: string; // Código del cupón (ej: "WELCOME20", "FIRSTRIDE")
28
+
29
+ @Column({
30
+ type: DataType.STRING,
31
+ allowNull: false,
32
+ })
33
+ name: string; // Nombre descriptivo del cupón
34
+
35
+ @Column({
36
+ type: DataType.TEXT,
37
+ allowNull: true,
38
+ })
39
+ description: string;
40
+
41
+ @Column({
42
+ type: DataType.ENUM(...Object.values(CouponType)),
43
+ allowNull: false,
44
+ })
45
+ type: CouponType;
46
+
47
+ @Column({
48
+ type: DataType.DECIMAL(10, 2),
49
+ allowNull: true,
50
+ })
51
+ discountValue: number; // Valor del descuento (porcentaje o cantidad fija)
52
+
53
+ @Column({
54
+ type: DataType.DECIMAL(10, 2),
55
+ allowNull: true,
56
+ })
57
+ maxDiscountAmount: number; // Monto máximo de descuento (para porcentajes)
58
+
59
+ @Column({
60
+ type: DataType.DECIMAL(10, 2),
61
+ allowNull: true,
62
+ })
63
+ minimumTripAmount: number; // Monto mínimo del viaje para aplicar cupón
64
+
65
+ @Column({
66
+ type: DataType.DECIMAL(10, 2),
67
+ allowNull: true,
68
+ })
69
+ maximumTripAmount: number; // Monto máximo del viaje para aplicar cupón
70
+
71
+ @Column({
72
+ type: DataType.ENUM(...Object.values(CouponApplicability)),
73
+ defaultValue: CouponApplicability.ALL_USERS,
74
+ })
75
+ applicability: CouponApplicability;
76
+
77
+ @Column({
78
+ type: DataType.INTEGER,
79
+ allowNull: true,
80
+ })
81
+ totalUsageLimit: number; // Límite total de usos del cupón
82
+
83
+ @Column({
84
+ type: DataType.INTEGER,
85
+ defaultValue: 0,
86
+ })
87
+ currentUsageCount: number; // Contador actual de usos
88
+
89
+ @Column({
90
+ type: DataType.INTEGER,
91
+ defaultValue: 1,
92
+ })
93
+ usagePerUser: number; // Cuántas veces puede usar un usuario este cupón
94
+
95
+ @Column({
96
+ type: DataType.DATE,
97
+ allowNull: false,
98
+ })
99
+ validFrom: Date;
100
+
101
+ @Column({
102
+ type: DataType.DATE,
103
+ allowNull: false,
104
+ })
105
+ validUntil: Date;
106
+
107
+ @Column({
108
+ type: DataType.ENUM(...Object.values(CouponStatus)),
109
+ defaultValue: CouponStatus.ACTIVE,
110
+ })
111
+ status: CouponStatus;
112
+
113
+ @Column({
114
+ type: DataType.JSON,
115
+ allowNull: true,
116
+ })
117
+ vehicleTypes: string[]; // Tipos de vehículos aplicables
118
+
119
+ @Column({
120
+ type: DataType.JSON,
121
+ allowNull: true,
122
+ })
123
+ geofenceData: any; // Datos de geofencing (ciudades, zonas específicas)
124
+
125
+ @Column({
126
+ type: DataType.JSON,
127
+ allowNull: true,
128
+ })
129
+ dayOfWeekRestrictions: number[]; // Días de la semana aplicables (0=domingo, 6=sábado)
130
+
131
+ @Column({
132
+ type: DataType.TIME,
133
+ allowNull: true,
134
+ })
135
+ validFromTime: string; // Hora de inicio de validez diaria
136
+
137
+ @Column({
138
+ type: DataType.TIME,
139
+ allowNull: true,
140
+ })
141
+ validUntilTime: string; // Hora de fin de validez diaria
142
+
143
+ @Column({
144
+ type: DataType.UUID,
145
+ allowNull: true,
146
+ })
147
+ createdByAdminId: string; // ID del admin que creó el cupón
148
+
149
+ @Column({
150
+ type: DataType.BOOLEAN,
151
+ defaultValue: false,
152
+ })
153
+ isAutoApplicable: boolean; // Si se aplica automáticamente
154
+
155
+ @Column({
156
+ type: DataType.JSON,
157
+ allowNull: true,
158
+ })
159
+ metadata: any; // Información adicional del cupón
160
+
161
+ // Associations
162
+ @HasMany(() => CouponUsage, "couponId")
163
+ usages: CouponUsage[];
164
+
165
+ @HasMany(() => CouponUserMapping, "couponId")
166
+ userMappings: CouponUserMapping[];
167
+ }
@@ -0,0 +1,108 @@
1
+ // =============================================
2
+ // COUPON USAGE MODEL
3
+ // =============================================
4
+
5
+ import {
6
+ BelongsTo,
7
+ Column,
8
+ DataType,
9
+ ForeignKey,
10
+ Model,
11
+ Table,
12
+ } from "sequelize-typescript";
13
+ import { Coupon } from "./coupon.entity";
14
+ import { User } from "./user.entity";
15
+ import { Trip } from "./trips.entity";
16
+ import { UsageStatus } from "../enums";
17
+
18
+ @Table({
19
+ tableName: "coupon_usages",
20
+ timestamps: true,
21
+ })
22
+ export class CouponUsage extends Model<CouponUsage> {
23
+ @Column({
24
+ type: DataType.UUID,
25
+ defaultValue: DataType.UUIDV4,
26
+ primaryKey: true,
27
+ })
28
+ declare id: string;
29
+
30
+ @ForeignKey(() => Coupon)
31
+ @Column({
32
+ type: DataType.UUID,
33
+ allowNull: false,
34
+ })
35
+ couponId: string;
36
+
37
+ @ForeignKey(() => User)
38
+ @Column({
39
+ type: DataType.UUID,
40
+ allowNull: false,
41
+ })
42
+ userId: string;
43
+
44
+ @ForeignKey(() => Trip)
45
+ @Column({
46
+ type: DataType.UUID,
47
+ allowNull: false,
48
+ })
49
+ tripId: string;
50
+
51
+ @Column({
52
+ type: DataType.DECIMAL(10, 2),
53
+ allowNull: false,
54
+ })
55
+ originalAmount: number; // Monto original del viaje
56
+
57
+ @Column({
58
+ type: DataType.DECIMAL(10, 2),
59
+ allowNull: false,
60
+ })
61
+ discountAmount: number; // Monto del descuento aplicado
62
+
63
+ @Column({
64
+ type: DataType.DECIMAL(10, 2),
65
+ allowNull: false,
66
+ })
67
+ finalAmount: number; // Monto final después del descuento
68
+
69
+ @Column({
70
+ type: DataType.ENUM(...Object.values(UsageStatus)),
71
+ defaultValue: UsageStatus.APPLIED,
72
+ })
73
+ status: UsageStatus;
74
+
75
+ @Column({
76
+ type: DataType.DATE,
77
+ allowNull: true,
78
+ })
79
+ redeemedAt: Date;
80
+
81
+ @Column({
82
+ type: DataType.DATE,
83
+ allowNull: true,
84
+ })
85
+ reversedAt: Date;
86
+
87
+ @Column({
88
+ type: DataType.STRING,
89
+ allowNull: true,
90
+ })
91
+ reversalReason: string;
92
+
93
+ @Column({
94
+ type: DataType.JSON,
95
+ allowNull: true,
96
+ })
97
+ metadata: any; // Información adicional del uso
98
+
99
+ // Associations
100
+ @BelongsTo(() => Coupon)
101
+ coupon: Coupon;
102
+
103
+ @BelongsTo(() => User)
104
+ user: User;
105
+
106
+ @BelongsTo(() => Trip)
107
+ trip: Trip;
108
+ }
@@ -0,0 +1,89 @@
1
+ // =============================================
2
+ // COUPON USER MAPPING MODEL
3
+ // =============================================
4
+
5
+ import {
6
+ BelongsTo,
7
+ Column,
8
+ DataType,
9
+ ForeignKey,
10
+ Index,
11
+ Model,
12
+ Table,
13
+ } from 'sequelize-typescript';
14
+ import { Coupon } from './coupon.entity';
15
+ import { User } from './user.entity';
16
+
17
+ @Table({
18
+ tableName: 'coupon_user_mappings',
19
+ timestamps: true,
20
+ })
21
+ export class CouponUserMapping extends Model {
22
+ @Column({
23
+ type: DataType.UUID,
24
+ defaultValue: DataType.UUIDV4,
25
+ primaryKey: true,
26
+ })
27
+ declare id: string;
28
+
29
+ @ForeignKey(() => Coupon)
30
+ @Column({
31
+ type: DataType.UUID,
32
+ allowNull: false,
33
+ })
34
+ couponId: string;
35
+
36
+ @ForeignKey(() => User)
37
+ @Column({
38
+ type: DataType.UUID,
39
+ allowNull: false,
40
+ })
41
+ userId: string;
42
+
43
+ @Column({
44
+ type: DataType.INTEGER,
45
+ defaultValue: 0,
46
+ })
47
+ usageCount: number; // Cuántas veces ha usado este cupón el usuario
48
+
49
+ @Column({
50
+ type: DataType.DATE,
51
+ allowNull: true,
52
+ })
53
+ firstUsedAt: Date;
54
+
55
+ @Column({
56
+ type: DataType.DATE,
57
+ allowNull: true,
58
+ })
59
+ lastUsedAt: Date;
60
+
61
+ @Column({
62
+ type: DataType.BOOLEAN,
63
+ defaultValue: true,
64
+ })
65
+ isEligible: boolean; // Si el usuario es elegible para usar este cupón
66
+
67
+ @Column({
68
+ type: DataType.DATE,
69
+ allowNull: true,
70
+ })
71
+ assignedAt: Date; // Cuando se le asignó el cupón al usuario
72
+
73
+ @Column({
74
+ type: DataType.UUID,
75
+ allowNull: true,
76
+ })
77
+ assignedByAdminId: string;
78
+
79
+ // Associations
80
+ @BelongsTo(() => Coupon)
81
+ coupon: Coupon;
82
+
83
+ @BelongsTo(() => User)
84
+ user: User;
85
+
86
+ // Unique constraint
87
+ @Index({ unique: true })
88
+ static couponUserIndex = ['couponId', 'userId'];
89
+ }
@@ -0,0 +1,151 @@
1
+ import {
2
+ BelongsTo,
3
+ Column,
4
+ DataType,
5
+ DeletedAt,
6
+ ForeignKey,
7
+ HasMany,
8
+ Model,
9
+ Table,
10
+ } from "sequelize-typescript";
11
+ import { User } from "./user.entity";
12
+ import { Vehicle } from "./vehicle.entity";
13
+ import { DriverStatus } from "../enums";
14
+
15
+ // =============================================
16
+ // DRIVER PROFILE MODEL - ACTUALIZADO
17
+ // =============================================
18
+
19
+ // Interfaz para crear un driver (campos requeridos)
20
+ export interface DriverCreationAttributes {
21
+ userId: string;
22
+ licenseNumber: string;
23
+ licenseExpiryDate: Date;
24
+ licenseDocument?: string;
25
+ status?: DriverStatus;
26
+ rating?: number;
27
+ totalTrips?: number;
28
+ totalEarnings?: number;
29
+ isDocumentVerified?: boolean;
30
+ isBackgroundCheckPassed?: boolean;
31
+ currentLatitude?: number;
32
+ currentLongitude?: number;
33
+ currentLocation?: any; // PostGIS geometry
34
+ lastLocationUpdate?: Date;
35
+ }
36
+
37
+ @Table({
38
+ tableName: "driver_profiles",
39
+ timestamps: true,
40
+ paranoid: true, // Habilita soft delete
41
+ })
42
+ export class DriverProfile extends Model<
43
+ DriverProfile,
44
+ DriverCreationAttributes
45
+ > {
46
+ @Column({
47
+ type: DataType.UUID,
48
+ defaultValue: DataType.UUIDV4,
49
+ primaryKey: true,
50
+ })
51
+ declare id: string;
52
+
53
+ @ForeignKey(() => User)
54
+ @Column({
55
+ type: DataType.UUID,
56
+ allowNull: false,
57
+ unique: true,
58
+ })
59
+ userId: string;
60
+
61
+ @Column({
62
+ type: DataType.STRING,
63
+ allowNull: false,
64
+ unique: true,
65
+ })
66
+ licenseNumber: string;
67
+
68
+ @Column({
69
+ type: DataType.DATE,
70
+ allowNull: false,
71
+ })
72
+ licenseExpiryDate: Date;
73
+
74
+ @Column({
75
+ type: DataType.STRING,
76
+ allowNull: true,
77
+ })
78
+ licenseDocument: string;
79
+
80
+ @Column({
81
+ type: DataType.ENUM(...Object.values(DriverStatus)),
82
+ defaultValue: DriverStatus.OFFLINE,
83
+ })
84
+ status: DriverStatus;
85
+
86
+ @Column({
87
+ type: DataType.DECIMAL(3, 2),
88
+ defaultValue: 0.0,
89
+ })
90
+ rating: number;
91
+
92
+ @Column({
93
+ type: DataType.INTEGER,
94
+ defaultValue: 0,
95
+ })
96
+ totalTrips: number;
97
+
98
+ @Column({
99
+ type: DataType.DECIMAL(10, 2),
100
+ defaultValue: 0.0,
101
+ })
102
+ totalEarnings: number;
103
+
104
+ @Column({
105
+ type: DataType.BOOLEAN,
106
+ defaultValue: false,
107
+ })
108
+ isDocumentVerified: boolean;
109
+
110
+ @Column({
111
+ type: DataType.BOOLEAN,
112
+ defaultValue: false,
113
+ })
114
+ isBackgroundCheckPassed: boolean;
115
+
116
+ @Column({
117
+ type: DataType.DATE,
118
+ allowNull: true,
119
+ })
120
+ lastLocationUpdate: Date;
121
+
122
+ // ACTUALIZADO: Usar GEOMETRY POINT para PostgreSQL
123
+ @Column({
124
+ type: DataType.GEOMETRY("POINT", 4326), // SRID 4326 (WGS84)
125
+ allowNull: true,
126
+ })
127
+ currentLocation: any; // Almacena POINT(longitude, latitude)
128
+
129
+ // OPCIONAL: Mantener campos individuales si necesitas consultas simples
130
+ @Column({
131
+ type: DataType.DOUBLE,
132
+ allowNull: true,
133
+ })
134
+ currentLatitude: number;
135
+
136
+ @Column({
137
+ type: DataType.DOUBLE,
138
+ allowNull: true,
139
+ })
140
+ currentLongitude: number;
141
+
142
+ @DeletedAt
143
+ declare deletedAt: Date;
144
+
145
+ // Associations
146
+ @BelongsTo(() => User)
147
+ user: User;
148
+
149
+ @HasMany(() => Vehicle, "driverId")
150
+ vehicles: Vehicle[];
151
+ }
@@ -0,0 +1,72 @@
1
+ // =============================================
2
+ // FARE RATE MODEL
3
+ // =============================================
4
+
5
+ import { Column, DataType, Model, Table } from 'sequelize-typescript';
6
+
7
+ @Table({
8
+ tableName: 'fare_rates',
9
+ timestamps: true,
10
+ })
11
+ export class FareRate extends Model<FareRate> {
12
+ @Column({
13
+ type: DataType.UUID,
14
+ defaultValue: DataType.UUIDV4,
15
+ primaryKey: true,
16
+ })
17
+ declare id: string;
18
+
19
+ @Column({
20
+ type: DataType.STRING,
21
+ allowNull: false,
22
+ })
23
+ vehicleType: string;
24
+
25
+ @Column({
26
+ type: DataType.DECIMAL(8, 2),
27
+ allowNull: false,
28
+ })
29
+ baseFare: number;
30
+
31
+ @Column({
32
+ type: DataType.DECIMAL(8, 2),
33
+ allowNull: false,
34
+ })
35
+ perKilometerRate: number;
36
+
37
+ @Column({
38
+ type: DataType.DECIMAL(8, 2),
39
+ allowNull: false,
40
+ })
41
+ perMinuteRate: number;
42
+
43
+ @Column({
44
+ type: DataType.DECIMAL(8, 2),
45
+ allowNull: false,
46
+ })
47
+ minimumFare: number;
48
+
49
+ @Column({
50
+ type: DataType.DECIMAL(5, 2),
51
+ defaultValue: 1.0,
52
+ })
53
+ surgePricing: number; // multiplier for surge pricing
54
+
55
+ @Column({
56
+ type: DataType.BOOLEAN,
57
+ defaultValue: true,
58
+ })
59
+ isActive: boolean;
60
+
61
+ @Column({
62
+ type: DataType.DATE,
63
+ allowNull: true,
64
+ })
65
+ effectiveFrom: Date;
66
+
67
+ @Column({
68
+ type: DataType.DATE,
69
+ allowNull: true,
70
+ })
71
+ effectiveTo: Date;
72
+ }