@churchsoln/dbms 1.0.26 → 1.0.29

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 (51) hide show
  1. package/constants/index.js +37 -1
  2. package/controllers/master.js +0 -89
  3. package/migrations/{common/20221226143349-create-province.js → church/20221226151615-create-province.js} +2 -0
  4. package/migrations/{common/20221226150238-create-city.js → church/20221226151616-create-city.js} +1 -0
  5. package/migrations/church/20221226151618-create-membership.js +68 -0
  6. package/migrations/church/20221226151619-create-member.js +140 -0
  7. package/migrations/church/20221227151615-create-user.js +49 -139
  8. package/migrations/church/20230826140644-create-eventsUpdates.js +1 -0
  9. package/migrations/church/20240918170620-create-donation.js +2 -0
  10. package/migrations/church/20240918170621-create-church.js +17 -2
  11. package/migrations/church/20240918170627-create-pledge.js +0 -2
  12. package/migrations/common/20221226140655-create-subscriptionPlan.js +2 -2
  13. package/migrations/common/20240815170619-create-permission.js +2 -0
  14. package/migrations/common/20240815170620-create-church.js +1 -29
  15. package/models/church/church.js +16 -2
  16. package/models/{common → church}/city.js +2 -1
  17. package/models/church/member.js +171 -0
  18. package/models/church/membership.js +81 -0
  19. package/models/{common → church}/province.js +3 -1
  20. package/models/church/user.js +41 -254
  21. package/package.json +1 -1
  22. package/public/swagger/church.json +11 -23
  23. package/public/swagger/master.json +0 -313
  24. package/routes/v1/master.js +0 -24
  25. package/seeders/church/20241005124245-province.js +101 -0
  26. package/seeders/church/20241005124547-city.js +87 -0
  27. package/services/church.js +0 -2
  28. package/services/master.js +0 -152
  29. package/validators/church.js +1 -3
  30. package/workers/seed.js +1 -1
  31. package/migrations/church/20221226150553-create-maritalStatus.js +0 -25
  32. package/migrations/church/20221226151615-create-relationship.js +0 -25
  33. package/migrations/church/20240918170624-create-membershipType.js +0 -24
  34. package/migrations/church/20240918170625-update-user.js +0 -24
  35. package/migrations/church/20240918170626-update-eventsUpdate.js +0 -12
  36. package/migrations/church/20240918170628-update-pledge.js +0 -12
  37. package/migrations/church/20240918170629-update-donation.js +0 -12
  38. package/migrations/church/20240918170630-update-donation.js +0 -12
  39. package/migrations/church/20240918170631-update-church.js +0 -12
  40. package/migrations/common/20240918170624-update-church.js +0 -23
  41. package/migrations/common/20240918170625-update-permission.js +0 -17
  42. package/migrations/common/20240918170626-update-subscriptionPlan.js +0 -20
  43. package/migrations/common/20240918170628-update-church.js +0 -12
  44. package/models/church/maritalStatus.js +0 -15
  45. package/models/church/membershipType.js +0 -16
  46. package/models/church/relationship.js +0 -15
  47. package/seeders/church/20241005131256-maritalStatus.js +0 -43
  48. package/seeders/church/20241005131416-relationship.js +0 -43
  49. package/seeders/church/20241005131417-membershipType.js +0 -39
  50. package/seeders/common/20241005124245-province.js +0 -42
  51. package/seeders/common/20241005124547-city.js +0 -55
@@ -249,158 +249,6 @@ class MasterService {
249
249
  return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
250
250
  }
251
251
  }
252
- async addProvinceService(params) {
253
- try {
254
- const { name } = params;
255
- const alreadyExists = await commonDb.province.findOne({
256
- where: { name },
257
- attributes: commonDb.province.selectedFields,
258
- raw: true,
259
- });
260
- if (alreadyExists)
261
- return {
262
- code: errorCodes.HTTP_CONFLICT,
263
- message: errorMsgs.masterAlreadyExists,
264
- };
265
- await commonDb.province.create({ ...params });
266
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success };
267
- } catch (err) {
268
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
269
- }
270
- }
271
- async allProvincesService(params) {
272
- try {
273
- const { search = null } = params;
274
- const searchCondition = !!search
275
- ? { name: { [Op.like]: `%${search}%` } }
276
- : {};
277
- const data = await commonDb.province.findAll({
278
- where: { status: true, ...searchCondition },
279
- attributes: commonDb.province.selectedFields,
280
- raw: true,
281
- });
282
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success, data };
283
- } catch (err) {
284
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
285
- }
286
- }
287
- async provinceByIdService(params) {
288
- try {
289
- const { id } = params;
290
- const data = await commonDb.province.findOne({
291
- where: { status: true, id },
292
- attributes: commonDb.province.selectedFields,
293
- raw: true,
294
- });
295
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success, data };
296
- } catch (err) {
297
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
298
- }
299
- }
300
- async updateProvinceByIdService(params) {
301
- try {
302
- const { id, name } = params;
303
- const alreadyExists = await commonDb.province.findOne({
304
- where: { name, id: { [Op.ne]: id } },
305
- attributes: commonDb.province.selectedFields,
306
- raw: true,
307
- });
308
- if (alreadyExists)
309
- return {
310
- code: errorCodes.HTTP_CONFLICT,
311
- message: errorMsgs.masterAlreadyExists,
312
- };
313
- await commonDb.province.update({ name }, { where: { id } });
314
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success };
315
- } catch (err) {
316
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
317
- }
318
- }
319
- async deleteProvinceByIdService(params) {
320
- try {
321
- const { id } = params;
322
- await commonDb.province.update({ status: false }, { where: { id } });
323
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success };
324
- } catch (err) {
325
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
326
- }
327
- }
328
- async allCitiesService(params) {
329
- try {
330
- const { provinceId, search = null } = params;
331
- const searchCondition = !!search
332
- ? { name: { [Op.like]: `%${search}%` } }
333
- : {};
334
- const data = await commonDb.city.findAll({
335
- where: { status: true, provinceId, ...searchCondition },
336
- attributes: commonDb.city.selectedFields,
337
- raw: true,
338
- });
339
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success, data };
340
- } catch (err) {
341
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
342
- }
343
- }
344
- async addCityService(params) {
345
- try {
346
- const { name } = params;
347
- const alreadyExists = await commonDb.city.findOne({
348
- where: { name },
349
- attributes: commonDb.city.selectedFields,
350
- raw: true,
351
- });
352
- if (alreadyExists)
353
- return {
354
- code: errorCodes.HTTP_CONFLICT,
355
- message: errorMsgs.masterAlreadyExists,
356
- };
357
- await commonDb.city.create({ ...params });
358
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success };
359
- } catch (err) {
360
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
361
- }
362
- }
363
- async cityByIdService(params) {
364
- try {
365
- const { id } = params;
366
- const data = await commonDb.city.findOne({
367
- where: { status: true, id },
368
- attributes: commonDb.city.selectedFields,
369
- raw: true,
370
- });
371
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success, data };
372
- } catch (err) {
373
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
374
- }
375
- }
376
- async updateCityByIdService(params) {
377
- try {
378
- const { id, name } = params;
379
- const alreadyExists = await commonDb.city.findOne({
380
- where: { name, id: { [Op.ne]: id } },
381
- attributes: commonDb.city.selectedFields,
382
- raw: true,
383
- });
384
- if (alreadyExists)
385
- return {
386
- code: errorCodes.HTTP_CONFLICT,
387
- message: errorMsgs.masterAlreadyExists,
388
- };
389
- await commonDb.city.update({ name }, { where: { id } });
390
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success };
391
- } catch (err) {
392
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
393
- }
394
- }
395
- async deleteCityByIdService(params) {
396
- try {
397
- const { id } = params;
398
- await commonDb.city.update({ status: false }, { where: { id } });
399
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success };
400
- } catch (err) {
401
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
402
- }
403
- }
404
252
  async addPermission(params) {
405
253
  try {
406
254
  const { name } = params;
@@ -19,10 +19,8 @@ const schemas = {
19
19
  otherwise: BaseJoi.optional(),
20
20
  }),
21
21
  churchAdminDetails: BaseJoi.object({
22
- firstName: BaseJoi.string().required(),
23
- lastName: BaseJoi.string().required(),
22
+ username: BaseJoi.string().required(),
24
23
  email: BaseJoi.string().required(),
25
- phone: BaseJoi.string().required(),
26
24
  password: BaseJoi.string().required(),
27
25
  }).required(),
28
26
  }),
package/workers/seed.js CHANGED
@@ -17,7 +17,7 @@ const seedDb = async (seedData) => {
17
17
  );
18
18
  }
19
19
  exec(
20
- `npx sequelize-cli db:seed:all --url ${connectionUrl} --seeders-path ${
20
+ `DEBUG=sequelize:* npx sequelize-cli db:seed:all --url ${connectionUrl} --seeders-path ${
21
21
  isCommonDb ? "./seeders/common" : "./seeders/church"
22
22
  }`,
23
23
  async (error, stdout, stderr) => {
@@ -1,25 +0,0 @@
1
- "use strict";
2
- module.exports = {
3
- up: async (queryInterface, DataTypes) => {
4
- await queryInterface.createTable(
5
- "MaritalStatus",
6
- {
7
- id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
8
- name: { type: DataTypes.STRING },
9
- status: { type: DataTypes.BOOLEAN, defaultValue: true },
10
- createdAt: {
11
- type: DataTypes.DATE,
12
- defaultValue: DataTypes.literal("CURRENT_TIMESTAMP"),
13
- },
14
- updatedAt: {
15
- type: DataTypes.DATE,
16
- defaultValue: DataTypes.literal("CURRENT_TIMESTAMP"),
17
- },
18
- },
19
- { timestamps: false }
20
- );
21
- },
22
- down: async (queryInterface) => {
23
- await queryInterface.dropTable("MaritalStatus");
24
- },
25
- };
@@ -1,25 +0,0 @@
1
- "use strict";
2
- module.exports = {
3
- up: async (queryInterface, DataTypes) => {
4
- await queryInterface.createTable(
5
- "Relationship",
6
- {
7
- id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
8
- name: { type: DataTypes.STRING },
9
- status: { type: DataTypes.BOOLEAN, defaultValue: true },
10
- createdAt: {
11
- type: DataTypes.DATE,
12
- defaultValue: DataTypes.literal("CURRENT_TIMESTAMP"),
13
- },
14
- updatedAt: {
15
- type: DataTypes.DATE,
16
- defaultValue: DataTypes.literal("CURRENT_TIMESTAMP"),
17
- },
18
- },
19
- { timestamps: false }
20
- );
21
- },
22
- down: async (queryInterface) => {
23
- await queryInterface.dropTable("Relationship");
24
- },
25
- };
@@ -1,24 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- await queryInterface
6
- .createTable(
7
- "MembershipType",
8
- {
9
- id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
10
- name: { type: DataTypes.STRING },
11
- isDefault: { type: DataTypes.BOOLEAN, defaultValue: false },
12
- status: { type: DataTypes.BOOLEAN, defaultValue: true },
13
- createdAt: {
14
- type: DataTypes.DATE,
15
- defaultValue: DataTypes.literal("CURRENT_TIMESTAMP"),
16
- },
17
- updatedAt: {
18
- type: DataTypes.DATE,
19
- defaultValue: DataTypes.literal("CURRENT_TIMESTAMP"),
20
- },
21
- }
22
- )
23
- }
24
- }
@@ -1,24 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- return Promise.all([
6
- queryInterface.addColumn("User", "membershipTypeId", {
7
- type: DataTypes.INTEGER,
8
- }).then(() => {
9
- queryInterface.addConstraint("User", {
10
- fields: ["membershipTypeId"],
11
- type: "foreign key",
12
- name: "user_membershipTypeId_fk",
13
- references: {
14
- table: "MembershipType",
15
- field: "id",
16
- },
17
- onDelete: "cascade",
18
- onUpdate: "cascade",
19
- });
20
- })
21
- ]);
22
- },
23
- down: async (queryInterface) => {},
24
- };
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- return Promise.all([
6
- queryInterface.addColumn("EventsUpdates", "url", {
7
- type: DataTypes.STRING,
8
- })
9
- ]);
10
- },
11
- down: async (queryInterface) => {},
12
- };
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- return Promise.all([
6
- queryInterface.removeColumn("Pledge", "received"),
7
- queryInterface.removeColumn("Pledge", "remaining"),
8
- ]);
9
- },
10
-
11
- down: async (queryInterface) => {},
12
- };
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- return Promise.all([
6
- queryInterface.addColumn("Donation", "isLoosePlate", {
7
- type: DataTypes.BOOLEAN,
8
- })
9
- ]);
10
- },
11
- down: async (queryInterface) => {},
12
- };
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- return Promise.all([
6
- queryInterface.addColumn("Donation", "fullName", {
7
- type: DataTypes.STRING,
8
- })
9
- ]);
10
- },
11
- down: async (queryInterface) => {},
12
- };
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- return Promise.all([
6
- queryInterface.addColumn("Church", "emailAppPassword", {
7
- type: DataTypes.STRING,
8
- })
9
- ]);
10
- },
11
- down: async (queryInterface) => {},
12
- };
@@ -1,23 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- return Promise.all([
6
- queryInterface.removeColumn("Church", "profile_image"),
7
- queryInterface.removeColumn("Church", "registration_agency"),
8
- queryInterface.removeColumn("Church", "charitable_reg_no"),
9
- queryInterface.removeColumn("Church", "currency"),
10
- queryInterface.removeColumn("Church", "postalCode"),
11
- queryInterface.removeColumn("Church", "country"),
12
- queryInterface.removeConstraint("Church", "church_provinceId_fk").then(() =>
13
- queryInterface.removeColumn("Church", "provinceId")
14
- ),
15
- queryInterface.removeConstraint("Church", "church_cityId_fk").then(() =>
16
- queryInterface.removeColumn("Church", "cityId")
17
- ),
18
- queryInterface.removeColumn("Church", "address"),
19
- ]);
20
- },
21
-
22
- down: async (queryInterface) => {},
23
- };
@@ -1,17 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- return Promise.all([
6
- queryInterface.addColumn("Permission", "isSubscription", {
7
- type: DataTypes.BOOLEAN,
8
- defaultValue: false,
9
- }),
10
- queryInterface.addColumn("Permission", "cost", {
11
- type: DataTypes.FLOAT,
12
- defaultValue: 0,
13
- }),
14
- ]);
15
- },
16
- down: async (queryInterface) => {},
17
- };
@@ -1,20 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- return Promise.all([
6
- queryInterface.removeColumn("SubscriptionPlan", "planCost"),
7
- queryInterface.removeColumn("SubscriptionPlan", "validity"),
8
- queryInterface.addColumn("SubscriptionPlan", "isFree", {
9
- type: DataTypes.BOOLEAN,
10
- defaultValue: false,
11
- }),
12
- queryInterface.addColumn("SubscriptionPlan", "isCustom", {
13
- type: DataTypes.BOOLEAN,
14
- defaultValue: false,
15
- }),
16
- ]);
17
- },
18
-
19
- down: async (queryInterface) => {},
20
- };
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, DataTypes) => {
5
- return Promise.all([
6
- queryInterface.addColumn("Church", "expiresAt", {
7
- type: DataTypes.DATEONLY,
8
- }),
9
- ]);
10
- },
11
- down: async (queryInterface) => {},
12
- };
@@ -1,15 +0,0 @@
1
- module.exports = (sequelize, DataTypes) => {
2
- const maritalStatus = sequelize.define(
3
- "MaritalStatus",
4
- {
5
- id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
6
- name: { type: DataTypes.STRING },
7
- status: { type: DataTypes.BOOLEAN },
8
- createdAt: { type: DataTypes.DATE },
9
- updatedAt: { type: DataTypes.DATE },
10
- },
11
- { freezeTableName: true, timestamps: false }
12
- );
13
- maritalStatus.selectedFields = ["id", "name"];
14
- return maritalStatus;
15
- };
@@ -1,16 +0,0 @@
1
- module.exports = (sequelize, DataTypes) => {
2
- const membershipType = sequelize.define(
3
- "MembershipType",
4
- {
5
- id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
6
- name: { type: DataTypes.STRING },
7
- isDefault: { type: DataTypes.BOOLEAN, defaultValue: false },
8
- status: { type: DataTypes.BOOLEAN, defaultValue: true },
9
- createdAt: { type: DataTypes.DATE },
10
- updatedAt: { type: DataTypes.DATE },
11
- },
12
- { freezeTableName: true, timestamps: false }
13
- );
14
- membershipType.selectedFields = ["id", "name", "isDefault", "status", "createdAt", "updatedAt"];
15
- return membershipType;
16
- };
@@ -1,15 +0,0 @@
1
- module.exports = (sequelize, DataTypes) => {
2
- const relationship = sequelize.define(
3
- "Relationship",
4
- {
5
- id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
6
- name: { type: DataTypes.STRING },
7
- status: { type: DataTypes.BOOLEAN },
8
- createdAt: { type: DataTypes.DATE },
9
- updatedAt: { type: DataTypes.DATE },
10
- },
11
- { freezeTableName: true, timestamps: false }
12
- );
13
- relationship.selectedFields = ["id", "name"];
14
- return relationship;
15
- };
@@ -1,43 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, Sequelize) => {
5
- const statuses = [
6
- { name: "Single", status: true },
7
- { name: "Married", status: true },
8
- { name: "Divorced", status: true },
9
- { name: "Widowed", status: true },
10
- { name: "Separated", status: true },
11
- ];
12
-
13
- for (const status of statuses) {
14
- const existingStatus = await queryInterface.rawSelect(
15
- "MaritalStatus",
16
- {
17
- where: { name: status.name },
18
- },
19
- ["id"]
20
- );
21
-
22
- if (existingStatus) {
23
- await queryInterface.bulkUpdate(
24
- "MaritalStatus",
25
- { status: status.status },
26
- { name: status.name }
27
- );
28
- } else {
29
- await queryInterface.bulkInsert("MaritalStatus", [status], {});
30
- }
31
- }
32
- },
33
-
34
- down: async (queryInterface, Sequelize) => {
35
- await queryInterface.bulkDelete(
36
- "MaritalStatus",
37
- {
38
- name: statuses.map((status) => status.name),
39
- },
40
- {}
41
- );
42
- },
43
- };
@@ -1,43 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, Sequelize) => {
5
- const relationships = [
6
- { name: "Parent", status: true },
7
- { name: "Sibling", status: true },
8
- { name: "Child", status: true },
9
- { name: "Spouse", status: true },
10
- { name: "Friend", status: true },
11
- ];
12
-
13
- for (const relationship of relationships) {
14
- const existingRelationship = await queryInterface.rawSelect(
15
- "Relationship",
16
- {
17
- where: { name: relationship.name },
18
- },
19
- ["id"]
20
- );
21
-
22
- if (existingRelationship) {
23
- await queryInterface.bulkUpdate(
24
- "Relationship",
25
- { status: relationship.status },
26
- { name: relationship.name }
27
- );
28
- } else {
29
- await queryInterface.bulkInsert("Relationship", [relationship], {});
30
- }
31
- }
32
- },
33
-
34
- down: async (queryInterface, Sequelize) => {
35
- await queryInterface.bulkDelete(
36
- "Relationship",
37
- {
38
- name: relationships.map((relationship) => relationship.name),
39
- },
40
- {}
41
- );
42
- },
43
- };
@@ -1,39 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, Sequelize) => {
5
- const membershipTypes = [
6
- { name: "Member", isDefault: true },
7
- ];
8
-
9
- for (const membershipType of membershipTypes) {
10
- const existingMembershipType = await queryInterface.rawSelect(
11
- "MembershipType",
12
- {
13
- where: { name: membershipType.name },
14
- },
15
- ["id"]
16
- );
17
-
18
- if (existingMembershipType) {
19
- await queryInterface.bulkUpdate(
20
- "MembershipType",
21
- { isDefault: membershipType.isDefault },
22
- { name: membershipType.name }
23
- );
24
- } else {
25
- await queryInterface.bulkInsert("MembershipType", [membershipType], {});
26
- }
27
- }
28
- },
29
-
30
- down: async (queryInterface, Sequelize) => {
31
- await queryInterface.bulkDelete(
32
- "MembershipType",
33
- {
34
- name: membershipTypes.map((membershipType) => membershipType.name),
35
- },
36
- {}
37
- );
38
- },
39
- };
@@ -1,42 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- up: async (queryInterface, Sequelize) => {
5
- const provinces = [
6
- { name: "Ontario" },
7
- { name: "Quebec" },
8
- { name: "Manitoba" },
9
- { name: "Nunavut" },
10
- ];
11
-
12
- for (const province of provinces) {
13
- const existingProvince = await queryInterface.rawSelect(
14
- "Province",
15
- {
16
- where: { name: province.name },
17
- },
18
- ["id"]
19
- );
20
-
21
- if (existingProvince) {
22
- await queryInterface.bulkUpdate(
23
- "Province",
24
- { name: province.name },
25
- { name: province.name }
26
- );
27
- } else {
28
- await queryInterface.bulkInsert("Province", [province], {});
29
- }
30
- }
31
- },
32
-
33
- down: async (queryInterface, Sequelize) => {
34
- await queryInterface.bulkDelete(
35
- "Province",
36
- {
37
- name: provinces.map((province) => province.name),
38
- },
39
- {}
40
- );
41
- },
42
- };