ojamoto_models 1.0.0 → 1.0.2

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/models/User.js CHANGED
@@ -1,198 +1,210 @@
1
- "use strict";
2
-
3
- const { Model, DataTypes } = require("sequelize");
4
- const { USER_STATUS } = require("../services/constants");
5
-
6
- module.exports = (sequelize) => {
7
- class User extends Model {
8
- static associate(models) {
9
- // Roles (many-to-many)
10
- User.belongsToMany(models.Role, {
11
- through: models.UserRole,
12
- foreignKey: "user_id",
13
- otherKey: "role_id",
14
- as: "roles",
15
- });
16
-
17
- // Address
18
- User.hasMany(models.Address, {
19
- foreignKey: "user_id",
20
- as: "addresses",
21
- });
22
-
23
- // KYC
24
- User.hasOne(models.KycVerification, {
25
- foreignKey: "user_id",
26
- as: "kyc",
27
- });
28
-
29
- // Wallet
30
- User.hasOne(models.Wallet, {
31
- foreignKey: "user_id",
32
- as: "wallet",
33
- });
34
-
35
- // Seller profile
36
- User.hasOne(models.SellerProfile, {
37
- foreignKey: "user_id",
38
- as: "sellerProfile",
39
- });
40
-
41
- // Products listed by this seller
42
- User.hasMany(models.Product, {
43
- foreignKey: "seller_id",
44
- as: "products",
45
- });
46
-
47
- // Devices
48
- User.hasMany(models.Device, {
49
- foreignKey: "user_id",
50
- as: "devices",
51
- });
52
-
53
- // Sessions
54
- User.hasMany(models.Session, {
55
- foreignKey: "user_id",
56
- as: "sessions",
57
- });
58
-
59
- // Escrows as buyer
60
- User.hasMany(models.Escrow, {
61
- foreignKey: "buyer_id",
62
- as: "buyerEscrows",
63
- });
64
-
65
- // Escrows as seller
66
- User.hasMany(models.Escrow, {
67
- foreignKey: "seller_id",
68
- as: "sellerEscrows",
69
- });
70
-
71
- // Disputes opened by this user
72
- User.hasMany(models.Dispute, {
73
- foreignKey: "opened_by",
74
- as: "openedDisputes",
75
- });
76
-
77
- // Ratings given (as buyer)
78
- User.hasMany(models.Rating, {
79
- foreignKey: "buyer_id",
80
- as: "givenRatings",
81
- });
82
-
83
- // Ratings received (as seller)
84
- User.hasMany(models.Rating, {
85
- foreignKey: "seller_id",
86
- as: "receivedRatings",
87
- });
88
-
89
- // Notifications
90
- User.hasMany(models.Notification, {
91
- foreignKey: "user_id",
92
- as: "notifications",
93
- });
94
-
95
- // Audit logs
96
- User.hasMany(models.AuditLog, {
97
- foreignKey: "user_id",
98
- as: "auditLogs",
99
- });
100
-
101
- // Wallet transactions
102
- User.hasMany(models.WalletTransaction, {
103
- foreignKey: "user_id",
104
- as: "walletTransactions",
105
- });
106
- }
107
- }
108
-
109
- User.init(
110
- {
111
- user_id: {
112
- type: DataTypes.INTEGER,
113
- primaryKey: true,
114
- autoIncrement: true,
115
- },
116
- uuid: {
117
- type: DataTypes.UUID,
118
- defaultValue: DataTypes.UUIDV4,
119
- allowNull: false,
120
- unique: true,
121
- },
122
- first_name: {
123
- type: DataTypes.STRING(100),
124
- allowNull: false,
125
- },
126
- last_name: {
127
- type: DataTypes.STRING(100),
128
- allowNull: false,
129
- },
130
- middle_name: {
131
- type: DataTypes.STRING(100),
132
- allowNull: true,
133
- },
134
- email: {
135
- type: DataTypes.STRING(255),
136
- allowNull: false,
137
- unique: true,
138
- validate: { isEmail: true },
139
- },
140
- phone: {
141
- type: DataTypes.STRING(10),
142
- allowNull: false,
143
- unique: true,
144
- },
145
- country_calling_code: {
146
- type: DataTypes.STRING(3),
147
- allowNull: false,
148
- },
149
- password_hash: {
150
- type: DataTypes.STRING(255),
151
- allowNull: false,
152
- },
153
- transaction_pin_hash: {
154
- type: DataTypes.STRING(255),
155
- allowNull: true,
156
- },
157
- status: {
158
- type: DataTypes.ENUM(...Object.values(USER_STATUS)),
159
- allowNull: false,
160
- defaultValue: USER_STATUS.ACTIVE,
161
- },
162
- email_verified: {
163
- type: DataTypes.BOOLEAN,
164
- defaultValue: false,
165
- },
166
- phone_verified: {
167
- type: DataTypes.BOOLEAN,
168
- defaultValue: false,
169
- },
170
- nin_verified: {
171
- type: DataTypes.BOOLEAN,
172
- defaultValue: false,
173
- comment: "Sellers only",
174
- },
175
- bank_verified: {
176
- type: DataTypes.BOOLEAN,
177
- defaultValue: false,
178
- },
179
- two_factor_enabled: {
180
- type: DataTypes.BOOLEAN,
181
- defaultValue: false,
182
- },
183
- },
184
- {
185
- sequelize,
186
- modelName: "User",
187
- tableName: "users",
188
- timestamps: true,
189
- paranoid: true,
190
- createdAt: "created_at",
191
- updatedAt: "updated_at",
192
- deletedAt: "deleted_at",
193
- },
194
- );
195
-
196
- User.removeAttribute("id");
197
- return User;
198
- };
1
+ "use strict";
2
+
3
+ const { Model, DataTypes } = require("sequelize");
4
+ const { USER_STATUS } = require("../services/constants");
5
+
6
+ module.exports = (sequelize) => {
7
+ class User extends Model {
8
+ static associate(models) {
9
+ // Roles (many-to-many)
10
+ User.belongsToMany(models.Role, {
11
+ through: models.UserRole,
12
+ foreignKey: "user_id",
13
+ otherKey: "role_id",
14
+ as: "roles",
15
+ });
16
+
17
+ // Address
18
+ User.hasMany(models.Address, {
19
+ foreignKey: "user_id",
20
+ as: "addresses",
21
+ });
22
+
23
+ // KYC
24
+ User.hasOne(models.KycVerification, {
25
+ foreignKey: "user_id",
26
+ as: "kyc",
27
+ });
28
+
29
+ // Wallet
30
+ User.hasOne(models.Wallet, {
31
+ foreignKey: "user_id",
32
+ as: "wallet",
33
+ });
34
+
35
+ // Seller profile
36
+ User.hasOne(models.SellerProfile, {
37
+ foreignKey: "user_id",
38
+ as: "sellerProfile",
39
+ });
40
+
41
+ // Products listed by this seller
42
+ User.hasMany(models.Product, {
43
+ foreignKey: "seller_id",
44
+ as: "products",
45
+ });
46
+
47
+ // Devices
48
+ User.hasMany(models.Device, {
49
+ foreignKey: "user_id",
50
+ as: "devices",
51
+ });
52
+
53
+ // Sessions
54
+ User.hasMany(models.Session, {
55
+ foreignKey: "user_id",
56
+ as: "sessions",
57
+ });
58
+
59
+ // Escrows as buyer
60
+ User.hasMany(models.Escrow, {
61
+ foreignKey: "buyer_id",
62
+ as: "buyerEscrows",
63
+ });
64
+
65
+ // Escrows as seller
66
+ User.hasMany(models.Escrow, {
67
+ foreignKey: "seller_id",
68
+ as: "sellerEscrows",
69
+ });
70
+
71
+ // Disputes opened by this user
72
+ User.hasMany(models.Dispute, {
73
+ foreignKey: "opened_by",
74
+ as: "openedDisputes",
75
+ });
76
+
77
+ // Ratings given (as buyer)
78
+ User.hasMany(models.Rating, {
79
+ foreignKey: "buyer_id",
80
+ as: "givenRatings",
81
+ });
82
+
83
+ // Ratings received (as seller)
84
+ User.hasMany(models.Rating, {
85
+ foreignKey: "seller_id",
86
+ as: "receivedRatings",
87
+ });
88
+
89
+ // Notifications
90
+ User.hasMany(models.Notification, {
91
+ foreignKey: "user_id",
92
+ as: "notifications",
93
+ });
94
+
95
+ // Audit logs
96
+ User.hasMany(models.AuditLog, {
97
+ foreignKey: "user_id",
98
+ as: "auditLogs",
99
+ });
100
+
101
+ // Wallet transactions
102
+ User.hasMany(models.WalletTransaction, {
103
+ foreignKey: "user_id",
104
+ as: "walletTransactions",
105
+ });
106
+ }
107
+ }
108
+
109
+ User.init(
110
+ {
111
+ user_id: {
112
+ type: DataTypes.INTEGER,
113
+ primaryKey: true,
114
+ autoIncrement: true,
115
+ },
116
+ uuid: {
117
+ type: DataTypes.UUID,
118
+ defaultValue: DataTypes.UUIDV4,
119
+ allowNull: false,
120
+ unique: true,
121
+ },
122
+ first_name: {
123
+ type: DataTypes.STRING(100),
124
+ allowNull: false,
125
+ },
126
+ last_name: {
127
+ type: DataTypes.STRING(100),
128
+ allowNull: false,
129
+ },
130
+ middle_name: {
131
+ type: DataTypes.STRING(100),
132
+ allowNull: true,
133
+ },
134
+ email: {
135
+ type: DataTypes.STRING(255),
136
+ allowNull: false,
137
+ unique: true,
138
+ validate: { isEmail: true },
139
+ },
140
+ phone: {
141
+ type: DataTypes.STRING(10),
142
+ allowNull: false,
143
+ unique: true,
144
+ },
145
+ country_calling_code: {
146
+ type: DataTypes.STRING(3),
147
+ allowNull: false,
148
+ },
149
+ password_hash: {
150
+ type: DataTypes.STRING(255),
151
+ allowNull: false,
152
+ },
153
+ transaction_pin_hash: {
154
+ type: DataTypes.STRING(255),
155
+ allowNull: true,
156
+ },
157
+ is_transaction_pin_set: {
158
+ type: DataTypes.BOOLEAN,
159
+ defaultValue: false,
160
+ },
161
+ is_seller_profile_created: {
162
+ type: DataTypes.BOOLEAN,
163
+ defaultValue: false,
164
+ },
165
+ status: {
166
+ type: DataTypes.ENUM(...Object.values(USER_STATUS)),
167
+ allowNull: false,
168
+ defaultValue: USER_STATUS.ACTIVE,
169
+ },
170
+ email_verified: {
171
+ type: DataTypes.BOOLEAN,
172
+ defaultValue: false,
173
+ },
174
+ phone_verified: {
175
+ type: DataTypes.BOOLEAN,
176
+ defaultValue: false,
177
+ },
178
+ nin_verified: {
179
+ type: DataTypes.BOOLEAN,
180
+ defaultValue: false,
181
+ comment: "Sellers only",
182
+ },
183
+ bank_verified: {
184
+ type: DataTypes.BOOLEAN,
185
+ defaultValue: false,
186
+ },
187
+ two_factor_enabled: {
188
+ type: DataTypes.BOOLEAN,
189
+ defaultValue: false,
190
+ },
191
+ totp_secret: {
192
+ type: DataTypes.STRING,
193
+ allowNull: true,
194
+ },
195
+ },
196
+ {
197
+ sequelize,
198
+ modelName: "User",
199
+ tableName: "users",
200
+ timestamps: true,
201
+ paranoid: true,
202
+ createdAt: "created_at",
203
+ updatedAt: "updated_at",
204
+ deletedAt: "deleted_at",
205
+ },
206
+ );
207
+
208
+ User.removeAttribute("id");
209
+ return User;
210
+ };
@@ -1,42 +1,42 @@
1
- "use strict";
2
-
3
- const { Model, DataTypes } = require("sequelize");
4
-
5
- module.exports = (sequelize) => {
6
- class UserRole extends Model {
7
- static associate(models) {}
8
- }
9
-
10
- UserRole.init(
11
- {
12
- user_role_id: {
13
- type: DataTypes.INTEGER,
14
- primaryKey: true,
15
- autoIncrement: true,
16
- },
17
- user_id: {
18
- type: DataTypes.INTEGER,
19
- allowNull: false,
20
- references: { model: "users", key: "user_id" },
21
- onDelete: "CASCADE",
22
- },
23
- role_id: {
24
- type: DataTypes.INTEGER,
25
- allowNull: false,
26
- references: { model: "roles", key: "role_id" },
27
- onDelete: "CASCADE",
28
- },
29
- },
30
- {
31
- sequelize,
32
- modelName: "UserRole",
33
- tableName: "user_roles",
34
- timestamps: true,
35
- createdAt: "created_at",
36
- updatedAt: "updated_at",
37
- },
38
- );
39
-
40
- UserRole.removeAttribute("id");
41
- return UserRole;
42
- };
1
+ "use strict";
2
+
3
+ const { Model, DataTypes } = require("sequelize");
4
+
5
+ module.exports = (sequelize) => {
6
+ class UserRole extends Model {
7
+ static associate(models) {}
8
+ }
9
+
10
+ UserRole.init(
11
+ {
12
+ user_role_id: {
13
+ type: DataTypes.INTEGER,
14
+ primaryKey: true,
15
+ autoIncrement: true,
16
+ },
17
+ user_id: {
18
+ type: DataTypes.INTEGER,
19
+ allowNull: false,
20
+ references: { model: "users", key: "user_id" },
21
+ onDelete: "CASCADE",
22
+ },
23
+ role_id: {
24
+ type: DataTypes.INTEGER,
25
+ allowNull: false,
26
+ references: { model: "roles", key: "role_id" },
27
+ onDelete: "CASCADE",
28
+ },
29
+ },
30
+ {
31
+ sequelize,
32
+ modelName: "UserRole",
33
+ tableName: "user_roles",
34
+ timestamps: true,
35
+ createdAt: "created_at",
36
+ updatedAt: "updated_at",
37
+ },
38
+ );
39
+
40
+ UserRole.removeAttribute("id");
41
+ return UserRole;
42
+ };
package/models/Wallet.js CHANGED
@@ -1,63 +1,63 @@
1
- "use strict";
2
-
3
- const { Model, DataTypes } = require("sequelize");
4
-
5
- module.exports = (sequelize) => {
6
- class Wallet extends Model {
7
- static associate(models) {
8
- Wallet.belongsTo(models.User, {
9
- foreignKey: "user_id",
10
- as: "user",
11
- });
12
-
13
- Wallet.hasMany(models.WalletTransaction, {
14
- foreignKey: "wallet_id",
15
- as: "transactions",
16
- });
17
- }
18
- }
19
-
20
- Wallet.init(
21
- {
22
- wallet_id: {
23
- type: DataTypes.INTEGER,
24
- primaryKey: true,
25
- autoIncrement: true,
26
- },
27
- user_id: {
28
- type: DataTypes.INTEGER,
29
- allowNull: false,
30
- unique: true,
31
- references: { model: "users", key: "user_id" },
32
- onDelete: "CASCADE",
33
- comment: "One wallet per user",
34
- },
35
- available_balance: {
36
- type: DataTypes.DECIMAL(15, 2),
37
- allowNull: false,
38
- defaultValue: 0.0,
39
- comment: "Spendable funds",
40
- },
41
- locked_balance: {
42
- type: DataTypes.DECIMAL(15, 2),
43
- allowNull: false,
44
- defaultValue: 0.0,
45
- comment: "Funds currently held in active escrows",
46
- },
47
- currency: {
48
- type: DataTypes.STRING(3),
49
- allowNull: false,
50
- defaultValue: "NGN",
51
- },
52
- },
53
- {
54
- sequelize,
55
- modelName: "Wallet",
56
- tableName: "wallets",
57
- timestamps: false,
58
- },
59
- );
60
-
61
- Wallet.removeAttribute("id");
62
- return Wallet;
63
- };
1
+ "use strict";
2
+
3
+ const { Model, DataTypes } = require("sequelize");
4
+
5
+ module.exports = (sequelize) => {
6
+ class Wallet extends Model {
7
+ static associate(models) {
8
+ Wallet.belongsTo(models.User, {
9
+ foreignKey: "user_id",
10
+ as: "user",
11
+ });
12
+
13
+ Wallet.hasMany(models.WalletTransaction, {
14
+ foreignKey: "wallet_id",
15
+ as: "transactions",
16
+ });
17
+ }
18
+ }
19
+
20
+ Wallet.init(
21
+ {
22
+ wallet_id: {
23
+ type: DataTypes.INTEGER,
24
+ primaryKey: true,
25
+ autoIncrement: true,
26
+ },
27
+ user_id: {
28
+ type: DataTypes.INTEGER,
29
+ allowNull: false,
30
+ unique: true,
31
+ references: { model: "users", key: "user_id" },
32
+ onDelete: "CASCADE",
33
+ comment: "One wallet per user",
34
+ },
35
+ available_balance: {
36
+ type: DataTypes.DECIMAL(15, 2),
37
+ allowNull: false,
38
+ defaultValue: 0.0,
39
+ comment: "Spendable funds",
40
+ },
41
+ locked_balance: {
42
+ type: DataTypes.DECIMAL(15, 2),
43
+ allowNull: false,
44
+ defaultValue: 0.0,
45
+ comment: "Funds currently held in active escrows",
46
+ },
47
+ currency: {
48
+ type: DataTypes.STRING(3),
49
+ allowNull: false,
50
+ defaultValue: "NGN",
51
+ },
52
+ },
53
+ {
54
+ sequelize,
55
+ modelName: "Wallet",
56
+ tableName: "wallets",
57
+ timestamps: false,
58
+ },
59
+ );
60
+
61
+ Wallet.removeAttribute("id");
62
+ return Wallet;
63
+ };