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,88 @@
1
+ // =============================================
2
+ // GEOFENCE MODEL - NUEVO
3
+ // =============================================
4
+
5
+ import { Column, DataType, Model, Table } from "sequelize-typescript";
6
+ import { GeofenceType } from "../enums";
7
+
8
+ @Table({
9
+ tableName: "geofences",
10
+ timestamps: true,
11
+ indexes: [
12
+ {
13
+ name: "geofences_area_idx",
14
+ using: "GIST",
15
+ fields: ["area"],
16
+ },
17
+ ],
18
+ })
19
+ export class Geofence extends Model<Geofence> {
20
+ @Column({
21
+ type: DataType.UUID,
22
+ defaultValue: DataType.UUIDV4,
23
+ primaryKey: true,
24
+ })
25
+ declare id: string;
26
+
27
+ @Column({
28
+ type: DataType.STRING,
29
+ allowNull: false,
30
+ })
31
+ name: string;
32
+
33
+ @Column({
34
+ type: DataType.TEXT,
35
+ allowNull: true,
36
+ })
37
+ description: string;
38
+
39
+ @Column({
40
+ type: DataType.ENUM(...Object.values(GeofenceType)),
41
+ allowNull: false,
42
+ })
43
+ type: GeofenceType;
44
+
45
+ // POLYGON para áreas geográficas
46
+ @Column({
47
+ type: DataType.GEOMETRY("POLYGON", 4326),
48
+ allowNull: false,
49
+ })
50
+ area: any; // POLYGON para definir el área
51
+
52
+ // Centro del geofence para cálculos rápidos
53
+ @Column({
54
+ type: DataType.GEOMETRY("POINT", 4326),
55
+ allowNull: true,
56
+ })
57
+ center: any; // POINT(longitude, latitude)
58
+
59
+ @Column({
60
+ type: DataType.BOOLEAN,
61
+ defaultValue: true,
62
+ })
63
+ isActive: boolean;
64
+
65
+ @Column({
66
+ type: DataType.DECIMAL(5, 2),
67
+ defaultValue: 1.0,
68
+ })
69
+ surgePricingMultiplier: number;
70
+
71
+ @Column({
72
+ type: DataType.JSON,
73
+ allowNull: true,
74
+ })
75
+ metadata: any; // Información adicional del geofence
76
+
77
+ @Column({
78
+ type: DataType.DATE,
79
+ allowNull: true,
80
+ })
81
+ effectiveFrom: Date;
82
+
83
+ @Column({
84
+ type: DataType.DATE,
85
+ allowNull: true,
86
+ })
87
+ effectiveTo: Date;
88
+ }
@@ -0,0 +1,27 @@
1
+ export * from './user.entity';
2
+ export * from './address.entity';
3
+ export * from './vehicle.entity';
4
+ export * from './brand.entity';
5
+ export * from './vehicle-model.entity';
6
+ export * from './wallet.entity';
7
+ export * from './walletTransaction.entity';
8
+ export * from './driver.entity';
9
+ export * from './farerates.entity';
10
+ export * from './notifications.entity';
11
+ export * from './payments.entity';
12
+ export * from './raitings.entity';
13
+ export * from './roles.entity';
14
+ export * from './supportticket.entity';
15
+ export * from './triplocation.entity';
16
+ export * from './trips.entity';
17
+ export * from './address.entity';
18
+ export * from './geofence.entity';
19
+ export * from './recent_serch.entity';
20
+ export * from './camping_coupons.entity';
21
+ export * from './coupon.entity';
22
+ export * from './coupon_usages.entity';
23
+ export * from './coupon_user_mappings.entity';
24
+ export * from './promotion_camping';
25
+ export * from './trip-route-change.entity';
26
+ export * from './trip-stop.entity';
27
+ export * from './userCard.entity';
@@ -0,0 +1,74 @@
1
+ // =============================================
2
+ // NOTIFICATION MODEL
3
+ // =============================================
4
+
5
+ import {
6
+ BelongsTo,
7
+ Column,
8
+ DataType,
9
+ ForeignKey,
10
+ Model,
11
+ Table,
12
+ } from "sequelize-typescript";
13
+ import { User } from "./user.entity";
14
+ import { NotificationType } from "../enums";
15
+
16
+ @Table({
17
+ tableName: "notifications",
18
+ timestamps: true,
19
+ })
20
+ export class Notification extends Model<Notification> {
21
+ @Column({
22
+ type: DataType.UUID,
23
+ defaultValue: DataType.UUIDV4,
24
+ primaryKey: true,
25
+ })
26
+ declare id: string;
27
+
28
+ @ForeignKey(() => User)
29
+ @Column({
30
+ type: DataType.UUID,
31
+ allowNull: false,
32
+ })
33
+ userId: string;
34
+
35
+ @Column({
36
+ type: DataType.ENUM(...Object.values(NotificationType)),
37
+ allowNull: false,
38
+ })
39
+ type: NotificationType;
40
+
41
+ @Column({
42
+ type: DataType.STRING,
43
+ allowNull: false,
44
+ })
45
+ title: string;
46
+
47
+ @Column({
48
+ type: DataType.TEXT,
49
+ allowNull: false,
50
+ })
51
+ message: string;
52
+
53
+ @Column({
54
+ type: DataType.BOOLEAN,
55
+ defaultValue: false,
56
+ })
57
+ isRead: boolean;
58
+
59
+ @Column({
60
+ type: DataType.JSON,
61
+ allowNull: true,
62
+ })
63
+ data: any; // Additional data for the notification
64
+
65
+ @Column({
66
+ type: DataType.DATE,
67
+ allowNull: true,
68
+ })
69
+ readAt: Date;
70
+
71
+ // Associations
72
+ @BelongsTo(() => User)
73
+ user: User;
74
+ }
@@ -0,0 +1,146 @@
1
+ import {
2
+ BelongsTo,
3
+ Column,
4
+ DataType,
5
+ ForeignKey,
6
+ HasOne,
7
+ Model,
8
+ Table,
9
+ } from 'sequelize-typescript';
10
+ import { Trip } from './trips.entity';
11
+ import { User } from './user.entity';
12
+ import { UserCard } from './userCard.entity';
13
+ import { WalletTransaction } from './walletTransaction.entity';
14
+ import { PaymentMethod, PaymentStatus } from '../enums';
15
+
16
+ export interface CreatePaymentData {
17
+ tripId: string;
18
+ userId: string;
19
+ amount: number;
20
+ paymentMethod: PaymentMethod;
21
+ status?: PaymentStatus;
22
+ cardId?: string; // NUEVO: Para pagos con tarjeta
23
+ walletTransactionId?: string; // Para pagos con wallet
24
+ externalTransactionId?: string;
25
+ paymentGateway?: string;
26
+ metadata?: any;
27
+ failureReason?: string;
28
+ processedAt?: Date;
29
+ }
30
+
31
+ @Table({
32
+ tableName: 'payments',
33
+ timestamps: true,
34
+ })
35
+ export class Payment extends Model<Payment, CreatePaymentData> {
36
+ @Column({
37
+ type: DataType.UUID,
38
+ defaultValue: DataType.UUIDV4,
39
+ primaryKey: true,
40
+ })
41
+ declare id: string;
42
+
43
+ @ForeignKey(() => Trip)
44
+ @Column({
45
+ type: DataType.UUID,
46
+ allowNull: false,
47
+ })
48
+ tripId: string;
49
+
50
+ @ForeignKey(() => User)
51
+ @Column({
52
+ type: DataType.UUID,
53
+ allowNull: false,
54
+ })
55
+ userId: string;
56
+
57
+ @Column({
58
+ type: DataType.DECIMAL(10, 2),
59
+ allowNull: false,
60
+ })
61
+ amount: number;
62
+
63
+ @Column({
64
+ type: DataType.ENUM(...Object.values(PaymentMethod)),
65
+ allowNull: false,
66
+ })
67
+ paymentMethod: PaymentMethod;
68
+
69
+ @Column({
70
+ type: DataType.ENUM(...Object.values(PaymentStatus)),
71
+ defaultValue: PaymentStatus.PENDING,
72
+ })
73
+ status: PaymentStatus;
74
+
75
+ // NUEVO: Para pagos con tarjeta
76
+ @ForeignKey(() => UserCard)
77
+ @Column({
78
+ type: DataType.UUID,
79
+ allowNull: true,
80
+ })
81
+ cardId: string;
82
+
83
+ // Para pagos con wallet
84
+ @ForeignKey(() => WalletTransaction)
85
+ @Column({
86
+ type: DataType.UUID,
87
+ allowNull: true,
88
+ })
89
+ walletTransactionId: string;
90
+
91
+ // Para transacciones externas (gateway)
92
+ @Column({
93
+ type: DataType.STRING,
94
+ allowNull: true,
95
+ })
96
+ externalTransactionId: string;
97
+
98
+ @Column({
99
+ type: DataType.STRING,
100
+ allowNull: true,
101
+ })
102
+ paymentGateway: string;
103
+
104
+ @Column({
105
+ type: DataType.JSON,
106
+ allowNull: true,
107
+ })
108
+ metadata: any;
109
+
110
+ @Column({
111
+ type: DataType.TEXT,
112
+ allowNull: true,
113
+ })
114
+ failureReason: string;
115
+
116
+ @Column({
117
+ type: DataType.DATE,
118
+ allowNull: true,
119
+ })
120
+ processedAt: Date;
121
+
122
+ // Associations
123
+ @BelongsTo(() => Trip)
124
+ trip: Trip;
125
+
126
+ @BelongsTo(() => User)
127
+ user: User;
128
+
129
+ @BelongsTo(() => UserCard, 'cardId')
130
+ card: UserCard;
131
+
132
+ @BelongsTo(() => WalletTransaction, 'walletTransactionId')
133
+ walletTransaction: WalletTransaction;
134
+
135
+ // Métodos de conveniencia
136
+ get isWalletPayment(): boolean {
137
+ return this.paymentMethod === PaymentMethod.WALLET;
138
+ }
139
+
140
+ get isCardPayment(): boolean {
141
+ return (
142
+ this.paymentMethod === PaymentMethod.CREDIT_CARD ||
143
+ this.paymentMethod === PaymentMethod.DEBIT_CARD
144
+ );
145
+ }
146
+ }
@@ -0,0 +1,96 @@
1
+ // =============================================
2
+ // PROMOCION CAMPAIGN MODEL (Opcional - para campañas de marketing)
3
+ // =============================================
4
+
5
+ import { Column, DataType, HasMany, Model, Table } from "sequelize-typescript";
6
+ import { CampaignCoupon } from "./camping_coupons.entity";
7
+ import { CampaignStatus } from "../enums";
8
+
9
+ @Table({
10
+ tableName: "promotion_campaigns",
11
+ timestamps: true,
12
+ })
13
+ export class PromotionCampaign extends Model<PromotionCampaign> {
14
+ @Column({
15
+ type: DataType.UUID,
16
+ defaultValue: DataType.UUIDV4,
17
+ primaryKey: true,
18
+ })
19
+ declare id: string;
20
+
21
+ @Column({
22
+ type: DataType.STRING,
23
+ allowNull: false,
24
+ })
25
+ name: string;
26
+
27
+ @Column({
28
+ type: DataType.TEXT,
29
+ allowNull: true,
30
+ })
31
+ description: string;
32
+
33
+ @Column({
34
+ type: DataType.ENUM(...Object.values(CampaignStatus)),
35
+ defaultValue: CampaignStatus.DRAFT,
36
+ })
37
+ status: CampaignStatus;
38
+
39
+ @Column({
40
+ type: DataType.DATE,
41
+ allowNull: false,
42
+ })
43
+ startDate: Date;
44
+
45
+ @Column({
46
+ type: DataType.DATE,
47
+ allowNull: false,
48
+ })
49
+ endDate: Date;
50
+
51
+ @Column({
52
+ type: DataType.DECIMAL(12, 2),
53
+ allowNull: true,
54
+ })
55
+ budget: number; // Presupuesto de la campaña
56
+
57
+ @Column({
58
+ type: DataType.DECIMAL(12, 2),
59
+ defaultValue: 0.0,
60
+ })
61
+ spentAmount: number; // Monto gastado en la campaña
62
+
63
+ @Column({
64
+ type: DataType.INTEGER,
65
+ defaultValue: 0,
66
+ })
67
+ targetUsers: number; // Número objetivo de usuarios
68
+
69
+ @Column({
70
+ type: DataType.INTEGER,
71
+ defaultValue: 0,
72
+ })
73
+ reachedUsers: number; // Usuarios alcanzados
74
+
75
+ @Column({
76
+ type: DataType.UUID,
77
+ allowNull: false,
78
+ })
79
+ createdByAdminId: string;
80
+
81
+ @Column({
82
+ type: DataType.JSON,
83
+ allowNull: true,
84
+ })
85
+ targetCriteria: any; // Criterios de segmentación
86
+
87
+ @Column({
88
+ type: DataType.JSON,
89
+ allowNull: true,
90
+ })
91
+ metrics: any; // Métricas de la campaña
92
+
93
+ // Associations
94
+ @HasMany(() => CampaignCoupon, "campaignId")
95
+ coupons: CampaignCoupon[];
96
+ }
@@ -0,0 +1,74 @@
1
+ // =============================================
2
+ // RATING MODEL
3
+ // =============================================
4
+
5
+ import {
6
+ BelongsTo,
7
+ Column,
8
+ DataType,
9
+ ForeignKey,
10
+ Model,
11
+ Table,
12
+ } from 'sequelize-typescript';
13
+ import { User } from './user.entity';
14
+ import { Trip } from './trips.entity';
15
+
16
+ @Table({
17
+ tableName: 'ratings',
18
+ timestamps: true,
19
+ })
20
+ export class Rating extends Model {
21
+ @Column({
22
+ type: DataType.UUID,
23
+ defaultValue: DataType.UUIDV4,
24
+ primaryKey: true,
25
+ })
26
+ declare id: string;
27
+
28
+ @ForeignKey(() => Trip)
29
+ @Column({
30
+ type: DataType.UUID,
31
+ allowNull: false,
32
+ })
33
+ tripId: string;
34
+
35
+ @ForeignKey(() => User)
36
+ @Column({
37
+ type: DataType.UUID,
38
+ allowNull: false,
39
+ })
40
+ raterId: string; // quien califica
41
+
42
+ @ForeignKey(() => User)
43
+ @Column({
44
+ type: DataType.UUID,
45
+ allowNull: false,
46
+ })
47
+ ratedUserId: string; // quien es calificado
48
+
49
+ @Column({
50
+ type: DataType.INTEGER,
51
+ allowNull: false,
52
+ validate: {
53
+ min: 1,
54
+ max: 5,
55
+ },
56
+ })
57
+ rating: number;
58
+
59
+ @Column({
60
+ type: DataType.TEXT,
61
+ allowNull: true,
62
+ })
63
+ comment: string;
64
+
65
+ // Associations
66
+ @BelongsTo(() => Trip)
67
+ trip: Trip;
68
+
69
+ @BelongsTo(() => User, 'raterId')
70
+ rater: User;
71
+
72
+ @BelongsTo(() => User, 'ratedUserId')
73
+ ratedUser: User;
74
+ }
@@ -0,0 +1,86 @@
1
+ import {
2
+ BelongsTo,
3
+ Column,
4
+ DataType,
5
+ ForeignKey,
6
+ Table,
7
+ } from 'sequelize-typescript';
8
+ import { User } from './user.entity';
9
+ import { Model } from 'sequelize-typescript';
10
+ @Table({
11
+ tableName: 'recent_searches',
12
+ timestamps: true,
13
+ indexes: [
14
+ {
15
+ name: 'recent_searches_user_created_idx',
16
+ fields: ['userId', 'createdAt'],
17
+ },
18
+ ],
19
+ })
20
+ export class RecentSearch extends Model<RecentSearch> {
21
+ @Column({
22
+ type: DataType.UUID,
23
+ defaultValue: DataType.UUIDV4,
24
+ primaryKey: true,
25
+ })
26
+ declare id: string;
27
+
28
+ @ForeignKey(() => User)
29
+ @Column({
30
+ type: DataType.UUID,
31
+ allowNull: false,
32
+ })
33
+ userId: string;
34
+
35
+ @Column({
36
+ type: DataType.STRING,
37
+ allowNull: false,
38
+ })
39
+ searchQuery: string; // Texto de búsqueda
40
+
41
+ @Column({
42
+ type: DataType.STRING,
43
+ allowNull: true,
44
+ })
45
+ selectedAddress: string; // Dirección seleccionada
46
+
47
+ @Column({
48
+ type: DataType.GEOMETRY('POINT', 4326),
49
+ allowNull: true,
50
+ })
51
+ selectedLocation: any; // Ubicación seleccionada
52
+
53
+ @Column({
54
+ type: DataType.DOUBLE,
55
+ allowNull: true,
56
+ })
57
+ selectedLatitude: number;
58
+
59
+ @Column({
60
+ type: DataType.DOUBLE,
61
+ allowNull: true,
62
+ })
63
+ selectedLongitude: number;
64
+
65
+ @Column({
66
+ type: DataType.STRING,
67
+ allowNull: true,
68
+ })
69
+ placeId: string; // Google Places ID
70
+
71
+ @Column({
72
+ type: DataType.INTEGER,
73
+ defaultValue: 1,
74
+ })
75
+ searchCount: number; // Cuántas veces se ha buscado esto
76
+
77
+ @Column({
78
+ type: DataType.DATE,
79
+ allowNull: true,
80
+ })
81
+ lastSearchedAt: Date;
82
+
83
+ // Associations
84
+ @BelongsTo(() => User)
85
+ user: User;
86
+ }
@@ -0,0 +1,44 @@
1
+ // src/roles/entities/role.entity.ts
2
+ import { Table, Column, Model, DataType, HasMany } from 'sequelize-typescript';
3
+ import { User } from './user.entity';
4
+ @Table({
5
+ tableName: 'roles',
6
+ timestamps: true,
7
+ })
8
+ export class Role extends Model<Role> {
9
+ @Column({
10
+ type: DataType.UUID,
11
+ defaultValue: DataType.UUIDV4,
12
+ primaryKey: true,
13
+ })
14
+ declare id: string;
15
+
16
+ @Column({
17
+ type: DataType.STRING,
18
+ allowNull: false,
19
+ unique: true,
20
+ })
21
+ name: string; // 'passenger', 'driver', 'admin', 'super_admin', etc.
22
+
23
+ @Column({
24
+ type: DataType.STRING,
25
+ allowNull: true,
26
+ })
27
+ description: string;
28
+
29
+ @Column({
30
+ type: DataType.JSON,
31
+ allowNull: true,
32
+ })
33
+ permissions: string[]; // Array of permissions
34
+
35
+ @Column({
36
+ type: DataType.BOOLEAN,
37
+ defaultValue: true,
38
+ })
39
+ isActive: boolean;
40
+
41
+ // Associations
42
+ @HasMany(() => User, 'roleId')
43
+ users: User[];
44
+ }