├── .sequelizerc
├── README.md
├── migrations
├── 20230128195917-create-university.js
├── 20230128210831-update-university-model.js
├── 20230128220409-create-campus.js
├── 20230129124456-create-programme.js
├── 20230129210531-create-lead.js
├── 20230129211004-create-programe-details.js
├── 20230130153947-create-applicants.js
├── 20230130154538-create-application-details.js
├── 20230203151011-update-uni-column.js
├── 20230204003147-create-users.js
├── 20230204202846-unnamed-migration.js
├── 20230207192220-create-acctivity.js
├── 20230208183942-create-property.js
├── 20230208191554-create-currency.js
├── 20230209184318-create-branch.js
└── 20230209195650-create-roles.js
├── package-lock.json
├── package.json
├── readme.txt
├── seeders
└── 20230212195646-add-role.js
├── src
├── api
│ ├── controllers
│ │ ├── admin
│ │ │ ├── activity.controller.js
│ │ │ ├── admin.controller.js
│ │ │ ├── cms.controller.js
│ │ │ ├── contact.controller.js
│ │ │ ├── email.controller.js
│ │ │ ├── faq.controller.js
│ │ │ ├── faqCategories.controller.js
│ │ │ ├── newsletter.controller.js
│ │ │ ├── roles.controller.js
│ │ │ ├── settings.controller.js
│ │ │ ├── staff.controller.js
│ │ │ └── users.controller.js
│ │ ├── front-bk
│ │ │ ├── auth.controller.js
│ │ │ ├── cms.controller.js
│ │ │ ├── contact.controller.js
│ │ │ ├── faq.controller.js
│ │ │ ├── footer.controller.js
│ │ │ ├── settings.controller.js
│ │ │ └── users.controller.js
│ │ └── front
│ │ │ ├── activities.controller.js
│ │ │ ├── applicants.controller.js
│ │ │ ├── applicationmodulestatus.controller.js
│ │ │ ├── backup.controller.js
│ │ │ ├── billinginfo.controller.js
│ │ │ ├── branch.controller.js
│ │ │ ├── commissioninvoice.controller.js
│ │ │ ├── commissioninvoiceitem.controller.js
│ │ │ ├── costofsales.controller.js
│ │ │ ├── currencies.controller.js
│ │ │ ├── depitandcredit.controller.js
│ │ │ ├── expenses.controller.js
│ │ │ ├── generalinvoice.controller.js
│ │ │ ├── generalinvoiceitem.controller.js
│ │ │ ├── interestedprogram.controller.js
│ │ │ ├── invoicemodulestatus.controller.js
│ │ │ ├── lead.controller.js
│ │ │ ├── leadgroup.controller.js
│ │ │ ├── leadsmanagmentmodulestatus.controller.js
│ │ │ ├── mailing.controller.js
│ │ │ ├── programcategory.controller.js
│ │ │ ├── programlevel.controller.js
│ │ │ ├── programme.controller.js
│ │ │ ├── properties.controller.js
│ │ │ ├── qualificationtype.controller.js
│ │ │ ├── sales.controller.js
│ │ │ ├── test.html
│ │ │ ├── university.controller.js
│ │ │ ├── universitytype.controller.js
│ │ │ └── users.controller.js
│ ├── middlewares
│ │ ├── error.js
│ │ └── front
│ │ │ └── auth.js
│ ├── models-bk
│ │ ├── activity.model.js
│ │ ├── admin.model.js
│ │ ├── cms.model.js
│ │ ├── contact.model.js
│ │ ├── email.model.js
│ │ ├── faq.model.js
│ │ ├── faqCategories.model.js
│ │ ├── newsletter.model.js
│ │ ├── roles.model.js
│ │ ├── settings.model.js
│ │ └── users.model.js
│ ├── models
│ │ ├── acctivity.js
│ │ ├── applicants.js
│ │ ├── applicationdetails.js
│ │ ├── applicationmodulestatus.js
│ │ ├── billinginfo.js
│ │ ├── branch.js
│ │ ├── campus.js
│ │ ├── commissioninvoice.js
│ │ ├── commissioninvoiceitem.js
│ │ ├── costofsales.js
│ │ ├── currency.js
│ │ ├── depitandcredit.js
│ │ ├── expenses.js
│ │ ├── generalinvoice.js
│ │ ├── generalinvoiceitem.js
│ │ ├── index.js
│ │ ├── interestedprogram.js
│ │ ├── invoicemodulestatus.js
│ │ ├── lead.js
│ │ ├── leadgroup.js
│ │ ├── leadsmanagmentmodulestatus.js
│ │ ├── mailinginfo.js
│ │ ├── programcategory.js
│ │ ├── programedetails.js
│ │ ├── programlevel.js
│ │ ├── programme.js
│ │ ├── property.js
│ │ ├── qualificationtype.js
│ │ ├── roles.js
│ │ ├── sales.js
│ │ ├── university.js
│ │ ├── universitytype.js
│ │ ├── user.js
│ │ └── users.js
│ ├── routes
│ │ └── v1
│ │ │ ├── admin
│ │ │ ├── activity.route.js
│ │ │ ├── admin.route.js
│ │ │ ├── cms.route.js
│ │ │ ├── contact.route.js
│ │ │ ├── email.route.js
│ │ │ ├── faq.route.js
│ │ │ ├── faqCategories.route.js
│ │ │ ├── index.js
│ │ │ ├── newsletter.route.js
│ │ │ ├── roles.route.js
│ │ │ ├── settings.route.js
│ │ │ ├── staff.route.js
│ │ │ └── users.route.js
│ │ │ ├── front-bk
│ │ │ ├── auth.route.js
│ │ │ ├── cms.route.js
│ │ │ ├── contact.route.js
│ │ │ ├── faq.route.js
│ │ │ ├── footer.route.js
│ │ │ ├── index.js
│ │ │ ├── settings.route.js
│ │ │ └── users.route.js
│ │ │ └── front
│ │ │ ├── activities.route.js
│ │ │ ├── applicants.route.js
│ │ │ ├── applicationmodulestatus.route.js
│ │ │ ├── backups.route.js
│ │ │ ├── billinginfo.route.js
│ │ │ ├── branch.route.js
│ │ │ ├── commissioninvoice.route.js
│ │ │ ├── commissioninvoiceitem.route.js
│ │ │ ├── costofsales.route.js
│ │ │ ├── currencies.route.js
│ │ │ ├── depitandcredit.route.js
│ │ │ ├── expenses.route.js
│ │ │ ├── generalinvoice.route.js
│ │ │ ├── generalinvoiceitem.route.js
│ │ │ ├── index.js
│ │ │ ├── interestedprogram.route.js
│ │ │ ├── invoicemodulestatus.route.js
│ │ │ ├── lead.route.js
│ │ │ ├── leadgroup.route.js
│ │ │ ├── leadsmanagmentmodulestatus.route.js
│ │ │ ├── mailinginfo.route.js
│ │ │ ├── programcategory.route.js
│ │ │ ├── programlevel.route.js
│ │ │ ├── programme.route.js
│ │ │ ├── properties.route.js
│ │ │ ├── qualificationtype.route.js
│ │ │ ├── sales.route.js
│ │ │ ├── university.route.js
│ │ │ ├── universitytype.route.js
│ │ │ └── users.route.js
│ └── utils
│ │ ├── APIError.js
│ │ ├── emails
│ │ └── emails.js
│ │ ├── upload.js
│ │ └── util.js
├── config
│ ├── demo.sql
│ ├── emailtemplate.json
│ ├── errors.js
│ ├── express.js
│ ├── mongoose.js
│ └── vars.js
└── index.js
└── views
└── index.ejs
/.sequelizerc:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | "config": path.resolve("./config", "config.json"),
5 | "models-path": path.resolve("./src/api", "models"),
6 | "seeders-path": path.resolve("./", "seeders"),
7 | "migrations-path": path.resolve("./", "migrations"),
8 | };
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | https://www.figma.com/file/CEnqGfLlMu0MkLXHunXCEU/Figma-to-React-Theme-1?node-id=0%3A1
2 |
3 | https://drive.google.com/file/d/1dlDToyu6XeM8CWA6fCwfffmri7OqsYsn/view
4 |
--------------------------------------------------------------------------------
/migrations/20230128195917-create-university.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Universities', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | logo: {
13 | type: Sequelize.STRING
14 | },
15 | name: {
16 | type: Sequelize.STRING
17 | },
18 | type:{
19 | type: Sequelize.STRING
20 | },
21 | counsellerName: {
22 | type: Sequelize.STRING
23 | },
24 | phone: {
25 | type: Sequelize.INTEGER
26 | },
27 | email: {
28 | type: Sequelize.STRING
29 | },
30 | visaAppFee: {
31 | type: Sequelize.INTEGER
32 | },
33 | addmissionFee: {
34 | type: Sequelize.INTEGER
35 | },
36 | qetcFee: {
37 | type: Sequelize.INTEGER
38 | },
39 | commisionDuration: {
40 | type: Sequelize.INTEGER
41 | },
42 | createdAt: {
43 | allowNull: false,
44 | type: Sequelize.DATE
45 | },
46 | updatedAt: {
47 | allowNull: false,
48 | type: Sequelize.DATE
49 | }
50 | });
51 | },
52 | async down(queryInterface, Sequelize) {
53 | await queryInterface.dropTable('Universities');
54 | }
55 | };
--------------------------------------------------------------------------------
/migrations/20230128210831-update-university-model.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | /** @type {import('sequelize-cli').Migration} */
4 | module.exports = {
5 | async up(queryInterface, Sequelize) {
6 | // await queryInterface.addColumn("Universities", "utype", {
7 | // type: Sequelize.INTEGER,
8 | // allowNull: true,
9 | // });
10 | // await queryInterface.addColumn("Universities", "counserllerName", {
11 | // type: Sequelize.INTEGER,
12 | // allowNull: true,
13 | // });
14 | // await queryInterface.addColumn("Universities", "phone", {
15 | // type: Sequelize.INTEGER,
16 | // allowNull: true,
17 | // });
18 | // await queryInterface.addColumn("Universities", "email", {
19 | // type: Sequelize.STRING,
20 | // allowNull: true,
21 | // });
22 | // //
23 | // await queryInterface.addColumn("Universities", "visaAppFee", {
24 | // type: Sequelize.INTEGER,
25 | // allowNull: true,
26 | // });
27 | // await queryInterface.addColumn("Universities", "addmissionFee", {
28 | // type: Sequelize.INTEGER,
29 | // allowNull: true,
30 | // });
31 | // await queryInterface.addColumn("Universities", "qetcFee", {
32 | // type: Sequelize.INTEGER,
33 | // allowNull: true,
34 | // });
35 | // await queryInterface.addColumn("Universities", "commisionDuration", {
36 | // type: Sequelize.INTEGER,
37 | // allowNull: true,
38 | // });
39 | },
40 |
41 | async down(queryInterface, Sequelize) {
42 | // await queryInterface.removeColumn("Universities", "utype");
43 | // await queryInterface.removeColumn("Universities", "counserllerName");
44 | // await queryInterface.removeColumn("Universities", "phone");
45 | // await queryInterface.removeColumn("Universities", "email");
46 | // //
47 | // await queryInterface.removeColumn("Universities", "visaAppFee");
48 | // await queryInterface.removeColumn("Universities", "addmissionFee");
49 | // await queryInterface.removeColumn("Universities", "qetcFee");
50 | // await queryInterface.removeColumn("Universities", "commisionDuration");
51 | },
52 | };
53 |
54 | // visaAppFee: DataTypes.INTEGER,
55 | // addmissionFee: DataTypes.INTEGER,
56 | // qetcFee: DataTypes.INTEGER,
57 | // commisionDuration: DataTypes.INTEGER
58 |
--------------------------------------------------------------------------------
/migrations/20230128220409-create-campus.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Campuses', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | name: {
13 | type: Sequelize.STRING
14 | },
15 | address1: {
16 | type: Sequelize.STRING
17 | },
18 | address2: {
19 | type: Sequelize.STRING
20 | },
21 | phone: {
22 | type: Sequelize.INTEGER
23 | },
24 | email: {
25 | type: Sequelize.STRING
26 | },
27 | isMain: {
28 | type: Sequelize.BOOLEAN
29 | },
30 | createdAt: {
31 | allowNull: false,
32 | type: Sequelize.DATE
33 | },
34 | updatedAt: {
35 | allowNull: false,
36 | type: Sequelize.DATE
37 | }
38 | });
39 | },
40 | async down(queryInterface, Sequelize) {
41 | await queryInterface.dropTable('Campuses');
42 | }
43 | };
--------------------------------------------------------------------------------
/migrations/20230129124456-create-programme.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Programmes', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | name: {
13 | type: Sequelize.STRING
14 | },
15 | selectUniversity: {
16 | type: Sequelize.STRING
17 | },
18 | programmeLevel: {
19 | type: Sequelize.STRING
20 | },
21 | programmeIntake: {
22 | type: Sequelize.STRING
23 | },
24 | programmeDuration: {
25 | type: Sequelize.STRING
26 | },
27 | programmeCategory: {
28 | type: Sequelize.STRING
29 | },
30 | tutionFee: {
31 | type: Sequelize.INTEGER
32 | },
33 | otherFee: {
34 | type: Sequelize.INTEGER
35 | },
36 | engRequirement: {
37 | type: Sequelize.STRING
38 | },
39 | entryRequirement: {
40 | type: Sequelize.STRING
41 | },
42 | createdAt: {
43 | allowNull: false,
44 | type: Sequelize.DATE
45 | },
46 | updatedAt: {
47 | allowNull: false,
48 | type: Sequelize.DATE
49 | }
50 | });
51 | },
52 | async down(queryInterface, Sequelize) {
53 | await queryInterface.dropTable('Programmes');
54 | }
55 | };
--------------------------------------------------------------------------------
/migrations/20230129210531-create-lead.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Leads', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | image: {
13 | type: Sequelize.STRING
14 | },
15 | name: {
16 | type: Sequelize.STRING
17 | },
18 | passportNo: {
19 | type: Sequelize.INTEGER
20 | },
21 | leadGroup: {
22 | type: Sequelize.STRING
23 | },
24 | country: {
25 | type: Sequelize.STRING
26 | },
27 | phoneNo: {
28 | type: Sequelize.INTEGER
29 | },
30 | email: {
31 | type: Sequelize.STRING
32 | },
33 | refferalName: {
34 | type: Sequelize.STRING
35 | },
36 | refferalEmail: {
37 | type: Sequelize.STRING
38 | },
39 | createdAt: {
40 | allowNull: false,
41 | type: Sequelize.DATE
42 | },
43 | updatedAt: {
44 | allowNull: false,
45 | type: Sequelize.DATE
46 | }
47 | });
48 | },
49 | async down(queryInterface, Sequelize) {
50 | await queryInterface.dropTable('Leads');
51 | }
52 | };
--------------------------------------------------------------------------------
/migrations/20230129211004-create-programe-details.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('ProgrameDetails', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | schoolName: {
13 | type: Sequelize.STRING
14 | },
15 | qualificationType: {
16 | type: Sequelize.STRING
17 | },
18 | selectUniversity: {
19 | type: Sequelize.STRING
20 | },
21 | interestedProgramme: {
22 | type: Sequelize.STRING
23 | },
24 | status: {
25 | type: Sequelize.STRING
26 | },
27 | cert: {
28 | type: Sequelize.STRING
29 | },
30 | comments: {
31 | type: Sequelize.STRING
32 | },
33 | createdAt: {
34 | allowNull: false,
35 | type: Sequelize.DATE
36 | },
37 | updatedAt: {
38 | allowNull: false,
39 | type: Sequelize.DATE
40 | }
41 | });
42 | },
43 | async down(queryInterface, Sequelize) {
44 | await queryInterface.dropTable('ProgrameDetails');
45 | }
46 | };
--------------------------------------------------------------------------------
/migrations/20230130153947-create-applicants.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Applicants', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | fullName: {
13 | type: Sequelize.STRING
14 | },
15 | email: {
16 | type: Sequelize.STRING
17 | },
18 | phoneNumber: {
19 | type: Sequelize.INTEGER
20 | },
21 | address1: {
22 | type: Sequelize.STRING
23 | },
24 | address2: {
25 | type: Sequelize.STRING
26 | },
27 | country: {
28 | type: Sequelize.STRING
29 | },
30 | image: {
31 | type: Sequelize.STRING
32 | },
33 | passportNo: {
34 | type: Sequelize.INTEGER
35 | },
36 | fileUpload: {
37 | type: Sequelize.STRING
38 | },
39 | createdAt: {
40 | allowNull: false,
41 | type: Sequelize.DATE
42 | },
43 | updatedAt: {
44 | allowNull: false,
45 | type: Sequelize.DATE
46 | }
47 | });
48 | },
49 | async down(queryInterface, Sequelize) {
50 | await queryInterface.dropTable('Applicants');
51 | }
52 | };
--------------------------------------------------------------------------------
/migrations/20230130154538-create-application-details.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('ApplicationDetails', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | applicationLevel: {
13 | type: Sequelize.STRING
14 | },
15 | interestedProgramme: {
16 | type: Sequelize.STRING
17 | },
18 | schoolName: {
19 | type: Sequelize.STRING
20 | },
21 | qualificationType: {
22 | type: Sequelize.STRING
23 | },
24 | selectUniversity: {
25 | type: Sequelize.STRING
26 | },
27 | completionLetter: {
28 | type: Sequelize.STRING
29 | },
30 | programmeLevel: {
31 | type: Sequelize.STRING
32 | },
33 | healthForm: {
34 | type: Sequelize.STRING
35 | },
36 | paymentReceipt: {
37 | type: Sequelize.STRING
38 | },
39 | researchProposal: {
40 | type: Sequelize.STRING
41 | },
42 | refreeForm: {
43 | type: Sequelize.STRING
44 | },
45 | medium: {
46 | type: Sequelize.STRING
47 | },
48 | scholorshipForm: {
49 | type: Sequelize.STRING
50 | },
51 | otherDocuments: {
52 | type: Sequelize.STRING
53 | },
54 | attestationLetter: {
55 | type: Sequelize.STRING
56 | },
57 | releaseLetter: {
58 | type: Sequelize.STRING
59 | },
60 | status: {
61 | type: Sequelize.STRING
62 | },
63 | createdAt: {
64 | allowNull: false,
65 | type: Sequelize.DATE
66 | },
67 | updatedAt: {
68 | allowNull: false,
69 | type: Sequelize.DATE
70 | }
71 | });
72 | },
73 | async down(queryInterface, Sequelize) {
74 | await queryInterface.dropTable('ApplicationDetails');
75 | }
76 | };
--------------------------------------------------------------------------------
/migrations/20230203151011-update-uni-column.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /** @type {import('sequelize-cli').Migration} */
4 | module.exports = {
5 | async up (queryInterface, Sequelize) {
6 |
7 | queryInterface.changeColumn('Universities', 'phone', {
8 | type: Sequelize.STRING,
9 | // defaultValue: 3.14,
10 | allowNull: true
11 | });
12 |
13 | /**
14 | * Add altering commands here.
15 | *
16 | * Example:
17 | * await queryInterface.createTable('users', { id: Sequelize.INTEGER });
18 | */
19 | },
20 |
21 | // async up (queryInterface, Sequelize) => queryInterface.sequelize.transaction(async transaction => {
22 | // await queryInterface.changeColumn('User', 'ip',
23 | // {
24 | // defaultValue: undefined,
25 | // }, { transaction }
26 | // );
27 | // })
28 | async down (queryInterface, Sequelize) {
29 | /**
30 | * Add reverting commands here.
31 | *
32 | * Example:
33 | * await queryInterface.dropTable('users');
34 | */
35 | queryInterface.changeColumn('Universities', 'phone', {
36 | type: Sequelize.Number,
37 | // defaultValue: 3.14,
38 | allowNull: true
39 | });
40 |
41 | }
42 | };
43 |
--------------------------------------------------------------------------------
/migrations/20230204003147-create-users.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Users', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | name: {
13 | type: Sequelize.STRING
14 | },
15 | email: {
16 | type: Sequelize.STRING
17 | },
18 | number: {
19 | type: Sequelize.INTEGER
20 | },
21 | role: {
22 | type: Sequelize.STRING
23 | },
24 | branch: {
25 | type: Sequelize.STRING
26 | },
27 | position: {
28 | type: Sequelize.STRING
29 | },
30 | date: {
31 | type: Sequelize.INTEGER
32 | },
33 | createdAt: {
34 | allowNull: false,
35 | type: Sequelize.DATE
36 | },
37 | updatedAt: {
38 | allowNull: false,
39 | type: Sequelize.DATE
40 | }
41 | });
42 | },
43 | async down(queryInterface, Sequelize) {
44 | await queryInterface.dropTable('Users');
45 | }
46 | };
--------------------------------------------------------------------------------
/migrations/20230204202846-unnamed-migration.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | /** @type {import('sequelize-cli').Migration} */
4 | module.exports = {
5 | async up(queryInterface, Sequelize) {
6 | await queryInterface.addColumn("ProgrameDetails", "leadId", {
7 | type: Sequelize.INTEGER,
8 | references: {
9 | model: "Leads",
10 | key: "id",
11 | },
12 | onUpdate: "CASCADE",
13 | onDelete: "SET NULL",
14 | });
15 |
16 | await queryInterface.addColumn('ApplicationDetails', 'ApplicantId', {
17 | type: Sequelize.INTEGER,
18 | references: {
19 | model: 'Applicants',
20 | key: 'id',
21 | },
22 | onUpdate: 'CASCADE',
23 | onDelete: 'CASCADE',
24 | });
25 | },
26 |
27 | async down(queryInterface, Sequelize) {
28 | /**
29 | * Add reverting commands here.
30 | *
31 | * Example:
32 | * await queryInterface.dropTable('users');
33 | */
34 | await queryInterface.removeColumn("ProgrameDetails", "leadId");
35 | await queryInterface.removeColumn('ApplicationDetails', 'ApplicantId');
36 |
37 | },
38 | };
39 |
--------------------------------------------------------------------------------
/migrations/20230207192220-create-acctivity.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Activities', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | action: {
13 | type: Sequelize.STRING
14 | },
15 | userId: {
16 | type: Sequelize.INTEGER,
17 | references: {
18 | model: "Users",
19 | key: 'id',
20 | },
21 | onUpdate: 'CASCADE',
22 | onDelete: 'SET NULL',
23 | },
24 | createdAt: {
25 | allowNull: false,
26 | type: Sequelize.DATE
27 | },
28 | updatedAt: {
29 | allowNull: false,
30 | type: Sequelize.DATE
31 | }
32 | });
33 | },
34 | async down(queryInterface, Sequelize) {
35 | await queryInterface.dropTable('Activities');
36 | }
37 | };
--------------------------------------------------------------------------------
/migrations/20230208183942-create-property.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Properties', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | type: {
13 | type: Sequelize.INTEGER
14 | },
15 | property: {
16 | type: Sequelize.STRING
17 | },
18 | createdAt: {
19 | allowNull: false,
20 | type: Sequelize.DATE
21 | },
22 | updatedAt: {
23 | allowNull: false,
24 | type: Sequelize.DATE
25 | }
26 | });
27 | },
28 | async down(queryInterface, Sequelize) {
29 | await queryInterface.dropTable('Properties');
30 | }
31 | };
--------------------------------------------------------------------------------
/migrations/20230208191554-create-currency.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Currencies', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | name: {
13 | type: Sequelize.STRING
14 | },
15 | iso: {
16 | type: Sequelize.STRING
17 | },
18 | exRate: {
19 | type: Sequelize.INTEGER
20 | },
21 | status: {
22 | type: Sequelize.INTEGER
23 | },
24 | createdAt: {
25 | allowNull: false,
26 | type: Sequelize.DATE
27 | },
28 | updatedAt: {
29 | allowNull: false,
30 | type: Sequelize.DATE
31 | }
32 | });
33 | },
34 | async down(queryInterface, Sequelize) {
35 | await queryInterface.dropTable('Currencies');
36 | }
37 | };
--------------------------------------------------------------------------------
/migrations/20230209184318-create-branch.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Branches', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | name: {
13 | type: Sequelize.STRING
14 | },
15 | address: {
16 | type: Sequelize.STRING
17 | },
18 | country: {
19 | type: Sequelize.STRING
20 | },
21 | manager: {
22 | type: Sequelize.STRING
23 | },
24 | email: {
25 | type: Sequelize.STRING
26 | },
27 | phone: {
28 | type: Sequelize.STRING
29 | },
30 | createdAt: {
31 | allowNull: false,
32 | type: Sequelize.DATE
33 | },
34 | updatedAt: {
35 | allowNull: false,
36 | type: Sequelize.DATE
37 | }
38 | });
39 | },
40 | async down(queryInterface, Sequelize) {
41 | await queryInterface.dropTable('Branches');
42 | }
43 | };
--------------------------------------------------------------------------------
/migrations/20230209195650-create-roles.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /** @type {import('sequelize-cli').Migration} */
3 | module.exports = {
4 | async up(queryInterface, Sequelize) {
5 | await queryInterface.createTable('Roles', {
6 | id: {
7 | allowNull: false,
8 | autoIncrement: true,
9 | primaryKey: true,
10 | type: Sequelize.INTEGER
11 | },
12 | title: {
13 | type: Sequelize.STRING
14 | },
15 | createdAt: {
16 | allowNull: false,
17 | type: Sequelize.DATE
18 | },
19 | updatedAt: {
20 | allowNull: false,
21 | type: Sequelize.DATE
22 | }
23 | });
24 | },
25 | async down(queryInterface, Sequelize) {
26 | await queryInterface.dropTable('Roles');
27 | }
28 | };
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "qetc-backend",
3 | "version": "1.0.0",
4 | "description": "Qetc- Backend",
5 | "author": "Express",
6 | "main": "src/index.js",
7 | "private": false,
8 | "license": "MIT",
9 | "engines": {
10 | "node": ">=8",
11 | "yarn": "*"
12 | },
13 | "scripts": {
14 | "start": "cross-env NODE_ENV=production pm2 start ./src/index.js -i max",
15 | "dev": "nodemon ./src/index.js",
16 | "pm2": "pm2 start ./src/index.js --name=Qetc",
17 | "pm2-restart": "pm2 restart Qetc",
18 | "pm2-stop": "pm2 stop Qetc",
19 | "pm2-list": "pm2 list",
20 | "pm2-delete": "pm2 delete Qetc"
21 | },
22 | "keywords": [
23 | "nodejs",
24 | "Express",
25 | "API",
26 | "Express NodeJS API"
27 | ],
28 | "dependencies": {
29 | "axios": "^0.27.2",
30 | "bcryptjs": "^2.4.3",
31 | "bluebird": "^3.7.2",
32 | "cloudinary": "^1.29.0",
33 | "compression": "^1.7.4",
34 | "cors": "^2.8.5",
35 | "cross-env": "^7.0.3",
36 | "crypto-js": "^4.1.1",
37 | "dotenv": "^10.0.0",
38 | "ejs": "^3.1.6",
39 | "express": "^4.18.2",
40 | "express-bearer-token": "^2.4.0",
41 | "express-rate-limit": "^5.3.0",
42 | "express-validation": "^3.0.8",
43 | "express-validator": "^6.14.0",
44 | "handlebars": "^4.7.7",
45 | "http-status": "^1.5.0",
46 | "jsonwebtoken": "^8.5.1",
47 | "jwt-simple": "^0.5.6",
48 | "mailgun-js": "^0.22.0",
49 | "method-override": "^3.0.0",
50 | "moment": "^2.29.1",
51 | "moment-timezone": "^0.5.34",
52 | "multer": "^1.4.3",
53 | "mysql2": "^3.0.1",
54 | "mysqldump": "^3.2.0",
55 | "nodemailer": "^6.9.1",
56 | "passport": "^0.4.1",
57 | "passport-local": "^1.0.0",
58 | "pug": "^3.0.2",
59 | "randomatic": "^3.1.1",
60 | "randomstring": "^1.2.1",
61 | "sequelize": "^6.28.0",
62 | "slugify": "^1.6.5"
63 | },
64 | "devDependencies": {
65 | "nodemon": "^2.0.21",
66 | "sequelize-cli": "^6.6.0"
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/readme.txt:
--------------------------------------------------------------------------------
1 | To run the Qetc-Backend project on a local server, follow these steps:
2 |
3 | Clone the repository to your local machine using the git clone command.
4 |
5 | Navigate to the project directory using the terminal or command prompt.
6 |
7 | Make sure you have Node.js and npm installed on your machine.
8 |
9 | Run the following command to install all the required dependencies:
10 |
11 | Copy code
12 | npm install
13 | Create a .env file in the project's root directory and add the required environment variables.
14 |
15 | Start the development server by running the following command:
16 |
17 | Copy code
18 | npm run dev
19 | The server should now be running on http://localhost:8080.
20 | Note: To run the project in production mode, use the "start" script instead of "dev". You can also use the "pm2" script to run the project using the pm2 process manager.
--------------------------------------------------------------------------------
/src/api/controllers/admin/activity.controller.js:
--------------------------------------------------------------------------------
1 | const Activity = require('../../models/activity.model')
2 |
3 | // API to get activity list
4 | exports.list = async (req, res, next) => {
5 | try {
6 | let { page, limit } = req.query
7 |
8 | page = page !== undefined && page !== '' ? parseInt(page) : 1
9 | limit = limit !== undefined && limit !== '' ? parseInt(limit) : 10
10 |
11 | const total = await Activity.countDocuments()
12 |
13 | const activity = await Activity.aggregate([
14 | { $sort: { createdAt: -1 } },
15 | { $skip: limit * (page - 1) },
16 | { $limit: limit },
17 | { "$addFields": { "user_Id": { "$toObjectId": "$userId" }}},
18 | { $lookup: {
19 | from: 'users',
20 | foreignField: '_id',
21 | localField: 'user_Id',
22 | as: 'user'
23 | }
24 | },
25 | {$unwind: {path: "$user", preserveNullAndEmptyArrays: true}},
26 | { "$addFields": { "admin_Id": { "$toObjectId": "$userId" }}},
27 | { $lookup: {
28 | from: 'admins',
29 | foreignField: '_id',
30 | localField: 'admin_Id',
31 | as: 'admin'
32 | }
33 | },
34 | {$unwind: {path: "$admin", preserveNullAndEmptyArrays: true}}
35 | ])
36 |
37 | return res.send({
38 | success: true, message: 'Activities fetched successfully',
39 | data: {
40 | activity,
41 | pagination: {
42 | page, limit, total,
43 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit)
44 | }
45 | }
46 | })
47 | } catch (error) {
48 | return next(error)
49 | }
50 | }
--------------------------------------------------------------------------------
/src/api/controllers/admin/cms.controller.js:
--------------------------------------------------------------------------------
1 | const CMS = require('../../models/cms.model')
2 | let slugify = require('slugify')
3 | const { checkDuplicate } = require('../../../config/errors')
4 |
5 | // API to create CMS
6 | exports.create = async (req, res, next) => {
7 | try {
8 | let payload = req.body
9 | let cms = await CMS.findOne({ title: { $regex: payload.title, $options: "i" } }).lean(true)
10 | if (cms) {
11 | return res.status(400).send({ success: false, message: 'Content page with this title already exist.' })
12 | }
13 | payload.slug = slugify(payload.title)
14 | const content = await CMS.create(payload)
15 | return res.status(200).send({ success: true, message: 'Content Page created successfully', content })
16 | } catch (error) {
17 | return next(error)
18 | }
19 | }
20 |
21 | // API to edit CMS
22 | exports.edit = async (req, res, next) => {
23 | try {
24 | let payload = req.body
25 | // let cms = await CMS.findOne({ title: { $regex: payload.title, $options: "i" } }).lean(true)
26 | // if (cms) {
27 | // return res.status(400).send({ success: false, message: 'Content page with this title already exist.' })
28 | // }
29 | payload.slug = slugify(payload.title)
30 | const content = await CMS.findByIdAndUpdate({ _id: payload._id }, { $set: payload }, { new: true })
31 | return res.send({ success: true, message: 'Content Page updated successfully', content })
32 | } catch (error) {
33 | return next(error)
34 | }
35 | }
36 |
37 | // API to delete content
38 | exports.delete = async (req, res, next) => {
39 | try {
40 | const { contentId } = req.params
41 | if (contentId) {
42 | const content = await CMS.deleteOne({ _id: contentId })
43 | if (content && content.deletedCount)
44 | return res.send({ success: true, message: 'Content Page deleted successfully', contentId })
45 | else return res.status(400).send({ success: false, message: 'Content Page not found for given Id' })
46 | } else
47 | return res.status(400).send({ success: false, message: 'Content Id is required' })
48 | } catch (error) {
49 | return next(error)
50 | }
51 | }
52 |
53 | // API to get a CMS
54 | exports.get = async (req, res, next) => {
55 | try {
56 | const { contentId } = req.params
57 | if (contentId) {
58 | const content = await CMS.findOne({ _id: contentId }, { _id: 1, title: 1, status: 1, slug: 1, description: 1, showInFooter: 1 }).lean(true)
59 | if (content)
60 | return res.json({ success: true, message: 'Content Page retrieved successfully', content })
61 | else return res.status(400).send({ success: false, message: 'CMS not found for given Id' })
62 | } else
63 | return res.status(400).send({ success: false, message: 'CMS Id is required' })
64 | } catch (error) {
65 | return next(error)
66 | }
67 | }
68 |
69 | // API to get CMS list
70 | exports.list = async (req, res, next) => {
71 | try {
72 | let { page, limit, title, status } = req.query
73 | const filter = {}
74 |
75 | page = page !== undefined && page !== '' ? parseInt(page) : 1
76 | limit = limit !== undefined && limit !== '' ? parseInt(limit) : 10
77 |
78 | if (title) {
79 | filter.title = { $regex: title, $options: "gi" }
80 | }
81 |
82 | if (status) {
83 | if (status === 'true') {
84 | filter.status = true
85 | }
86 | else if (status === 'false') {
87 | filter.status = false
88 | }
89 | }
90 |
91 | const total = await CMS.countDocuments(filter)
92 |
93 | if (page > Math.ceil(total / limit) && total > 0)
94 | page = Math.ceil(total / limit)
95 |
96 | const contentPages = await CMS.aggregate([
97 | { $match: filter },
98 | { $sort: { createdAt: -1 } },
99 | { $skip: limit * (page - 1) },
100 | { $limit: limit },
101 | {
102 | $project: {
103 | _id: 1, title: 1, slug: 1, description: 1, status: 1, showInFooter: 1
104 | }
105 | }
106 | ])
107 |
108 | return res.send({
109 | success: true, message: 'Content Pages fetched successfully',
110 | data: {
111 | contentPages,
112 | pagination: {
113 | page, limit, total,
114 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit)
115 | }
116 | }
117 | })
118 | } catch (error) {
119 | return next(error)
120 | }
121 | }
--------------------------------------------------------------------------------
/src/api/controllers/admin/contact.controller.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const Contact = require('../../models/contact.model')
3 | const { checkDuplicate } = require('../../../config/errors')
4 |
5 |
6 | // API to get support list
7 | exports.list = async (req, res, next) => {
8 | try {
9 | let { page, limit } = req.query
10 | let { name, email, game, environment, type, sdk, status } = req.body
11 | const filter = {}
12 | console.log(req.body)
13 | page = page !== undefined && page !== '' ? parseInt(page) : 1
14 | limit = limit !== undefined && limit !== '' ? parseInt(limit) : 10
15 |
16 |
17 |
18 |
19 | if (name) {
20 | name = name.trim()
21 | filter.name = { $regex: name.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), $options: 'gi' };
22 | }
23 |
24 | if (email) {
25 | filter.email = email.toLowerCase().trim()
26 | }
27 |
28 | if (game) {
29 | filter.gameId = mongoose.Types.ObjectId(game)
30 | }
31 |
32 | if (environment) {
33 | filter.environment = parseInt(environment)
34 | }
35 |
36 | if (sdk) {
37 | filter.sdkId = mongoose.Types.ObjectId(sdk)
38 | }
39 |
40 | if (type) {
41 | filter.type = type
42 | }
43 |
44 | if (status != undefined) {
45 | filter.status = parseInt(status)
46 | }
47 |
48 | const total = await Contact.countDocuments(filter)
49 |
50 | if (page > Math.ceil(total / limit) && total > 0)
51 | page = Math.ceil(total / limit)
52 |
53 | const contact = await Contact.aggregate([
54 | { $match: filter },
55 | { $sort: { createdAt: -1 } },
56 | { $skip: limit * (page - 1) },
57 | { $limit: limit },
58 | {
59 | $lookup: {
60 | from: 'games',
61 | foreignField: '_id',
62 | localField: 'gameId',
63 | as: 'game'
64 | }
65 | },
66 | { $unwind: { path: "$game", preserveNullAndEmptyArrays: true } },
67 | {
68 | $lookup: {
69 | from: 'sdks',
70 | foreignField: '_id',
71 | localField: 'sdkId',
72 | as: 'sdk'
73 | }
74 | },
75 | { $unwind: { path: "$sdk", preserveNullAndEmptyArrays: true } }
76 | ])
77 |
78 | return res.send({
79 | success: true, message: 'Support data fetched successfully',
80 | data: {
81 | contact,
82 | pagination: {
83 | page, limit, total,
84 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit)
85 | }
86 | }
87 | })
88 | } catch (error) {
89 | return next(error)
90 | }
91 | }
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | // API to edit contact status
100 | exports.edit = async (req, res, next) => {
101 | try {
102 | let newPayload = {
103 | status: req.body.status
104 | }
105 | let updatedContact = await Contact.findByIdAndUpdate({ _id: req.body._id }, { $set: newPayload }, { new: true })
106 | return res.send({ success: true, message: 'Support form updated successfully', updatedContact })
107 | } catch (error) {
108 | if (error.code === 11000 || error.code === 11001)
109 | checkDuplicate(error, res, 'Contact')
110 | else
111 | return next(error)
112 | }
113 | }
114 |
115 |
116 |
117 |
--------------------------------------------------------------------------------
/src/api/controllers/admin/email.controller.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs')
2 | const mongoose = require('mongoose');
3 | const Email = require('../../models/email.model')
4 | const { uploadToCloudinary } = require('../../utils/upload')
5 | const { checkDuplicate } = require('../../../config/errors')
6 |
7 | const path = require('path');
8 |
9 | // API to create email template
10 | exports.create = async (req, res, next) => {
11 | try {
12 | let payload = req.body
13 | const email = await Email.create(payload)
14 | return res.send({ success: true, message: 'Email template created successfully', email })
15 | } catch (error) {
16 | if (error.code === 11000 || error.code === 11001)
17 | checkDuplicate(error, res, 'Email')
18 | else
19 | return next(error)
20 | }
21 | }
22 |
23 | //API that create all Email templates in DB when system will start
24 | exports.createEmailBulkTemplate = async () => {
25 | try {
26 | let rawdata = fs.readFileSync(path.resolve(__dirname, '../../../config/emailtemplate.json'));
27 | let emailTemplates = JSON.parse(rawdata);
28 |
29 | for (let i = 0; i < emailTemplates.length; i++) {
30 | const template = await Email.findOne({ type: emailTemplates[i].type })
31 | if (template == null) {
32 | await Email.create(emailTemplates[i])
33 | }
34 | }
35 |
36 | return;
37 | } catch (error) {
38 | console.log(error)
39 | }
40 | }
41 |
42 | // API to edit email template
43 | exports.edit = async (req, res, next) => {
44 | try {
45 | let payload = req.body
46 | const email = await Email.findByIdAndUpdate({ _id: mongoose.Types.ObjectId(payload._id) }, { $set: payload }, { new: true })
47 | // const templates=await Email.find({},'-_id type subject text' )
48 | // fs.writeFileSync(path.resolve(__dirname, '../../../config/emailtemplate.json'), JSON.stringify(templates));
49 | return res.send({ success: true, message: 'Email template updated successfully', email })
50 | } catch (error) {
51 | if (error.code === 11000 || error.code === 11001)
52 | checkDuplicate(error, res, 'Email')
53 | else
54 | return next(error)
55 | }
56 | }
57 |
58 | // API to get email template
59 | exports.get = async (req, res, next) => {
60 | try {
61 | const { emailId } = req.params
62 | if (emailId) {
63 | const email = await Email.findOne({ _id: emailId }, { __v: 0, createdAt: 0, updatedAt: 0 }).lean(true)
64 | if (email)
65 | return res.json({ success: true, message: 'Email template retrieved successfully', email })
66 | else return res.status(400).send({ success: false, message: 'Email template not found for given Id' })
67 | } else
68 | return res.status(400).send({ success: false, message: 'Email Id is required' })
69 | } catch (error) {
70 | return next(error)
71 | }
72 | }
73 |
74 | // API to delete email template
75 | exports.delete = async (req, res, next) => {
76 | try {
77 | const { emailId } = req.params
78 | if (emailId) {
79 | const email = await Email.deleteOne({ _id: emailId })
80 | if (email && email.deletedCount)
81 | return res.send({ success: true, message: 'Email deleted successfully', emailId })
82 | else return res.status(400).send({ success: false, message: 'Email not found for given Id' })
83 | } else
84 | return res.status(400).send({ success: false, message: 'Email Id is required' })
85 | } catch (error) {
86 | return next(error)
87 | }
88 | }
89 |
90 |
91 | // API to get email list
92 | exports.list = async (req, res, next) => {
93 | try {
94 | let { page, limit, type, subject } = req.query
95 | const filter = {}
96 |
97 | page = page !== undefined && page !== '' ? parseInt(page) : 1
98 | limit = limit !== undefined && limit !== '' ? parseInt(limit) : 10
99 |
100 | if (type) {
101 | filter.type = { $regex: type, $options: "gi" }
102 | }
103 |
104 | if (subject) {
105 | filter.subject = { $regex: subject, $options: "gi" }
106 | }
107 |
108 | const total = await Email.countDocuments(filter)
109 |
110 | if (page > Math.ceil(total / limit) && total > 0)
111 | page = Math.ceil(total / limit)
112 |
113 | const emails = await Email.aggregate([
114 | { $match: filter },
115 | { $sort: { createdAt: -1 } },
116 | { $skip: limit * (page - 1) },
117 | { $limit: limit },
118 | {
119 | $project: {
120 | __v: 0, createdAt: 0, updatedAt: 0
121 | }
122 | }
123 | ])
124 |
125 | return res.send({
126 | success: true, message: 'Email templates fetched successfully',
127 | data: {
128 | emails,
129 | pagination: {
130 | page, limit, total,
131 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit)
132 | }
133 | }
134 | })
135 | } catch (error) {
136 | return next(error)
137 | }
138 | }
139 |
--------------------------------------------------------------------------------
/src/api/controllers/admin/faq.controller.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs')
2 | const ObjectId = require('mongoose').Types.ObjectId
3 | const FAQ = require('../../models/faq.model')
4 | const { uploadToCloudinary } = require('../../utils/upload')
5 | const { checkDuplicate } = require('../../../config/errors')
6 |
7 | // API to create FAQ
8 | exports.create = async (req, res, next) => {
9 | try {
10 | let payload = req.body
11 |
12 | const faq = await FAQ.create(payload)
13 | return res.send({ success: true, message: 'FAQ created successfully', faq })
14 | } catch (error) {
15 | console.log(error)
16 | if (error.code === 11000 || error.code === 11001)
17 | checkDuplicate(error, res, 'FAQ')
18 | else
19 | return next(error)
20 | }
21 | }
22 |
23 | // API to edit FAQ
24 | exports.edit = async (req, res, next) => {
25 | try {
26 | let payload = req.body
27 | const faq = await FAQ.findByIdAndUpdate({ _id: payload._id }, { $set: payload }, { new: true })
28 | return res.send({ success: true, message: 'FAQ updated successfully', faq })
29 | } catch (error) {
30 | if (error.code === 11000 || error.code === 11001)
31 | checkDuplicate(error, res, 'FAQ')
32 | else
33 | return next(error)
34 | }
35 | }
36 |
37 | // API to delete faq
38 | exports.delete = async (req, res, next) => {
39 | try {
40 | const { faqId } = req.params
41 | if (faqId) {
42 | const faq = await FAQ.deleteOne({ _id: faqId })
43 | if (faq && faq.deletedCount)
44 | return res.send({ success: true, message: 'FAQ deleted successfully', faqId })
45 | else return res.status(400).send({ success: false, message: 'FAQ not found for given Id' })
46 | } else
47 | return res.status(400).send({ success: false, message: 'FAQ Id is required' })
48 | } catch (error) {
49 | return next(error)
50 | }
51 | }
52 |
53 | // API to get a FAQ
54 | exports.get = async (req, res, next) => {
55 | try {
56 | const { faqId } = req.params
57 | if (faqId) {
58 | const faq = await FAQ.findOne({ _id: faqId }, { _id: 1, title: 1, desc: 1, status: 1, catId: 1 }).lean(true)
59 | if (faq)
60 | return res.json({ success: true, message: 'FAQ retrieved successfully', faq })
61 | else return res.status(400).send({ success: false, message: 'FAQ not found for given Id' })
62 | } else
63 | return res.status(400).send({ success: false, message: 'FAQ Id is required' })
64 | } catch (error) {
65 | return next(error)
66 | }
67 | }
68 |
69 | // API to get FAQ list
70 | exports.list = async (req, res, next) => {
71 | try {
72 | let { page, limit, title, status } = req.query
73 | const filter = {}
74 |
75 | page = page !== undefined && page !== '' ? parseInt(page) : 1
76 | limit = limit !== undefined && limit !== '' ? parseInt(limit) : 10
77 |
78 | if (title) {
79 | filter.title = { $regex: title, $options: "gi" }
80 | }
81 | if (status) {
82 | if(status === 'true'){
83 | filter.status = true
84 | }
85 | else if(status === 'false'){
86 | filter.status = false
87 | }
88 | }
89 |
90 | const total = await FAQ.countDocuments(filter)
91 |
92 | if (page > Math.ceil(total / limit) && total > 0)
93 | page = Math.ceil(total / limit)
94 |
95 | const faqs = await FAQ.aggregate([
96 | { $match: filter },
97 | { $sort: { createdAt: -1 } },
98 | { $skip: limit * (page - 1) },
99 | { $limit: limit },
100 | {
101 | $project: {
102 | _id: 1, title: 1, status: 1, desc: 1
103 | }
104 | }
105 | ])
106 |
107 | return res.send({
108 | success: true, message: 'FAQs fetched successfully',
109 | data: {
110 | faqs,
111 | pagination: {
112 | page, limit, total,
113 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit)
114 | }
115 | }
116 | })
117 | } catch (error) {
118 | return next(error)
119 | }
120 | }
--------------------------------------------------------------------------------
/src/api/controllers/admin/faqCategories.controller.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs')
2 | const ObjectId = require('mongoose').Types.ObjectId
3 | const FaqCategories = require('../../models/faqCategories.model')
4 | const { uploadToCloudinary } = require('../../utils/upload')
5 | const { checkDuplicate } = require('../../../config/errors')
6 |
7 | // API to create FaqCategories
8 | exports.create = async (req, res, next) => {
9 | try {
10 | let payload = req.body
11 |
12 | const faqCategories = await FaqCategories.create(payload)
13 | return res.send({ success: true, message: 'Faq-Categories created successfully', faqCategories })
14 | } catch (error) {
15 | console.log(error)
16 | if (error.code === 11000 || error.code === 11001)
17 | checkDuplicate(error, res, 'FaqCategories')
18 | else
19 | return next(error)
20 | }
21 | }
22 |
23 | // API to edit FaqCategories
24 | exports.edit = async (req, res, next) => {
25 | try {
26 | let payload = req.body
27 | const faqCategories = await FaqCategories.findByIdAndUpdate({ _id: payload._id }, { $set: payload }, { new: true })
28 | return res.send({ success: true, message: 'FaqCategories updated successfully', faqCategories })
29 | } catch (error) {
30 | if (error.code === 11000 || error.code === 11001)
31 | checkDuplicate(error, res, 'FaqCategories')
32 | else
33 | return next(error)
34 | }
35 | }
36 |
37 | // API to delete faqCategories
38 | exports.delete = async (req, res, next) => {
39 | try {
40 | const { faqId } = req.params
41 | if (faqId) {
42 | const faqCategories = await FaqCategories.deleteOne({ _id: faqId })
43 | if (faqCategories && faqCategories.deletedCount)
44 | return res.send({ success: true, message: 'Faq-Categories deleted successfully', faqId })
45 | else return res.status(400).send({ success: false, message: 'Faq-Categories not found for given Id' })
46 | } else
47 | return res.status(400).send({ success: false, message: 'Faq-Categories Id is required' })
48 | } catch (error) {
49 | return next(error)
50 | }
51 | }
52 |
53 | // API to get a FaqCategories
54 | exports.get = async (req, res, next) => {
55 | try {
56 | const { faqId } = req.params
57 | if (faqId) {
58 | const faqCategories = await FaqCategories.findOne({ _id: faqId }, { _id: 1, title: 1, desc: 1, status: 1 }).lean(true)
59 | if (faqCategories)
60 | return res.json({ success: true, message: 'Faq-Categories retrieved successfully', faqCategories })
61 | else return res.status(400).send({ success: false, message: 'Faq-Categories not found for given Id' })
62 | } else
63 | return res.status(400).send({ success: false, message: 'Faq-Categories Id is required' })
64 | } catch (error) {
65 | return next(error)
66 | }
67 | }
68 |
69 | // API to get FaqCategories list
70 | exports.list = async (req, res, next) => {
71 | try {
72 | let { page, limit, all, status, title } = req.query
73 | const filter = {}
74 |
75 | page = page !== undefined && page !== '' ? parseInt(page) : 1
76 | limit = limit !== undefined && limit !== '' ? parseInt(limit) : 10
77 |
78 | if (title) {
79 | filter.title = { $regex: title, $options: "gi" }
80 | }
81 |
82 | if (status) {
83 | if (status === 'true') {
84 | filter.status = true
85 | }
86 | else if (status === 'false') {
87 | filter.status = false
88 | }
89 | }
90 |
91 | const total = await FaqCategories.countDocuments(filter)
92 |
93 | if (page > Math.ceil(total / limit) && total > 0)
94 | page = Math.ceil(total / limit)
95 |
96 | let pipeline = []
97 |
98 | if (!all)
99 | pipeline = [
100 | { $skip: limit * (page - 1) },
101 | { $limit: limit },
102 | ]
103 |
104 | const faqCategories = await FaqCategories.aggregate([
105 | { $match: filter },
106 | { $sort: { createdAt: -1 } },
107 | ...pipeline,
108 | {
109 | $project: {
110 | _id: 1, title: 1, status: 1, desc: 1
111 | }
112 | }
113 | ])
114 |
115 | return res.send({
116 | success: true, message: 'Faq-Categories Fetched Successfully',
117 | data: {
118 | faqCategories,
119 | pagination: {
120 | page, limit, total,
121 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit)
122 | }
123 | }
124 | })
125 | } catch (error) {
126 | return next(error)
127 | }
128 | }
--------------------------------------------------------------------------------
/src/api/controllers/admin/newsletter.controller.js:
--------------------------------------------------------------------------------
1 | const Newsletter = require('../../models/newsletter.model');
2 | const { sendEmail } = require('../../utils/emails/emails')
3 |
4 |
5 | exports.list = async (req, res, next) => {
6 | try {
7 | let { page, limit, email, ip, startDate, endDate } = req.query
8 | const filter = {}
9 |
10 | page = page !== undefined && page !== '' ? parseInt(page) : 1
11 | limit = limit !== undefined && limit !== '' ? parseInt(limit) : 10
12 |
13 | if (email) {
14 | filter.email = { $regex: email, $options: "gi" }
15 | }
16 | if (ip) {
17 | filter.ip = ip
18 | }
19 | if (startDate && endDate) {
20 | startDate = new Date(startDate)
21 | endDate = new Date(endDate)
22 | if (startDate.getTime() == endDate.getTime()) {
23 | filter.createdAt = { $gte: startDate }
24 | }
25 | else {
26 | filter['$and'] = [{ 'createdAt': { $gte: startDate } }, { 'createdAt': { $lte: endDate } }]
27 | }
28 | }
29 |
30 |
31 | const total = await Newsletter.countDocuments(filter)
32 |
33 | let newsletter = await Newsletter.aggregate([
34 | { $match: filter },
35 | { $sort: { createdAt: -1 } },
36 | { $skip: limit * (page - 1) },
37 | { $limit: limit },
38 | {
39 | $project: {
40 | _id: 1, email: 1, ip: 1, createdAt: 1
41 | }
42 | }
43 | ])
44 |
45 | return res.send({
46 | success: true,
47 | message: "Newsletters Retrieved Successfully.",
48 | data: {
49 | newsletter,
50 | pagination: {
51 | page, limit, total,
52 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit)
53 | }
54 | }
55 | });
56 |
57 | } catch (error) {
58 | return next(error);
59 | }
60 | }
61 |
62 | exports.sendEmailToSubscribers = async (req, res, next) => {
63 | let { emails, allSubscribers } = req.body;
64 | if (allSubscribers) {
65 | let subscribers = await Newsletter.find();
66 | let email = [];
67 | for (let x = 0; x < subscribers.length; x++) {
68 | email.push(subscribers[x].email);
69 | }
70 | await sendEmail(email, 'send-news-letter-subscription-email-admin');
71 | }
72 | else if (emails && emails.length > 0) {
73 |
74 | let email = [];
75 | for (let x = 0; x < emails.length; x++) {
76 | activeEmails = await Newsletter.find({ email: emails[x]})
77 | activeEmails.forEach(val => {
78 | email.push(val.email);
79 | });
80 | }
81 | await sendEmail(email, 'send-news-letter-subscription-email-admin');
82 | }
83 | return res.send({ status: true, message: "Email Sent Successfully." });
84 | }
85 |
86 |
87 |
--------------------------------------------------------------------------------
/src/api/controllers/admin/settings.controller.js:
--------------------------------------------------------------------------------
1 | const Settings = require('../../models/settings.model')
2 | const { checkDuplicate } = require('../../../config/errors')
3 |
4 | // API to edit Settings
5 | exports.edit = async (req, res, next) => {
6 | try {
7 | let payload = req.body;
8 | const settings = await Settings.updateOne({}, { $set: payload }, { upsert: true })
9 | return res.send({ success: true, message: 'Settings updated successfully', settings })
10 | } catch (error) {
11 | if (error.code === 11000 || error.code === 11001)
12 | checkDuplicate(error, res, 'Settings')
13 | else
14 | return next(error)
15 | }
16 | }
17 |
18 | // // API to get Settings
19 | exports.get = async (req, res, next) => {
20 | try {
21 | const settings = await Settings.findOne({}, { __v: 0, createdAt: 0, updatedAt: 0 }).lean(true)
22 | if (settings)
23 | return res.json({ success: true, message: 'Settings retrieved successfully', settings })
24 | else
25 | return res.json({ success: false, message: settings })
26 | } catch (error) {
27 | return next(error)
28 | }
29 | }
--------------------------------------------------------------------------------
/src/api/controllers/front-bk/cms.controller.js:
--------------------------------------------------------------------------------
1 | const ObjectId = require('mongoose').Types.ObjectId
2 | const Cms = require('../../models/cms.model');
3 |
4 | exports.get = async (req, res, next) => {
5 | try {
6 | let { slug } = req.params;
7 | if (slug) {
8 | let cms = await Cms.findOne({ slug, status: true }, { title: 1, description: 1, _id: 0 }).lean(true);
9 | return res.send({ success: true, message: "CMS Retrieved Successfully.", cms });
10 | }
11 | return res.send({ success: false, message: "Slug Is Required" });
12 | } catch (error) {
13 | return next(error);
14 | }
15 | }
16 |
17 | exports.list = async (req, res, next) => {
18 | try {
19 | let cms = await Cms.find({ status: true }, { title: 1, slug: 1, _id: 0 }).sort({ createdAt: -1 }).limit(5);
20 |
21 | return res.send({ success: true, message: "CMS Listing Retrieved successfully.", cms });
22 | } catch (error) {
23 | return next(error);
24 | }
25 | };
26 |
27 |
--------------------------------------------------------------------------------
/src/api/controllers/front-bk/contact.controller.js:
--------------------------------------------------------------------------------
1 | const Contact = require('../../models/contact.model');
2 | const Settings = require('../../models/settings.model')
3 | const mongoose = require('mongoose')
4 | const { uploadToCloudinary } = require('../../utils/upload')
5 | const { sendEmail } = require('../../utils/emails/emails')
6 | exports.create = async (req, res, next) => {
7 | try {
8 |
9 | let contact = await Contact.create(req.body);
10 | res.send({ success: true, data: contact, message: 'Support Form successfully send' });
11 | } catch (error) {
12 | return next(error);
13 | }
14 | };
--------------------------------------------------------------------------------
/src/api/controllers/front-bk/faq.controller.js:
--------------------------------------------------------------------------------
1 | const FAQ = require('../../models/faq.model')
2 | const FaqCat = require('../../models/faqCategories.model')
3 | const ObjectId = require('mongoose').Types.ObjectId
4 |
5 | // API to get FAQ list
6 | exports.list = async (req, res, next) => {
7 | try {
8 | let { catId } = req.params
9 |
10 | const faqs = await FAQ.find({ status: true, catId: ObjectId(catId) }, { title: 1, desc: 1 })
11 |
12 | return res.send({
13 | success: true, message: 'FAQs fetched successfully',
14 | data: {
15 | faqs
16 | }
17 | })
18 | } catch (error) {
19 | return next(error)
20 | }
21 | }
22 |
23 | // API to get FAQ list
24 | exports.listFaqCategories = async (req, res, next) => {
25 | try {
26 | const faqCats = await FaqCat.find({ status: true }, { title: 1 })
27 |
28 | return res.send({
29 | success: true, message: 'FAQ Categories fetched successfully',
30 | faqCats
31 | })
32 | } catch (error) {
33 | return next(error)
34 | }
35 | }
--------------------------------------------------------------------------------
/src/api/controllers/front-bk/footer.controller.js:
--------------------------------------------------------------------------------
1 | const Settings = require('../../models/settings.model');
2 | const NewsLetter = require('../../models/newsletter.model');
3 | const { checkDuplicate } = require('../../middlewares/error');
4 | const axios = require('axios');
5 |
6 | exports.submit = async (req, res, next) => {
7 | try {
8 | let payload = req.body
9 |
10 | let newsLetter = await NewsLetter.create(payload);
11 |
12 | if (newsLetter)
13 | return res.send({ success: true, message: "Email Submitted Successfully." });
14 |
15 | } catch (error) {
16 | if (error.code === 11000 || error.code === 11001)
17 | checkDuplicate(error, res, 'Email');
18 | else
19 | return next(error);
20 | }
21 | }
22 |
23 | exports.get = async (req, res, next) => {
24 | try {
25 | let footer = await Settings.findOne({}, { discord: 1, twitter: 1, youtube: 1, instagram: 1, medium: 1, reddit: 1, telegram: 1, github: 1, linkedIn: 1, facebook: 1, desc: 1, _id: 0 }).lean(true);
26 | return res.send({ success: true, message: "Footer Retrieved Successfully.", footer });
27 | } catch (error) {
28 | return next(error);
29 | }
30 | }
31 |
32 | exports.cryptocurrencyListing = async(req,res,next) => {
33 | let response = null;
34 | new Promise(async (resolve, reject) => {
35 | try {
36 | response = await axios.get('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest', {
37 | headers: {
38 | 'X-CMC_PRO_API_KEY': '7c9a4cbf-413c-4d75-a6d5-8ac2740fe4fd',
39 | },
40 | });
41 | } catch(ex) {
42 | response = null;
43 | // error
44 | console.log(ex);
45 | reject(ex);
46 | }
47 | if (response) {
48 | // success
49 | const json = response.data;
50 | let currenciesData = json.data
51 | currenciesData = currenciesData.slice(0,6)
52 | resolve(currenciesData);
53 | res.send({success: true, message: "Currencies Fetched Successfully", currenciesData})
54 |
55 | }
56 | });
57 | }
--------------------------------------------------------------------------------
/src/api/controllers/front-bk/settings.controller.js:
--------------------------------------------------------------------------------
1 | const Settings = require('../../models/settings.model')
2 |
3 | // API to get Settings
4 | exports.get = async (req, res, next) => {
5 | try {
6 | const settings = await Settings.findOne({}, { __v: 0, createdAt: 0, updatedAt: 0, api: 0, domain: 0 }).lean(true)
7 | if (settings)
8 | return res.json({ success: true, message: 'Settings retrieved successfully', settings })
9 | else
10 | return res.json({ success: false, message: settings })
11 | } catch (error) {
12 | return next(error)
13 | }
14 | }
--------------------------------------------------------------------------------
/src/api/controllers/front-bk/users.controller.js:
--------------------------------------------------------------------------------
1 | const ObjectId = require('mongoose').Types.ObjectId
2 | const User = require('../../models/users.model');
3 | const { uploadToCloudinary } = require('../../utils/upload');
4 |
5 | exports.update = async (req, res, next) => {
6 | try {
7 | let payload = req.body;
8 | let { userId } = req.params
9 | if (req.files) {
10 | for (const key in req.files) {
11 | const image = req.files[key][0]
12 | payload[key] = await uploadToCloudinary(image.path)
13 | payload[`${key}Local`] = image.filename
14 | }
15 | }
16 |
17 | let user = await User.findByIdAndUpdate({ _id: userId }, { $set: payload }, { new: true });
18 | let data = user.transform();
19 | return res.send({ success: true, data, message: "Your profile is updated successfully." });
20 | } catch (error) {
21 | return next(error);
22 | }
23 | };
24 |
25 | exports.getUser = async (req, res, next) => {
26 | try {
27 | let { userId } = req.params;
28 | let user = await User.findOne({ _id: ObjectId(userId) });
29 | user = user.transform();
30 | return res.send({ success: true, data: user, message: "Users fetched succesfully" });
31 | } catch (error) {
32 | return next(error);
33 | }
34 | };
35 |
36 |
37 | exports.uploadContent = async (req, res, next) => {
38 | try {
39 | const files = req.file ? `${req.file.filename}` : "";
40 | return res.json({ success: true, message: 'File upload successfully', data: files })
41 | } catch (error) {
42 | return res.status(400).send({ success: false, message: error });
43 | }
44 | };
45 |
46 | exports.getUserReferrals = async (req, res, next) => {
47 | try {
48 | let { userId } = req.params;
49 | let userReferrals = await User.find({ refferedBy: ObjectId(userId) });
50 | return res.send({ success: true, userReferrals, message: "User Referrals Retrieved Successfully." });
51 | } catch (error) {
52 | return next(error);
53 | }
54 | };
55 |
56 |
57 | exports.getTokenStats = async (req, res, next) => {
58 | try{
59 | const { symbol } = req.params
60 |
61 |
62 | } catch (error) {
63 | return next(error);
64 | }
65 | }
--------------------------------------------------------------------------------
/src/api/controllers/front/activities.controller.js:
--------------------------------------------------------------------------------
1 | const db = require("../../models");
2 | const Activity = db.Activity;
3 | const { Users } = db;
4 | // Activity
5 | // list Activityies
6 | exports.list = async (req, res, next) => {
7 | try {
8 | const uni = await Activity.findAndCountAll();
9 |
10 | let { page, limit, name } = req.query;
11 |
12 | // console.log("unitt", uni.count);
13 | // console.log("req.queryy", req.query); //name
14 | const filter = {};
15 |
16 | page = page !== undefined && page !== "" ? parseInt(page) : 1;
17 | limit = limit !== undefined && limit !== "" ? parseInt(limit) : 10;
18 |
19 | if (name) {
20 | filter.name = { $LIKE: name, $options: "gi" };
21 | }
22 |
23 | const total = uni.count;
24 |
25 | if (page > Math.ceil(total / limit) && total > 0)
26 | page = Math.ceil(total / limit);
27 |
28 | console.log("filter", filter);
29 | const faqs = await Activity.findAll({
30 | order: [["updatedAt", "DESC"]],
31 | offset: limit * (page - 1),
32 | limit: limit,
33 | where: filter,
34 | include: [Users],
35 | });
36 | console.log("faqs", faqs);
37 | // res.send(uni);
38 | return res.send({
39 | success: true,
40 | message: "Activities fetched successfully",
41 | data: {
42 | faqs,
43 | pagination: {
44 | page,
45 | limit,
46 | total,
47 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit),
48 | },
49 | },
50 | });
51 | } catch (err) {
52 | res.send("currency Error " + err);
53 | }
54 | // next();
55 | };
56 |
--------------------------------------------------------------------------------
/src/api/controllers/front/costofsales.controller.js:
--------------------------------------------------------------------------------
1 | const db = require("../../models");
2 | const CostOfSales = db.CostOfSales;
3 | const Activity = db.Activity;
4 | // create program categorys
5 | exports.create = async (req, res, next) => {
6 | try {
7 | console.log("Req.body costOfSales controller =====>", req.body);
8 | //
9 |
10 | let costOfSales = {
11 | name: req.body.name,
12 | description: req.body.description,
13 | amount: req.body.amount,
14 | date: req.body.date,
15 | statusID: req.body.statusID
16 | };
17 |
18 | //save the costOfSales in db
19 | costOfSales = await CostOfSales.create(costOfSales);
20 | await Activity.create({
21 | action: "New CostOfSales Created",
22 | name: req.body.Uname, role: req.body.role,
23 | });
24 |
25 | return res.json({
26 | success: true,
27 | data: costOfSales,
28 | // Activity,
29 | message: "costOfSales created successfully",
30 | });
31 | } catch (err) {
32 | // res.status(500).send({
33 | // message:
34 | // err.message || "Some error occurred while creating the Tutorial."
35 | // });
36 | console.log("Error handling =>", err);
37 | // console.log("catch block")
38 | next();
39 | }
40 | };
41 |
42 | // list costOfSales
43 | exports.list = async (req, res, next) => {
44 | try {
45 | const uni = await CostOfSales.findAndCountAll();
46 | let { page, limit, name } = req.query;
47 |
48 | console.log("unitt", uni.count);
49 | console.log("req.queryy", req.query); //name
50 | const filter = {};
51 |
52 | page = page !== undefined && page !== "" ? parseInt(page) : 1;
53 | limit = limit !== undefined && limit !== "" ? parseInt(limit) : 10;
54 |
55 | if (name) {
56 | filter.name = { $LIKE: name, $options: "gi" };
57 | }
58 |
59 | const total = uni.count;
60 |
61 | if (page > Math.ceil(total / limit) && total > 0)
62 | page = Math.ceil(total / limit);
63 |
64 | console.log("filter", filter);
65 | const faqs = await CostOfSales.findAll({
66 | order: [["updatedAt", "DESC"]],
67 | offset: limit * (page - 1),
68 | limit: limit,
69 | where: filter,
70 | });
71 | console.log("faqs", faqs);
72 | // res.send(uni);
73 | return res.send({
74 | success: true,
75 | message: "costOfSales fetched successfully",
76 | data: {
77 | faqs,
78 | pagination: {
79 | page,
80 | limit,
81 | total,
82 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit),
83 | },
84 | },
85 | });
86 | } catch (err) {
87 | res.send("costOfSales Error " + err);
88 | }
89 | // next();
90 | };
91 |
92 | // API to edit costOfSales
93 | exports.edit = async (req, res, next) => {
94 | try {
95 | let payload = req.body;
96 | const costOfSales = await CostOfSales.update(
97 | // Values to update
98 | payload,
99 | {
100 | // Clause
101 | where: {
102 | id: payload.id,
103 | },
104 | }
105 | );
106 | await Activity.create({
107 | action: "New costOfSales updated",
108 | name: req.body.Uname, role: req.body.role,
109 | });
110 |
111 | return res.send({
112 | success: true,
113 | message: "costOfSales updated successfully",
114 | costOfSales,
115 | });
116 | } catch (error) {
117 | return next(error);
118 | }
119 | };
120 |
121 | // API to delete costOfSales
122 | exports.delete = async (req, res, next) => {
123 | try {
124 | const { id } = req.params;
125 | if (id) {
126 | const costOfSales = await CostOfSales.destroy({
127 | where: { id: id },
128 | });
129 | await Activity.create({
130 | action: " costOfSales deleted",
131 | name: "samon", role: "superAdmin"
132 | });
133 |
134 | if (costOfSales)
135 | return res.send({
136 | success: true,
137 | message: "costOfSales Page deleted successfully",
138 | id,
139 | });
140 | else
141 | return res.status(400).send({
142 | success: false,
143 | message: "costOfSales Page not found for given Id",
144 | });
145 | } else
146 | return res
147 | .status(400)
148 | .send({ success: false, message: "costOfSales Id is required" });
149 | } catch (error) {
150 | return next(error);
151 | }
152 | };
153 |
154 | // API to get by id a costOfSales
155 | exports.get = async (req, res, next) => {
156 | try {
157 | const { id } = req.params;
158 | if (id) {
159 | console.log("oooooooooooooooooooooooo\n", CostOfSales);
160 | const costOfSales = await CostOfSales.findByPk(id);
161 |
162 | if (costOfSales)
163 | return res.json({
164 | success: true,
165 | message: "costOfSales retrieved successfully",
166 | costOfSales,
167 | });
168 | else
169 | return res.status(400).send({
170 | success: false,
171 | message: "costOfSales not found for given Id",
172 | });
173 | } else
174 | return res
175 | .status(400)
176 | .send({ success: false, message: "costOfSales Id is required" });
177 | } catch (error) {
178 | return next(error);
179 | }
180 | };
181 |
--------------------------------------------------------------------------------
/src/api/controllers/front/expenses.controller.js:
--------------------------------------------------------------------------------
1 | const db = require("../../models");
2 | const Expenses = db.Expenses;
3 | const Activity = db.Activity;
4 | // create program categorys
5 | exports.create = async (req, res, next) => {
6 | try {
7 | console.log("Req.body expenses controller =====>", req.body);
8 | //
9 |
10 | let expenses = {
11 | name: req.body.name,
12 | description: req.body.description,
13 | amount: req.body.amount,
14 | date: req.body.date,
15 | statusID: req.body.statusID
16 | };
17 |
18 | //save the expenses in db
19 | expenses = await Expenses.create(expenses);
20 | await Activity.create({
21 | action: "New Expenses Created",
22 | name: req.body.Uname, role: req.body.role,
23 | });
24 |
25 | return res.json({
26 | success: true,
27 | data: expenses,
28 | // Activity,
29 | message: "expenses created successfully",
30 | });
31 | } catch (err) {
32 | // res.status(500).send({
33 | // message:
34 | // err.message || "Some error occurred while creating the Tutorial."
35 | // });
36 | console.log("Error handling =>", err);
37 | // console.log("catch block")
38 | next();
39 | }
40 | };
41 |
42 | // list expenses
43 | exports.list = async (req, res, next) => {
44 | try {
45 | const uni = await Expenses.findAndCountAll();
46 | let { page, limit, name } = req.query;
47 |
48 | console.log("unitt", uni.count);
49 | console.log("req.queryy", req.query); //name
50 | const filter = {};
51 |
52 | page = page !== undefined && page !== "" ? parseInt(page) : 1;
53 | limit = limit !== undefined && limit !== "" ? parseInt(limit) : 10;
54 |
55 | if (name) {
56 | filter.name = { $LIKE: name, $options: "gi" };
57 | }
58 |
59 | const total = uni.count;
60 |
61 | if (page > Math.ceil(total / limit) && total > 0)
62 | page = Math.ceil(total / limit);
63 |
64 | console.log("filter", filter);
65 | const faqs = await Expenses.findAll({
66 | order: [["updatedAt", "DESC"]],
67 | offset: limit * (page - 1),
68 | limit: limit,
69 | where: filter,
70 | });
71 | console.log("faqs", faqs);
72 | // res.send(uni);
73 | return res.send({
74 | success: true,
75 | message: "expenses fetched successfully",
76 | data: {
77 | faqs,
78 | pagination: {
79 | page,
80 | limit,
81 | total,
82 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit),
83 | },
84 | },
85 | });
86 | } catch (err) {
87 | res.send("expenses Error " + err);
88 | }
89 | // next();
90 | };
91 |
92 | // API to edit expenses
93 | exports.edit = async (req, res, next) => {
94 | try {
95 | let payload = req.body;
96 | const expenses = await Expenses.update(
97 | // Values to update
98 | payload,
99 | {
100 | // Clause
101 | where: {
102 | id: payload.id,
103 | },
104 | }
105 | );
106 | await Activity.create({
107 | action: "New expenses updated",
108 | name: req.body.Uname, role: req.body.role,
109 | });
110 |
111 | return res.send({
112 | success: true,
113 | message: "expenses updated successfully",
114 | expenses,
115 | });
116 | } catch (error) {
117 | return next(error);
118 | }
119 | };
120 |
121 | // API to delete expenses
122 | exports.delete = async (req, res, next) => {
123 | try {
124 | const { id } = req.params;
125 | if (id) {
126 | const expenses = await Expenses.destroy({
127 | where: { id: id },
128 | });
129 | await Activity.create({
130 | action: " expenses deleted",
131 | name: "samon", role: "superAdmin"
132 | });
133 |
134 | if (expenses)
135 | return res.send({
136 | success: true,
137 | message: "expenses Page deleted successfully",
138 | id,
139 | });
140 | else
141 | return res.status(400).send({
142 | success: false,
143 | message: "expenses Page not found for given Id",
144 | });
145 | } else
146 | return res
147 | .status(400)
148 | .send({ success: false, message: "expenses Id is required" });
149 | } catch (error) {
150 | return next(error);
151 | }
152 | };
153 |
154 | // API to get by id a expenses
155 | exports.get = async (req, res, next) => {
156 | try {
157 | const { id } = req.params;
158 | if (id) {
159 | console.log("oooooooooooooooooooooooo\n", Expenses);
160 | const expenses = await Expenses.findByPk(id);
161 |
162 | if (expenses)
163 | return res.json({
164 | success: true,
165 | message: "expenses retrieved successfully",
166 | expenses,
167 | });
168 | else
169 | return res.status(400).send({
170 | success: false,
171 | message: "expenses not found for given Id",
172 | });
173 | } else
174 | return res
175 | .status(400)
176 | .send({ success: false, message: "expenses Id is required" });
177 | } catch (error) {
178 | return next(error);
179 | }
180 | };
181 |
--------------------------------------------------------------------------------
/src/api/controllers/front/properties.controller.js:
--------------------------------------------------------------------------------
1 | const db = require("../../models");
2 | const Property = db.Property;
3 | const Activity = db.Activity;
4 |
5 | // create Property
6 | exports.create = async (req, res, next) => {
7 | try {
8 | let payload = req.body;
9 | console.log("payload", payload);
10 | //save the property in db
11 | let property = await Property.create(payload);
12 | await Activity.create({ action: "New property Created", name: req.body.Uname, role: req.body.role });
13 |
14 | return res.json({
15 | success: true,
16 | data: property,
17 | message: "property created successfully",
18 | });
19 | } catch (err) {
20 | next();
21 | }
22 | };
23 |
24 | // list Propertyies
25 | exports.list = async (req, res, next) => {
26 | try {
27 | const uni = await Property.findAndCountAll();
28 |
29 | let { page, limit, name } = req.query;
30 |
31 | console.log("unitt", uni.count);
32 | console.log("req.queryy", req.query); //name
33 | const filter = {};
34 |
35 | page = page !== undefined && page !== "" ? parseInt(page) : 1;
36 | limit = limit !== undefined && limit !== "" ? parseInt(limit) : 10;
37 |
38 | if (name) {
39 | filter.name = { $LIKE: name, $options: "gi" };
40 | }
41 |
42 | const total = uni.count;
43 |
44 | if (page > Math.ceil(total / limit) && total > 0)
45 | page = Math.ceil(total / limit);
46 |
47 | console.log("filter", filter);
48 | const faqs = await Property.findAll({
49 | order: [["updatedAt", "DESC"]],
50 | offset: limit * (page - 1),
51 | limit: limit,
52 | where: filter,
53 | });
54 | console.log("faqs", faqs);
55 | // res.send(uni);
56 | return res.send({
57 | success: true,
58 | message: "Properties fetched successfully",
59 | data: {
60 | faqs,
61 | pagination: {
62 | page,
63 | limit,
64 | total,
65 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit),
66 | },
67 | },
68 | });
69 | } catch (err) {
70 | res.send("property Error " + err);
71 | }
72 | // next();
73 | };
74 |
75 | // API to edit property
76 | exports.edit = async (req, res, next) => {
77 | try {
78 | let payload = req.body;
79 | const property = await Property.update(
80 | // Values to update
81 | payload,
82 | {
83 | // Clause
84 | where: {
85 | id: payload.id,
86 | },
87 | }
88 | );
89 | await Activity.create({ action: "property updated", name: req.body.Uname, role: req.body.role });
90 |
91 | return res.send({
92 | success: true,
93 | message: "property updated successfully",
94 | property,
95 | });
96 | } catch (error) {
97 | return next(error);
98 | }
99 | };
100 |
101 | // API to delete property
102 | exports.delete = async (req, res, next) => {
103 | try {
104 | const { id } = req.params;
105 | if (id) {
106 | const property = await Property.destroy({ where: { id: id } });
107 |
108 | await Activity.create({ action: "property deleted",
109 | name: "samon", role: "superAdmin"
110 | });
111 | if (property)
112 | return res.send({
113 | success: true,
114 | message: "property Page deleted successfully",
115 | id,
116 | });
117 | else
118 | return res.status(400).send({
119 | success: false,
120 | message: "property Page not found for given Id",
121 | });
122 | } else
123 | return res
124 | .status(400)
125 | .send({ success: false, message: "property Id is required" });
126 | } catch (error) {
127 | return next(error);
128 | }
129 | };
130 |
131 | // API to get by id a property
132 | exports.get = async (req, res, next) => {
133 | try {
134 | const { id } = req.params;
135 | if (id) {
136 | const property = await Property.findByPk(id);
137 |
138 | if (property)
139 | return res.json({
140 | success: true,
141 | message: "property retrieved successfully",
142 | property,
143 | });
144 | else
145 | return res.status(400).send({
146 | success: false,
147 | message: "property not found for given Id",
148 | });
149 | } else
150 | return res
151 | .status(400)
152 | .send({ success: false, message: "property Id is required" });
153 | } catch (error) {
154 | return next(error);
155 | }
156 | };
157 |
--------------------------------------------------------------------------------
/src/api/controllers/front/sales.controller.js:
--------------------------------------------------------------------------------
1 | const db = require("../../models");
2 | const Sales = db.Sales;
3 | const Activity = db.Activity;
4 | // create program categorys
5 | exports.create = async (req, res, next) => {
6 | try {
7 | console.log("Req.body sales controller =====>", req.body);
8 | //
9 |
10 | let sales = {
11 | name: req.body.name,
12 | description: req.body.description,
13 | amount: req.body.amount,
14 | date: req.body.date,
15 | statusID: req.body.statusID
16 | };
17 |
18 | //save the sales in db
19 | sales = await Sales.create(sales);
20 | await Activity.create({
21 | action: "New Sales Created",
22 | name: req.body.Uname, role: req.body.role,
23 | });
24 |
25 | return res.json({
26 | success: true,
27 | data: sales,
28 | // Activity,
29 | message: "sales created successfully",
30 | });
31 | } catch (err) {
32 | // res.status(500).send({
33 | // message:
34 | // err.message || "Some error occurred while creating the Tutorial."
35 | // });
36 | console.log("Error handling =>", err);
37 | // console.log("catch block")
38 | next();
39 | }
40 | };
41 |
42 | // list sales
43 | exports.list = async (req, res, next) => {
44 | try {
45 | const uni = await Sales.findAndCountAll();
46 | let { page, limit, name } = req.query;
47 |
48 | console.log("unitt", uni.count);
49 | console.log("req.queryy", req.query); //name
50 | const filter = {};
51 |
52 | page = page !== undefined && page !== "" ? parseInt(page) : 1;
53 | limit = limit !== undefined && limit !== "" ? parseInt(limit) : 10;
54 |
55 | if (name) {
56 | filter.name = { $LIKE: name, $options: "gi" };
57 | }
58 |
59 | const total = uni.count;
60 |
61 | if (page > Math.ceil(total / limit) && total > 0)
62 | page = Math.ceil(total / limit);
63 |
64 | console.log("filter", filter);
65 | const faqs = await Sales.findAll({
66 | order: [["updatedAt", "DESC"]],
67 | offset: limit * (page - 1),
68 | limit: limit,
69 | where: filter,
70 | });
71 | console.log("faqs", faqs);
72 | // res.send(uni);
73 | return res.send({
74 | success: true,
75 | message: "program categorys fetched successfully",
76 | data: {
77 | faqs,
78 | pagination: {
79 | page,
80 | limit,
81 | total,
82 | pages: Math.ceil(total / limit) <= 0 ? 1 : Math.ceil(total / limit),
83 | },
84 | },
85 | });
86 | } catch (err) {
87 | res.send("sales Error " + err);
88 | }
89 | // next();
90 | };
91 |
92 | // API to edit sales
93 | exports.edit = async (req, res, next) => {
94 | try {
95 | let payload = req.body;
96 | const sales = await Sales.update(
97 | // Values to update
98 | payload,
99 | {
100 | // Clause
101 | where: {
102 | id: payload.id,
103 | },
104 | }
105 | );
106 | await Activity.create({
107 | action: "New sales updated",
108 | name: req.body.Uname, role: req.body.role,
109 | });
110 |
111 | return res.send({
112 | success: true,
113 | message: "sales updated successfully",
114 | sales,
115 | });
116 | } catch (error) {
117 | return next(error);
118 | }
119 | };
120 |
121 | // API to delete sales
122 | exports.delete = async (req, res, next) => {
123 | try {
124 | const { id } = req.params;
125 | if (id) {
126 | const sales = await Sales.destroy({
127 | where: { id: id },
128 | });
129 | await Activity.create({
130 | action: " sales deleted",
131 | name: "samon", role: "superAdmin"
132 | });
133 |
134 | if (sales)
135 | return res.send({
136 | success: true,
137 | message: "sales Page deleted successfully",
138 | id,
139 | });
140 | else
141 | return res.status(400).send({
142 | success: false,
143 | message: "sales Page not found for given Id",
144 | });
145 | } else
146 | return res
147 | .status(400)
148 | .send({ success: false, message: "sales Id is required" });
149 | } catch (error) {
150 | return next(error);
151 | }
152 | };
153 |
154 | // API to get by id a sales
155 | exports.get = async (req, res, next) => {
156 | try {
157 | const { id } = req.params;
158 | if (id) {
159 | console.log("oooooooooooooooooooooooo\n", Sales);
160 | const sales = await Sales.findByPk(id);
161 |
162 | if (sales)
163 | return res.json({
164 | success: true,
165 | message: "sales retrieved successfully",
166 | sales,
167 | });
168 | else
169 | return res.status(400).send({
170 | success: false,
171 | message: "sales not found for given Id",
172 | });
173 | } else
174 | return res
175 | .status(400)
176 | .send({ success: false, message: "sales Id is required" });
177 | } catch (error) {
178 | return next(error);
179 | }
180 | };
181 |
--------------------------------------------------------------------------------
/src/api/controllers/front/test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Hi, Troy Martin. Welcome to QETC!
8 |
91 |
92 |
93 |
94 | Hi, {{ name }}. Welcome to QETC!
95 | Dear Customer
96 | Here is your code to confirm your e-mail l for become a part ot the Community of
97 | Mathematicaians.
98 |
99 |
100 |
{{usercode}}
101 |
102 | Best Regards
103 | GROTHENDIECK
104 |
105 |
106 |
--------------------------------------------------------------------------------
/src/api/middlewares/error.js:
--------------------------------------------------------------------------------
1 | const httpStatus = require('http-status');
2 | const expressValidation = require('express-validation');
3 | const APIError = require('../utils/APIError');
4 | const { env } = require('../../config/vars');
5 | const { check } = require('express-validator')
6 |
7 | /**
8 | * Error handler. Send stacktrace only during development
9 | * @public
10 | */
11 | const handler = (err, req, res, next) => {
12 | const response = {
13 | code: err.status,
14 | message: err.message || httpStatus[err.status],
15 | errors: err.errors,
16 | stack: err.stack,
17 | };
18 |
19 | if (env !== 'development') {
20 | delete response.stack;
21 | }
22 |
23 | res.status(err.status);
24 | res.json(response);
25 | };
26 | exports.handler = handler;
27 |
28 | /**
29 | * If error is not an instanceOf APIError, convert it.
30 | * @public
31 | */
32 | exports.converter = (err, req, res, next) => {
33 | let convertedError = err;
34 |
35 | if (err instanceof expressValidation.ValidationError) {
36 | convertedError = new APIError({
37 | message: 'Erro de Validação',
38 | errors: err.errors,
39 | status: err.status,
40 | stack: err.stack,
41 | });
42 | } else if (!(err instanceof APIError)) {
43 | convertedError = new APIError({
44 | message: err.message,
45 | status: err.status,
46 | stack: err.stack,
47 | });
48 | }
49 |
50 | return handler(convertedError, req, res);
51 | };
52 |
53 | /**
54 | * Catch 404 and forward to error handler
55 | * @public
56 | */
57 | exports.notFound = (req, res, next) => {
58 | const err = new APIError({
59 | message: 'We can not find something similar to this',
60 | status: httpStatus.NOT_FOUND,
61 | });
62 | return handler(err, req, res);
63 | };
64 |
65 | /**
66 | * Catch 422 for duplicate key
67 | * @public
68 | */
69 | exports.checkDuplicate = (err, res, name = '') => {
70 | if (err.code === 11000 || err.code === 11001) {
71 | let message = `${name} with same `;
72 | if (err.errmsg.includes('email_1'))
73 | message += 'email already exists';
74 | else {
75 | const pathRegex = err.message.match(/\.\$([a-z]+)/)
76 | const path = pathRegex ? pathRegex[1] : '';
77 | const keyRegex = err.message.match(/key:\s+{\s+:\s\"(.*)(?=\")/)
78 | const key = keyRegex ? keyRegex[1] : '';
79 | message = `'${path}' '${key}' already exists`;
80 | }
81 | return res.status(200).send({ success: false, message });
82 | }
83 | };
84 |
85 | exports.validationOptions = [
86 | check('name', 'Name should be atleast me 3 characters long')
87 | .exists()
88 | .isLength({ min: 3 }),
89 | check('email', 'Invalid Email')
90 | .isEmail()
91 | .normalizeEmail(),
92 | check('password', 'Password should be atleast 8 characters long')
93 | .exists()
94 | .isLength({ min: 8 }),
95 | check(
96 | 'confirmpassword','Passwords do not match')
97 | .exists()
98 | .custom((value, { req }) => value === req.body.password),
99 | check(
100 | 'status','Status is required')
101 | .exists()
102 |
103 | ]
--------------------------------------------------------------------------------
/src/api/middlewares/front/auth.js:
--------------------------------------------------------------------------------
1 | const byPassedRoutes = ['/v1/cron/conversion/rate/','/v1/admin/staff/create','/v1/front/test','/v1/front/auth/login','/v1/admin/staff/login','/v1/front/auth/register','/v1/front/auth/login','/v1/front/auth/forgot-password','/v1/front/auth/reset-password','/v1/mobile/auth/sigin','/v1/mobile/auth/signup','/v1/mobile/auth/forgotPassword','/v1/front/games/get-games'];
2 | const User = require('../../models/users.model');
3 | const Admin = require('../../models/admin.model')
4 | const CryptoJS = require("crypto-js");
5 | const { pwEncryptionKey, frontEncSecret } = require('./../../../config/vars');
6 | const jwt = require('jsonwebtoken');
7 |
8 | exports.authenticate = async (req, res, next) => {
9 | if (req.originalUrl.indexOf("/v1/") > -1) {
10 | if (byPassedRoutes.indexOf(req.originalUrl) > -1 || req.originalUrl.indexOf("/v1/xyz") > -1) {
11 | next();
12 | }
13 | else {
14 | if (req.headers['x-auth-token']) {
15 | var decryption_string = req.headers['x-auth-token'];
16 |
17 | if (req.token) {
18 | var bytes = CryptoJS.AES.decrypt(req.token, decryption_string);
19 | // var decryptedData = bytes.toString(CryptoJS.enc.Utf8);
20 | // if (decryptedData !== frontEncSecret) {
21 | // const message = 'auth_request_required_front_error1'
22 | // return res.status(405).json({ success: false, message });
23 | // }
24 | // else {
25 | next();
26 | // }
27 | }
28 | else if (req.method.toLocaleLowerCase() !== 'options') {
29 | const message = 'auth_request_required_front_error2'
30 | return res.status(405).json({ success: false, message });
31 | }
32 | else {
33 | next();
34 | }
35 | }
36 | else if (req.method.toLocaleLowerCase() !== 'options' &&
37 | (req.url.indexOf('/v1/admin/staff/private-admin') > -1)) {
38 | next()
39 | }
40 | else if (req.method.toLocaleLowerCase() !== 'options') {
41 | const message = 'auth_request_required_front_error3'
42 | return res.status(405).json({ success: false, message });
43 | }
44 | else {
45 | next();
46 | }
47 | }
48 | }
49 | else {
50 | next();
51 | }
52 | }
53 |
54 | exports.userValidation = async (req, res, next) => {
55 | let flag = true;
56 | req.user = 0;
57 | if (req.headers['x-access-token']) {
58 | await jwt.verify(req.headers['x-access-token'], pwEncryptionKey, async (err, authorizedData) => {
59 | if (err) {
60 | flag = false;
61 | const message = 'session_expired_front_error'
62 | return res.send({ success: false, userDisabled: true, message, err });
63 | }
64 | else {
65 | const reqPlatform = Number(req.headers['user-platform'])
66 | req.user = authorizedData.sub;
67 | if (reqPlatform === 1) {
68 | let user = await User.findById({ _id: req.user }).lean();
69 | if (!user) {
70 | flag = false;
71 | return res.send({ success: false, user404: true, message: 'There is no account linked to that id', notExist: 1 });
72 | }
73 | }
74 | else if (reqPlatform === 2) {
75 | let admin = await Admin.findById({ _id: req.user }).lean();
76 | if (!admin) {
77 | flag = false;
78 | return res.send({ success: false, user404: true, message: 'There is no account linked to that id', notExist: 1 });
79 | }
80 | }
81 | }
82 | })
83 | }
84 | else if (req.method.toLocaleLowerCase() !== 'options') {
85 | req.user = 0;
86 | }
87 |
88 | if (flag)
89 | next();
90 | }
91 |
--------------------------------------------------------------------------------
/src/api/models-bk/activity.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | /**
4 | * Activity Schema
5 | * @private
6 | */
7 | const ActivitySchema = new mongoose.Schema({
8 | userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
9 | type: { type: Number },
10 | price: { type: Number },
11 | currency: { type: String }
12 | }, { timestamps: true }
13 | );
14 |
15 | /**
16 | * @typedef Activities
17 | */
18 |
19 | module.exports = mongoose.model('Activities', ActivitySchema);
20 |
--------------------------------------------------------------------------------
/src/api/models-bk/admin.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const bcrypt = require('bcryptjs');
3 | const moment = require('moment-timezone');
4 | const jwt = require('jwt-simple');
5 | const {
6 | pwdSaltRounds,
7 | jwtExpirationInterval,
8 | pwEncryptionKey
9 | } = require('../../config/vars');
10 |
11 | /**
12 | * Admin Schema
13 | * @private
14 | */
15 | const AdminSchema = new mongoose.Schema({
16 | name: { type: String, required: true },
17 | email: { type: String, required: true, lowercase: true, unique: true },
18 | phone: { type: String },
19 | password: { type: String, required: true },
20 | roleId: { type: String, required: true },
21 | status: { type: Boolean, required: true, default: false },
22 | image: { type: String },
23 | imageLocal: { type: String },
24 | resetCode: { type: String }
25 | }, { timestamps: true }
26 | );
27 |
28 | AdminSchema.methods.verifyPassword = function (password) {
29 | return bcrypt.compareSync(password, this.password);
30 | };
31 |
32 | AdminSchema.methods.getPasswordHash = async function (password) {
33 | const rounds = pwdSaltRounds ? parseInt(pwdSaltRounds) : 10;
34 | const hash = await bcrypt.hash(password, rounds);
35 | return hash
36 | }
37 |
38 | /**
39 | * Methods
40 | */
41 | AdminSchema.method({
42 | transform() {
43 | const transformed = {};
44 | const fields = ['email'];
45 | fields.forEach((field) => {
46 | transformed[field] = this[field];
47 | });
48 | return transformed;
49 | },
50 |
51 | token() {
52 | const playload = {
53 | exp: moment().add(jwtExpirationInterval, 'minutes').unix(),
54 | iat: moment().unix(),
55 | sub: this._id,
56 | };
57 | return jwt.encode(playload, pwEncryptionKey);
58 | },
59 | async passwordMatches(password) {
60 | return bcrypt.compare(password, this.password);
61 | }
62 | });
63 |
64 | AdminSchema.pre('save', async function save(next) {
65 | try {
66 | if (!this.isModified('password')) return next();
67 | const rounds = pwdSaltRounds ? parseInt(pwdSaltRounds) : 10;
68 | const hash = await bcrypt.hash(this.password, rounds);
69 | this.password = hash;
70 | return next();
71 | }
72 | catch (error) {
73 | return next(error);
74 | }
75 | });
76 |
77 | /**
78 | * @typedef Admin
79 | */
80 |
81 | module.exports = mongoose.model('Admin', AdminSchema);
--------------------------------------------------------------------------------
/src/api/models-bk/cms.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | /**
4 | * CMS Schema
5 | * @private
6 | */
7 | const CMSSchema = new mongoose.Schema({
8 | title: { type: String, required: true, unique: true },
9 | slug: { type: String, required: true, unique: true },
10 | description: { type: String, required: true },
11 | status: { type: Boolean, default: false },
12 | showInFooter: { type: Boolean, default: false }
13 | }, { timestamps: true }
14 | );
15 |
16 | /**
17 | * @typedef CMS
18 | */
19 |
20 | module.exports = mongoose.model('cms', CMSSchema);
--------------------------------------------------------------------------------
/src/api/models-bk/contact.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | /**
4 | * Contact Schema
5 | * @private
6 | */
7 | const ContactSchema = new mongoose.Schema({
8 | name: { type: String },
9 | email: { type: String, required: true },
10 | country: { type: String },
11 | message: { type: String },
12 | status: { type: Number, default: 1 } // 0 == In Progress, 1 == Pending, 2 == Closed
13 | }, { timestamps: true }
14 | );
15 |
16 | /**
17 | * @typedef Contact
18 | */
19 |
20 |
21 | module.exports = mongoose.model('contact', ContactSchema);
--------------------------------------------------------------------------------
/src/api/models-bk/email.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | /**
4 | * Email Schema
5 | * @private
6 | */
7 | const EmailSchema = new mongoose.Schema({
8 | type: { type: String, required: true, unique: true },
9 | subject: { type: String, required: true },
10 | text: { type: String, required: true }
11 | }, { timestamps: true }
12 | );
13 |
14 | /**
15 | * @typedef Email
16 | */
17 |
18 | module.exports = mongoose.model('Email', EmailSchema);
--------------------------------------------------------------------------------
/src/api/models-bk/faq.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | /**
4 | * FAQ Schema
5 | * @private
6 | */
7 | const FaqSchema = new mongoose.Schema({
8 | title: { type: String, required: true, unique: true },
9 | catId: { type: mongoose.Schema.Types.ObjectId, ref: 'faq-categories', required: true },
10 | desc: { type: String, required: true, default: '' },
11 | status: { type: Boolean, default: false },
12 | }, { timestamps: true }
13 | );
14 |
15 | /**
16 | * @typedef FAQ
17 | */
18 |
19 | module.exports = mongoose.model('faq', FaqSchema);
--------------------------------------------------------------------------------
/src/api/models-bk/faqCategories.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | /**
4 | * FAQCategories Schema
5 | * @private
6 | */
7 | const FaqCategoriesSchema = new mongoose.Schema({
8 | title: { type: String, required: true, unique:true },
9 | desc: { type: String, required: true, default: ''},
10 | status: { type: Boolean, default: false},
11 | }, { timestamps: true }
12 | );
13 |
14 | /**
15 | * @typedef FAQCategories
16 | */
17 |
18 | module.exports = mongoose.model('faq-categories', FaqCategoriesSchema);
--------------------------------------------------------------------------------
/src/api/models-bk/newsletter.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | /**
4 | * Newsletter Schema
5 | * @private
6 | */
7 | const NewsletterSchema = new mongoose.Schema({
8 | email: { type: String, required: true, unique: true },
9 | ip: { type: String, required: true }
10 | }, { timestamps: true }
11 | );
12 |
13 | /**
14 | * @typedef Newsletter
15 | */
16 |
17 | module.exports = mongoose.model('Newsletter', NewsletterSchema);
--------------------------------------------------------------------------------
/src/api/models-bk/roles.model.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('mongoose');
2 |
3 | const RolesSchema = new mongoose.Schema(
4 | {
5 | title: { type: String, required: true, lowercase: true, unique: true },
6 |
7 | /** system permissions **/
8 |
9 | viewDashboard: { type: Boolean, default: false },
10 |
11 | // staff's records
12 | addStaff: { type: Boolean, default: false },
13 | editStaff: { type: Boolean, default: false },
14 | deleteStaff: { type: Boolean, default: false },
15 | viewStaff: { type: Boolean, default: false },
16 |
17 | // permissions
18 | addRole: { type: Boolean, default: false },
19 | editRole: { type: Boolean, default: false },
20 | deleteRole: { type: Boolean, default: false },
21 | viewRole: { type: Boolean, default: false },
22 |
23 | // users records
24 | addUser: { type: Boolean, default: false },
25 | editUser: { type: Boolean, default: false },
26 | deleteUser: { type: Boolean, default: false },
27 | viewUsers: { type: Boolean, default: false },
28 |
29 | // EmailTemplates
30 | viewEmailTemplates: { type: Boolean, default: false },
31 | addEmailTemplates: { type: Boolean, default: false },
32 | editEmailTemplates: { type: Boolean, default: false },
33 | deleteEmailTemplates: { type: Boolean, default: false },
34 |
35 | //FaqCategories
36 | viewFaqCategories: { type: Boolean, default: false },
37 | addFaqCategories: { type: Boolean, default: false },
38 | editFaqCategories: { type: Boolean, default: false },
39 | deleteFaqCategories: { type: Boolean, default: false },
40 |
41 | // FAQs
42 | addFaq: { type: Boolean, default: false },
43 | editFaq: { type: Boolean, default: false },
44 | deleteFaq: { type: Boolean, default: false },
45 | viewFaqs: { type: Boolean, default: false },
46 |
47 | // content
48 | viewContent: { type: Boolean, default: false },
49 | addContent: { type: Boolean, default: false },
50 | editContent: { type: Boolean, default: false },
51 | deleteContent: { type: Boolean, default: false },
52 |
53 | // contact
54 | viewContact: { type: Boolean, default: false },
55 | editContact: { type: Boolean, default: false },
56 | deleteContact: { type: Boolean, default: false },
57 |
58 | // settings
59 | viewSetting: { type: Boolean, default: false },
60 | editSetting: { type: Boolean, default: false },
61 |
62 | // newsletter/subscriptions
63 | viewNewsLetter: { type: Boolean, default: false },
64 |
65 | // status (i.e: true for active & false for in-active)
66 | status: { type: Boolean, default: false },
67 | },
68 | {
69 | timestamps: true
70 | }
71 | );
72 |
73 | RolesSchema.index({ identityNumber: 'title' });
74 |
75 | module.exports = mongoose.model("Roles", RolesSchema);
76 |
--------------------------------------------------------------------------------
/src/api/models-bk/settings.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | /**
4 | * Settings Schema
5 | * @private
6 | */
7 | const SettingsSchema = new mongoose.Schema({
8 | email: { type: String, default: '' },
9 | address: { type: String, default: '' },
10 |
11 | discord: { type: String, default: '' },
12 | twitter: { type: String, default: '' },
13 | youtube: { type: String, default: '' },
14 | instagram: { type: String, default: '' },
15 | medium: { type: String, default: '' },
16 | reddit: { type: String, default: '' },
17 | telegram: { type: String, default: '' },
18 | github: { type: String, default: '' },
19 | linkedIn: { type: String, default: '' },
20 | facebook: { type: String, default: '' },
21 |
22 | desc: { type: String, default: '' },
23 | domain: { type: String, default: '' },
24 | api: { type: String, default: '' },
25 | referrarPercentage: { type: Number },
26 | }, { timestamps: true }
27 | );
28 |
29 | /**
30 | * @typedef Settings
31 | */
32 |
33 | module.exports = mongoose.model('Settings', SettingsSchema);
--------------------------------------------------------------------------------
/src/api/models-bk/users.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const bcrypt = require('bcryptjs');
3 | const moment = require('moment-timezone');
4 | const jwt = require('jwt-simple');
5 | const {
6 | pwdSaltRounds,
7 | jwtExpirationInterval,
8 | pwEncryptionKey,
9 | uploadedImgPath
10 | } = require('../../config/vars');
11 |
12 | /**
13 | * User Schema
14 | * @private
15 | */
16 | const UserSchema = new mongoose.Schema({
17 | firstName: { type: String },
18 | lastName: { type: String },
19 | dob: { type: Date },
20 | referralKey: { type: String },
21 | refferedBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
22 | email: { type: String, required: true, lowercase: true, unique: true },
23 | password: { type: String, required: true },
24 | status: { type: Boolean, default: true },
25 | resetPasswordToken: { type: String },
26 | connectedWalletAddress: { type: String },
27 | profileImage: { type: String },
28 | bannerImage: { type: String },
29 | profileImageLocal: { type: String },
30 | bannerImageLocal: { type: String },
31 | userLevel: { type: Number, default: 0 }, //0- Basic, 1- Bronze, 2-Silver, 3- Gold, 4-Platinum
32 | userSubLevel: { type: Number }, //1,2,3
33 | userKeyStatus: { type: Number, required: true, default: 1 }, // 1- Non Verified KYC, 2- Verification Of KYC, 3- KYC Verified
34 | twoFactorTempSecret: { type: String },
35 | twoFactorEnabled: { type: Boolean, default: false },
36 | referralBonus: { type: Number, default: 0 },
37 | deletedAccount: { type: Boolean, default: false }
38 | }, { timestamps: true }
39 | );
40 |
41 | /**
42 | * Methods
43 | */
44 |
45 | UserSchema.method({
46 | verifyPassword(password) {
47 | return bcrypt.compareSync(password, this.password);
48 | },
49 | transform() {
50 | const transformed = {};
51 | const fields = ['_id', 'firstName', 'lastName', 'email', 'profileImage', 'status', 'dob', 'connectedWalletAddress', 'bannerImage', 'referralKey', 'userKeyStatus', 'refferedBy', 'referralBonus'];
52 |
53 | fields.forEach((field) => {
54 | transformed[field] = this[field];
55 | });
56 |
57 | return transformed;
58 | },
59 |
60 | token() {
61 | const playload = {
62 | exp: moment().add(jwtExpirationInterval, 'minutes').unix(),
63 | iat: moment().unix(),
64 | sub: this._id,
65 | };
66 | return jwt.encode(playload, pwEncryptionKey);
67 | },
68 | });
69 |
70 | UserSchema.pre('save', async function save(next) {
71 | try {
72 | if (!this.isModified('password')) return next();
73 | const rounds = pwdSaltRounds ? parseInt(pwdSaltRounds) : 10;
74 | const hash = await bcrypt.hash(this.password, rounds);
75 | this.password = hash;
76 | return next();
77 | }
78 | catch (error) {
79 | return next(error);
80 | }
81 | });
82 |
83 | /**
84 | * @typedef User
85 | */
86 |
87 | module.exports = mongoose.model('User', UserSchema);
--------------------------------------------------------------------------------
/src/api/models/acctivity.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class Activity extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | // Activity.hasOne(models.Users, { foreignKey: "userId" });
13 | Activity.belongsTo(models.Users, { foreignKey: "userID" });
14 | }
15 | }
16 | Activity.init(
17 | {
18 | action: DataTypes.STRING,
19 | name: DataTypes.STRING,
20 | role: DataTypes.STRING
21 | },
22 | {
23 | sequelize,
24 | modelName: "Activity",
25 | tableName: "activities",
26 | }
27 | );
28 | return Activity;
29 | };
30 |
--------------------------------------------------------------------------------
/src/api/models/applicants.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class Applicants extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | Applicants.hasOne(models.ApplicationDetails);
13 | // University.hasMany(models.Campus);
14 | }
15 | }
16 | Applicants.init(
17 | {
18 | fullName: DataTypes.STRING,
19 | email: DataTypes.STRING,
20 | phoneNumber: DataTypes.STRING,
21 | address1: DataTypes.STRING,
22 | address2: DataTypes.STRING,
23 | country: DataTypes.STRING,
24 | image: DataTypes.STRING,
25 | passportNo: DataTypes.STRING,
26 | fileUpload: DataTypes.STRING,
27 | // applicantsId: DataTypes.INTEGER
28 | },
29 | {
30 | sequelize,
31 | modelName: "Applicants",
32 | tableName: "applicants",
33 | }
34 | );
35 | return Applicants;
36 | };
37 |
--------------------------------------------------------------------------------
/src/api/models/applicationdetails.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class ApplicationDetails extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | ApplicationDetails.belongsTo(models.Applicants);
13 | ApplicationDetails.belongsTo(models.ApplicationModuleStatus, {
14 | foreignKey: "status",
15 | });
16 | ApplicationDetails.belongsTo(models.Branch, {
17 | foreignKey: "branchID",
18 | });
19 | }
20 | }
21 | ApplicationDetails.init(
22 | {
23 | applicationLevel: DataTypes.STRING,
24 | interestedProgramme: DataTypes.STRING,
25 | schoolName: DataTypes.STRING,
26 | qualificationType: DataTypes.STRING,
27 | selectUniversity: DataTypes.STRING,
28 | completionLetter: DataTypes.STRING,
29 | programmeLevel: DataTypes.STRING,
30 | healthForm: DataTypes.STRING,
31 | paymentReceipt: DataTypes.STRING,
32 | researchProposal: DataTypes.STRING,
33 | refreeForm: DataTypes.STRING,
34 | medium: DataTypes.STRING,
35 | scholorshipForm: DataTypes.STRING,
36 | otherDocuments: DataTypes.STRING,
37 | attestationLetter: DataTypes.STRING,
38 | releaseLetter: DataTypes.STRING,
39 | status: DataTypes.STRING,
40 | // applicantsId: DataTypes.INTEGER
41 | },
42 | {
43 | sequelize,
44 | modelName: "ApplicationDetails",
45 | tableName: "applicationdetails",
46 | }
47 | );
48 | return ApplicationDetails;
49 | };
50 |
--------------------------------------------------------------------------------
/src/api/models/applicationmodulestatus.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class ApplicationModuleStatus extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | ApplicationModuleStatus.hasMany(models.ApplicationDetails, {
15 | foreignKey: "status",
16 | });
17 | }
18 | }
19 | ApplicationModuleStatus.init(
20 | {
21 | ID: {
22 | type: DataTypes.INTEGER,
23 | primaryKey: true,
24 | autoIncrement: true,
25 | },
26 | createdAt: {
27 | type: DataTypes.DATE,
28 | defaultValue: DataTypes.NOW,
29 | },
30 | updatedAt: {
31 | type: DataTypes.DATE,
32 | defaultValue: DataTypes.NOW,
33 | },
34 | name: {
35 | type: DataTypes.STRING,
36 | allowNull: false,
37 | },
38 | Color: {
39 | type: DataTypes.STRING,
40 | allowNull: false,
41 | },
42 | },
43 | {
44 | sequelize,
45 | modelName: "ApplicationModuleStatus",
46 | tableName: "applicationmodulestatus",
47 | }
48 | );
49 | // const level = await ApplicationModuleStatus.findAll();
50 | return ApplicationModuleStatus;
51 | };
52 |
--------------------------------------------------------------------------------
/src/api/models/billinginfo.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class BillingInfo extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | BillingInfo.hasMany(models.CommissionInvoice, {
15 | foreignKey: "billingID",
16 | });
17 | }
18 | }
19 | BillingInfo.init(
20 | {
21 | ID: {
22 | type: DataTypes.INTEGER,
23 | primaryKey: true,
24 | autoIncrement: true,
25 | },
26 | createdAt: {
27 | type: DataTypes.DATE,
28 | defaultValue: DataTypes.NOW,
29 | },
30 | updatedAt: {
31 | type: DataTypes.DATE,
32 | defaultValue: DataTypes.NOW,
33 | },
34 | addressOne: {
35 | type: DataTypes.STRING,
36 | allowNull: false,
37 | },
38 | addressTwo: {
39 | type: DataTypes.STRING,
40 | allowNull: false,
41 | },
42 | country: {
43 | type: DataTypes.STRING,
44 | allowNull: false,
45 | },
46 | phone: {
47 | type: DataTypes.STRING,
48 | allowNull: false,
49 | },
50 | email: {
51 | type: DataTypes.STRING,
52 | allowNull: false,
53 | },
54 | },
55 | {
56 | sequelize,
57 | modelName: "BillingInfo",
58 | tableName: "BillingInfo".toLowerCase(),
59 | }
60 | );
61 | // const level = await BillingInfo.findAll();
62 | return BillingInfo;
63 | };
64 |
--------------------------------------------------------------------------------
/src/api/models/branch.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class Branch extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | Branch.hasMany(models.CommissionInvoice, {
13 | foreignKey: "branchID",
14 | });
15 | Branch.hasMany(models.ApplicationDetails, {
16 | foreignKey: "branchID",
17 | });
18 | Branch.hasMany(models.Lead, {
19 | foreignKey: "branchID",
20 | });
21 | Branch.hasMany(models.Users, {
22 | foreignKey: "branchID",
23 | });
24 | }
25 | }
26 | Branch.init(
27 | {
28 | name: DataTypes.STRING,
29 | address: DataTypes.STRING,
30 | country: DataTypes.STRING,
31 | manager: DataTypes.STRING,
32 | email: DataTypes.STRING,
33 | phone: DataTypes.STRING,
34 | role: DataTypes.STRING
35 | },
36 | {
37 | sequelize,
38 | modelName: "Branch",
39 | tableName: "branches",
40 | }
41 | );
42 | return Branch;
43 | };
44 |
--------------------------------------------------------------------------------
/src/api/models/campus.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class Campus extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | Campus.belongsTo(models.University), { foreignKey: "universityId" };
13 | }
14 | }
15 | Campus.init(
16 | {
17 | name: DataTypes.STRING,
18 | address1: DataTypes.STRING,
19 | address2: DataTypes.STRING,
20 | phone: DataTypes.INTEGER,
21 | email: DataTypes.STRING,
22 | isMain: DataTypes.BOOLEAN,
23 | },
24 | {
25 | sequelize,
26 | modelName: "Campus",
27 | tableName: "campuses",
28 | }
29 | );
30 | return Campus;
31 | };
32 |
--------------------------------------------------------------------------------
/src/api/models/commissioninvoice.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class CommissionInvoice extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | CommissionInvoice.belongsTo(models.University, {
15 | foreignKey: "universityID",
16 | });
17 | CommissionInvoice.belongsTo(models.InvoiceModuleStatus, {
18 | foreignKey: "statusID",
19 | });
20 | CommissionInvoice.belongsTo(models.Branch, {
21 | foreignKey: "branchID",
22 | });
23 | CommissionInvoice.belongsTo(models.BillingInfo, {
24 | foreignKey: "billingID",
25 | });
26 | CommissionInvoice.belongsTo(models.MailingInfo, {
27 | foreignKey: "mailingID",
28 | });
29 | CommissionInvoice.hasMany(models.CommissionInvoiceItem, {
30 | foreignKey: "invoiceID",
31 | });
32 | }
33 | }
34 | CommissionInvoice.init(
35 | {
36 | ID: {
37 | type: DataTypes.INTEGER,
38 | autoIncrement: true,
39 | allowNull: false,
40 | primaryKey: true,
41 | },
42 | itemdate: {
43 | type: DataTypes.STRING,
44 | allowNull: false,
45 | defaultValue: DataTypes.NOW,
46 | },
47 | createdAt: {
48 | type: DataTypes.DATE,
49 | defaultValue: DataTypes.NOW,
50 | },
51 | updatedAt: {
52 | type: DataTypes.DATE,
53 | defaultValue: DataTypes.NOW,
54 | },
55 | recipient: {
56 | type: DataTypes.STRING,
57 | allowNull: false,
58 | },
59 | email: {
60 | type: DataTypes.STRING,
61 | allowNull: false,
62 | defaultValue: "*@*",
63 | },
64 | service: {
65 | type: DataTypes.STRING,
66 | allowNull: true,
67 | },
68 | amount: {
69 | type: DataTypes.STRING,
70 | allowNull: true,
71 | },
72 | price: {
73 | type: DataTypes.STRING,
74 | allowNull: true,
75 | },
76 | statusID: {
77 | type: DataTypes.INTEGER,
78 | allowNull: true,
79 | defaultValue: Math.floor(Math.random() * 4 + 1),
80 | },
81 | universityID: {
82 | type: DataTypes.INTEGER,
83 | allowNull: true,
84 | defaultValue: Math.floor(Math.random() * 4 + 1),
85 | },
86 | branchID: {
87 | type: DataTypes.INTEGER,
88 | allowNull: true,
89 | defaultValue: Math.floor(Math.random() * 4 + 1),
90 | },
91 | billingID: {
92 | type: DataTypes.INTEGER,
93 | allowNull: true,
94 | defaultValue: Math.floor(Math.random() * 4 + 1),
95 | },
96 | mailingID: {
97 | type: DataTypes.INTEGER,
98 | allowNull: true,
99 | defaultValue: Math.floor(Math.random() * 4 + 1),
100 | },
101 | type: {
102 | type: DataTypes.STRING,
103 | allowNull: true,
104 | defaultValue: "commission", // or general
105 | },
106 | },
107 | {
108 | sequelize,
109 | modelName: "CommissionInvoice",
110 | tableName: "CommissionInvoice".toLowerCase(),
111 | }
112 | );
113 | // const level = await CommissionInvoice.findAll();
114 | return CommissionInvoice;
115 | };
116 |
--------------------------------------------------------------------------------
/src/api/models/commissioninvoiceitem.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class CommissionInvoiceItem extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | CommissionInvoiceItem.belongsTo(models.CommissionInvoice, {
15 | foreignKey: "invoiceID",
16 | });
17 | }
18 | }
19 | CommissionInvoiceItem.init(
20 | {
21 | ID: {
22 | type: DataTypes.INTEGER,
23 | primaryKey: true,
24 | autoIncrement: true,
25 | },
26 | createdAt: {
27 | type: DataTypes.DATE,
28 | defaultValue: DataTypes.NOW,
29 | },
30 | updatedAt: {
31 | type: DataTypes.DATE,
32 | defaultValue: DataTypes.NOW,
33 | },
34 | name: {
35 | type: DataTypes.STRING,
36 | allowNull: false,
37 | defaultValue: "",
38 | },
39 | price: {
40 | type: DataTypes.STRING,
41 | allowNull: false,
42 | defaultValue: "",
43 | },
44 | quantity: {
45 | type: DataTypes.STRING,
46 | allowNull: false,
47 | defaultValue: "",
48 | },
49 | total: {
50 | type: DataTypes.STRING,
51 | allowNull: false,
52 | defaultValue: "",
53 | },
54 | invoiceID: {
55 | type: DataTypes.INTEGER,
56 | allowNull: false,
57 | defaultValue: 0,
58 | },
59 | },
60 | {
61 | sequelize,
62 | modelName: "CommissionInvoiceItem",
63 | tableName: "CommissionInvoiceItem".toLowerCase(),
64 | }
65 | );
66 | // const level = await CommissionInvoiceItem.findAll();
67 | return CommissionInvoiceItem;
68 | };
69 |
--------------------------------------------------------------------------------
/src/api/models/costofsales.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class CostOfSales extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | }
15 | }
16 | CostOfSales.init(
17 | {
18 | ID: {
19 | type: DataTypes.INTEGER,
20 | primaryKey: true,
21 | autoIncrement: true,
22 | },
23 | createdAt: {
24 | type: DataTypes.DATE,
25 | defaultValue: DataTypes.NOW,
26 | },
27 | updatedAt: {
28 | type: DataTypes.DATE,
29 | defaultValue: DataTypes.NOW,
30 | },
31 | name: {
32 | type: DataTypes.STRING,
33 | allowNull: false,
34 | },
35 | description: {
36 | type: DataTypes.STRING,
37 | allowNull: false,
38 | },
39 | amount: {
40 | type: DataTypes.STRING,
41 | allowNull: false,
42 | },
43 | date: {
44 | type: DataTypes.DATE,
45 | allowNull: false,
46 | defaultValue: DataTypes.NOW,
47 | },
48 | statusID: {
49 | type: DataTypes.INTEGER,
50 | defaultValue: DataTypes.NOW,
51 | },
52 | },
53 | {
54 | sequelize,
55 | modelName: "CostOfSales",
56 | tableName: "CostOfSales".toLowerCase(),
57 | }
58 | );
59 | // const level = await CostOfSales.findAll();
60 | return CostOfSales;
61 | };
62 |
--------------------------------------------------------------------------------
/src/api/models/currency.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class Currency extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | }
13 | }
14 | Currency.init(
15 | {
16 | name: DataTypes.STRING,
17 | iso: DataTypes.STRING,
18 | exRate: DataTypes.INTEGER,
19 | status: DataTypes.INTEGER,
20 | },
21 | {
22 | sequelize,
23 | modelName: "Currency",
24 | tableName: "currencies",
25 | }
26 | );
27 | return Currency;
28 | };
29 |
--------------------------------------------------------------------------------
/src/api/models/depitandcredit.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class DepitAndCredit extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | }
15 | }
16 | DepitAndCredit.init(
17 | {
18 | ID: {
19 | type: DataTypes.INTEGER,
20 | primaryKey: true,
21 | autoIncrement: true,
22 | },
23 | createdAt: {
24 | type: DataTypes.DATE,
25 | defaultValue: DataTypes.NOW,
26 | },
27 | updatedAt: {
28 | type: DataTypes.DATE,
29 | defaultValue: DataTypes.NOW,
30 | },
31 | name: {
32 | type: DataTypes.STRING,
33 | allowNull: false,
34 | },
35 | description: {
36 | type: DataTypes.STRING,
37 | allowNull: false,
38 | },
39 | amount: {
40 | type: DataTypes.STRING,
41 | allowNull: false,
42 | },
43 | type: {
44 | type: DataTypes.INTEGER,
45 | allowNull: false,
46 | defaultValue: 0,
47 | },
48 | date: {
49 | type: DataTypes.DATE,
50 | allowNull: false,
51 | defaultValue: DataTypes.NOW,
52 | },
53 | },
54 | {
55 | sequelize,
56 | modelName: "DepitAndCredit",
57 | tableName: "DepitAndCredit".toLowerCase(),
58 | }
59 | );
60 | // const level = await DepitAndCredit.findAll();
61 | return DepitAndCredit;
62 | };
63 |
--------------------------------------------------------------------------------
/src/api/models/expenses.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class Expenses extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | }
15 | }
16 | Expenses.init(
17 | {
18 | ID: {
19 | type: DataTypes.INTEGER,
20 | primaryKey: true,
21 | autoIncrement: true,
22 | },
23 | createdAt: {
24 | type: DataTypes.DATE,
25 | defaultValue: DataTypes.NOW,
26 | },
27 | updatedAt: {
28 | type: DataTypes.DATE,
29 | defaultValue: DataTypes.NOW,
30 | },
31 | name: {
32 | type: DataTypes.STRING,
33 | allowNull: false,
34 | },
35 | description: {
36 | type: DataTypes.STRING,
37 | allowNull: false,
38 | },
39 | amount: {
40 | type: DataTypes.STRING,
41 | allowNull: false,
42 | },
43 | date: {
44 | type: DataTypes.DATE,
45 | allowNull: false,
46 | defaultValue: DataTypes.NOW,
47 | },
48 | statusID: {
49 | type: DataTypes.INTEGER,
50 | defaultValue: DataTypes.NOW,
51 | },
52 | },
53 | {
54 | sequelize,
55 | modelName: "Expenses",
56 | tableName: "Expenses".toLowerCase(),
57 | }
58 | );
59 | // const level = await Expenses.findAll();
60 | return Expenses;
61 | };
62 |
--------------------------------------------------------------------------------
/src/api/models/generalinvoice.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class GeneralInvoice extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | GeneralInvoice.belongsTo(models.University, {
15 | foreignKey: "universityID",
16 | });
17 | GeneralInvoice.belongsTo(models.InvoiceModuleStatus, {
18 | foreignKey: "statusID",
19 | });
20 | GeneralInvoice.belongsTo(models.Branch, {
21 | foreignKey: "branchID",
22 | });
23 | GeneralInvoice.belongsTo(models.BillingInfo, {
24 | foreignKey: "billingID",
25 | });
26 | GeneralInvoice.belongsTo(models.MailingInfo, {
27 | foreignKey: "mailingID",
28 | });
29 | GeneralInvoice.hasMany(models.GeneralInvoiceItem, {
30 | foreignKey: "invoiceID",
31 | });
32 | }
33 | }
34 | GeneralInvoice.init(
35 | {
36 | ID: {
37 | type: DataTypes.INTEGER,
38 | autoIncrement: true,
39 | allowNull: false,
40 | primaryKey: true,
41 | },
42 | itemdate: {
43 | type: DataTypes.STRING,
44 | allowNull: false,
45 | defaultValue: DataTypes.NOW,
46 | },
47 | createdAt: {
48 | type: DataTypes.DATE,
49 | defaultValue: DataTypes.NOW,
50 | },
51 | updatedAt: {
52 | type: DataTypes.DATE,
53 | defaultValue: DataTypes.NOW,
54 | },
55 | recipient: {
56 | type: DataTypes.STRING,
57 | allowNull: false,
58 | },
59 | email: {
60 | type: DataTypes.STRING,
61 | allowNull: false,
62 | defaultValue: "*@*",
63 | },
64 | service: {
65 | type: DataTypes.STRING,
66 | allowNull: true,
67 | defaultValue: "",
68 | },
69 | amount: {
70 | type: DataTypes.STRING,
71 | allowNull: true,
72 | defaultValue: "",
73 | },
74 | price: {
75 | type: DataTypes.STRING,
76 | allowNull: true,
77 | defaultValue: "",
78 | },
79 | statusID: {
80 | type: DataTypes.INTEGER,
81 | allowNull: true,
82 | defaultValue: Math.floor(Math.random() * 4 + 1),
83 | },
84 | universityID: {
85 | type: DataTypes.INTEGER,
86 | allowNull: true,
87 | defaultValue: Math.floor(Math.random() * 4 + 1),
88 | },
89 | branchID: {
90 | type: DataTypes.INTEGER,
91 | allowNull: true,
92 | defaultValue: Math.floor(Math.random() * 4 + 1),
93 | },
94 | billingID: {
95 | type: DataTypes.INTEGER,
96 | allowNull: true,
97 | defaultValue: Math.floor(Math.random() * 4 + 1),
98 | },
99 | mailingID: {
100 | type: DataTypes.INTEGER,
101 | allowNull: true,
102 | defaultValue: Math.floor(Math.random() * 4 + 1),
103 | },
104 | type: {
105 | type: DataTypes.STRING,
106 | allowNull: true,
107 | defaultValue: "general", // or general
108 | },
109 | },
110 | {
111 | sequelize,
112 | modelName: "GeneralInvoice",
113 | tableName: "GeneralInvoice".toLowerCase(),
114 | }
115 | );
116 | // const level = await GeneralInvoice.findAll();
117 | return GeneralInvoice;
118 | };
119 |
--------------------------------------------------------------------------------
/src/api/models/generalinvoiceitem.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class GeneralInvoiceItem extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | GeneralInvoiceItem.belongsTo(models.GeneralInvoice, {
15 | foreignKey: "invoiceID",
16 | });
17 | }
18 | }
19 | GeneralInvoiceItem.init(
20 | {
21 | ID: {
22 | type: DataTypes.INTEGER,
23 | primaryKey: true,
24 | autoIncrement: true,
25 | },
26 | createdAt: {
27 | type: DataTypes.DATE,
28 | defaultValue: DataTypes.NOW,
29 | },
30 | updatedAt: {
31 | type: DataTypes.DATE,
32 | defaultValue: DataTypes.NOW,
33 | },
34 | name: {
35 | type: DataTypes.STRING,
36 | allowNull: false,
37 | defaultValue: "",
38 | },
39 | price: {
40 | type: DataTypes.STRING,
41 | allowNull: false,
42 | defaultValue: "",
43 | },
44 | quantity: {
45 | type: DataTypes.STRING,
46 | allowNull: false,
47 | defaultValue: "",
48 | },
49 | total: {
50 | type: DataTypes.STRING,
51 | allowNull: false,
52 | defaultValue: "",
53 | },
54 | invoiceID: {
55 | type: DataTypes.INTEGER,
56 | allowNull: false,
57 | defaultValue: 0,
58 | },
59 | },
60 | {
61 | sequelize,
62 | modelName: "GeneralInvoiceItem",
63 | tableName: "GeneralInvoiceItem".toLowerCase(),
64 | }
65 | );
66 | // const level = await GeneralInvoiceItem.findAll();
67 | return GeneralInvoiceItem;
68 | };
69 |
--------------------------------------------------------------------------------
/src/api/models/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const fs = require("fs");
4 | const path = require("path");
5 | const Sequelize = require("sequelize");
6 | const process = require("process");
7 | const basename = path.basename(__filename);
8 | const env = process.env.NODE_ENV || "development";
9 | const config = require(__dirname + "../../../../config/config.json")[env];
10 | const db = {};
11 |
12 | let sequelize;
13 | if (config.use_env_variable) {
14 | sequelize = new Sequelize(process.env[config.use_env_variable], config);
15 | } else {
16 | sequelize = new Sequelize(
17 | config.database,
18 | config.username,
19 | config.password,
20 | config
21 | );
22 | }
23 |
24 | fs.readdirSync(__dirname)
25 | .filter((file) => {
26 | return (
27 | file.indexOf(".") !== 0 &&
28 | file !== basename &&
29 | file.slice(-3) === ".js" &&
30 | file.indexOf(".test.js") === -1
31 | );
32 | })
33 | .forEach((file) => {
34 | const model = require(path.join(__dirname, file))(
35 | sequelize,
36 | Sequelize.DataTypes
37 | );
38 | db[model.name] = model;
39 | });
40 |
41 | Object.keys(db).forEach((modelName) => {
42 | if (db[modelName].associate) {
43 | db[modelName].associate(db);
44 | }
45 | });
46 |
47 | db.sequelize = sequelize;
48 | db.Sequelize = Sequelize;
49 |
50 | module.exports = db;
51 |
--------------------------------------------------------------------------------
/src/api/models/interestedprogram.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class InterestedProgram extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | }
15 | }
16 | InterestedProgram.init(
17 | {
18 | ID: {
19 | type: DataTypes.INTEGER,
20 | primaryKey: true,
21 | autoIncrement: true,
22 | },
23 | createdAt: {
24 | type: DataTypes.DATE,
25 | defaultValue: DataTypes.NOW,
26 | },
27 | updatedAt: {
28 | type: DataTypes.DATE,
29 | defaultValue: DataTypes.NOW,
30 | },
31 | name: {
32 | type: DataTypes.STRING,
33 | allowNull: false,
34 | },
35 | Color: {
36 | type: DataTypes.STRING,
37 | allowNull: false,
38 | },
39 | },
40 | {
41 | sequelize,
42 | modelName: "InterestedProgram",
43 | tableName: "interestedprogram",
44 | }
45 | );
46 | // const level = await InterestedProgram.findAll();
47 | return InterestedProgram;
48 | };
49 |
--------------------------------------------------------------------------------
/src/api/models/invoicemodulestatus.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class InvoiceModuleStatus extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | InvoiceModuleStatus.hasMany(models.CommissionInvoice, {
15 | foreignKey: "statusID",
16 | });
17 | }
18 | }
19 | InvoiceModuleStatus.init(
20 | {
21 | ID: {
22 | type: DataTypes.INTEGER,
23 | primaryKey: true,
24 | autoIncrement: true,
25 | },
26 | createdAt: {
27 | type: DataTypes.DATE,
28 | defaultValue: DataTypes.NOW,
29 | },
30 | updatedAt: {
31 | type: DataTypes.DATE,
32 | defaultValue: DataTypes.NOW,
33 | },
34 | name: {
35 | type: DataTypes.STRING,
36 | allowNull: false,
37 | },
38 | Color: {
39 | type: DataTypes.STRING,
40 | allowNull: false,
41 | },
42 | },
43 | {
44 | sequelize,
45 | modelName: "InvoiceModuleStatus",
46 | tableName: "InvoiceModuleStatus".toLowerCase(),
47 | }
48 | );
49 | // const level = await InvoiceModuleStatus.findAll();
50 | return InvoiceModuleStatus;
51 | };
52 |
--------------------------------------------------------------------------------
/src/api/models/lead.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class Lead extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | Lead.hasOne(models.ProgrameDetails, {
13 | foreignKey: "leadId",
14 | as: "ProgrameDetail",
15 | });
16 | Lead.belongsTo(models.Branch, {
17 | foreignKey: "branchID",
18 | });
19 | Lead.belongsTo(models.Programme, {
20 | foreignKey: "programID",
21 | });
22 | Lead.belongsTo(models.LeadsManagmentModuleStatus, {
23 | foreignKey: "statusID",
24 | });
25 | Lead.belongsTo(models.University, {
26 | foreignKey: "universityID",
27 | });
28 | }
29 | }
30 | Lead.init(
31 | {
32 | image: DataTypes.STRING,
33 | name: DataTypes.STRING,
34 | passportNo: DataTypes.INTEGER,
35 | leadGroup: DataTypes.STRING,
36 | country: DataTypes.STRING,
37 | phoneNo: DataTypes.STRING,
38 | email: DataTypes.STRING,
39 | refferalName: DataTypes.STRING,
40 | refferalEmail: DataTypes.STRING,
41 | programID: {
42 | type: DataTypes.INTEGER,
43 | allowNull: true,
44 | defaultValue: Math.floor(Math.random() * 4 + 1),
45 | },
46 | universityID: {
47 | type: DataTypes.INTEGER,
48 | allowNull: true,
49 | defaultValue: Math.floor(Math.random() * 4 + 1),
50 | },
51 | branchID: {
52 | type: DataTypes.INTEGER,
53 | allowNull: true,
54 | defaultValue: Math.floor(Math.random() * 4 + 1),
55 | },
56 | statusID: {
57 | type: DataTypes.INTEGER,
58 | allowNull: true,
59 | defaultValue: Math.floor(Math.random() * 4 + 1),
60 | },
61 | },
62 | {
63 | sequelize,
64 | modelName: "Lead",
65 | tableName: "leads",
66 | }
67 | );
68 | return Lead;
69 | };
70 |
--------------------------------------------------------------------------------
/src/api/models/leadgroup.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class LeadGroup extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | }
15 | }
16 | LeadGroup.init(
17 | {
18 | ID: {
19 | type: DataTypes.INTEGER,
20 | primaryKey: true,
21 | autoIncrement: true,
22 | },
23 | createdAt: {
24 | type: DataTypes.DATE,
25 | defaultValue: DataTypes.NOW,
26 | },
27 | updatedAt: {
28 | type: DataTypes.DATE,
29 | defaultValue: DataTypes.NOW,
30 | },
31 | name: {
32 | type: DataTypes.STRING,
33 | allowNull: false,
34 | },
35 | Color: {
36 | type: DataTypes.STRING,
37 | allowNull: false,
38 | },
39 | },
40 | {
41 | sequelize,
42 | modelName: "LeadGroup",
43 | tableName: "leadgroup",
44 | }
45 | );
46 | // const level = await LeadGroup.findAll();
47 | return LeadGroup;
48 | };
49 |
--------------------------------------------------------------------------------
/src/api/models/leadsmanagmentmodulestatus.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class LeadsManagmentModuleStatus extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | // LeadsManagmentModuleStatus.belongsTo(models.ProgrameDetails, {
15 | // foreignKey: "I",
16 | // });
17 | // }
18 | LeadsManagmentModuleStatus.hasMany(models.ProgrameDetails, {
19 | foreignKey: "status",
20 | });
21 | // edits
22 | LeadsManagmentModuleStatus.hasMany(models.Lead, {
23 | foreignKey: "statusID",
24 | });
25 | //
26 | // LeadsManagmentModuleStatus.belongsToMany(models.ProgrameDetails, {
27 | // foreignKey: "status",
28 | // });
29 | }
30 | }
31 | LeadsManagmentModuleStatus.init(
32 | {
33 | ID: {
34 | type: DataTypes.INTEGER,
35 | primaryKey: true,
36 | autoIncrement: true,
37 | },
38 | createdAt: {
39 | type: DataTypes.DATE,
40 | defaultValue: DataTypes.NOW,
41 | },
42 | updatedAt: {
43 | type: DataTypes.DATE,
44 | defaultValue: DataTypes.NOW,
45 | },
46 | name: {
47 | type: DataTypes.STRING,
48 | allowNull: false,
49 | },
50 | Color: {
51 | type: DataTypes.STRING,
52 | allowNull: false,
53 | },
54 | },
55 | {
56 | sequelize,
57 | modelName: "LeadsManagmentModuleStatus",
58 | tableName: "LeadsManagmentModuleStatus".toLowerCase(),
59 | }
60 | );
61 | // const level = await LeadsManagmentModuleStatus.findAll();
62 | return LeadsManagmentModuleStatus;
63 | };
64 |
--------------------------------------------------------------------------------
/src/api/models/mailinginfo.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class MailingInfo extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | MailingInfo.hasMany(models.CommissionInvoice, {
15 | foreignKey: "mailingID",
16 | });
17 | }
18 | }
19 | MailingInfo.init(
20 | {
21 | ID: {
22 | type: DataTypes.INTEGER,
23 | primaryKey: true,
24 | autoIncrement: true,
25 | },
26 | createdAt: {
27 | type: DataTypes.DATE,
28 | defaultValue: DataTypes.NOW,
29 | },
30 | updatedAt: {
31 | type: DataTypes.DATE,
32 | defaultValue: DataTypes.NOW,
33 | },
34 | addressOne: {
35 | type: DataTypes.STRING,
36 | allowNull: false,
37 | },
38 | addressTwo: {
39 | type: DataTypes.STRING,
40 | allowNull: false,
41 | },
42 | country: {
43 | type: DataTypes.STRING,
44 | allowNull: false,
45 | },
46 | phone: {
47 | type: DataTypes.STRING,
48 | allowNull: false,
49 | },
50 | email: {
51 | type: DataTypes.STRING,
52 | allowNull: false,
53 | },
54 | },
55 | {
56 | sequelize,
57 | modelName: "MailingInfo",
58 | tableName: "MailingInfo".toLowerCase(),
59 | }
60 | );
61 | // const level = await MailingInfo.findAll();
62 | return MailingInfo;
63 | };
64 |
--------------------------------------------------------------------------------
/src/api/models/programcategory.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class ProgramCategory extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | }
15 | }
16 | ProgramCategory.init(
17 | {
18 | ID: {
19 | type: DataTypes.INTEGER,
20 | primaryKey: true,
21 | autoIncrement: true,
22 | },
23 | createdAt: {
24 | type: DataTypes.DATE,
25 | defaultValue: DataTypes.NOW,
26 | },
27 | updatedAt: {
28 | type: DataTypes.DATE,
29 | defaultValue: DataTypes.NOW,
30 | },
31 | name: {
32 | type: DataTypes.STRING,
33 | allowNull: false,
34 | },
35 | Color: {
36 | type: DataTypes.STRING,
37 | allowNull: false,
38 | },
39 | },
40 | {
41 | sequelize,
42 | modelName: "ProgramCategory",
43 | tableName: "programcategory",
44 | }
45 | );
46 | // const level = await ProgramCategory.findAll();
47 | return ProgramCategory;
48 | };
49 |
--------------------------------------------------------------------------------
/src/api/models/programedetails.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class ProgrameDetails extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | ProgrameDetails.belongsTo(models.LeadsManagmentModuleStatus, {
13 | foreignKey: "status",
14 | });
15 | ProgrameDetails.belongsTo(models.Lead, {
16 | foreignKey: "leadId",
17 | as: "ProgrameDetail",
18 | });
19 | // ProgrameDetails.belongsTo(models.LeadsManagmentModuleStatus);
20 | // ProgrameDetails.hasOne(models.LeadsManagmentModuleStatus);
21 | }
22 | }
23 | ProgrameDetails.init(
24 | {
25 | schoolName: DataTypes.STRING,
26 | qualificationType: DataTypes.STRING,
27 | selectUniversity: DataTypes.STRING,
28 | interestedProgramme: DataTypes.STRING,
29 | // status: DataTypes.STRING,
30 | // status: DataTypes.INTEGER, // Add this line
31 | cert: DataTypes.STRING,
32 | comments: DataTypes.STRING,
33 | },
34 | {
35 | sequelize,
36 | modelName: "ProgrameDetails",
37 | tableName: "programedetails",
38 | }
39 | );
40 | return ProgrameDetails;
41 | };
42 |
--------------------------------------------------------------------------------
/src/api/models/programlevel.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class ProgramLevel extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | ProgramLevel.hasMany(models.Programme, {
15 | foreignKey: "programmeLevel",
16 | });
17 | }
18 | }
19 | ProgramLevel.init(
20 | {
21 | ID: {
22 | type: DataTypes.INTEGER,
23 | primaryKey: true,
24 | autoIncrement: true,
25 | },
26 | createdAt: {
27 | type: DataTypes.DATE,
28 | defaultValue: DataTypes.NOW,
29 | },
30 | updatedAt: {
31 | type: DataTypes.DATE,
32 | defaultValue: DataTypes.NOW,
33 | },
34 | name: {
35 | type: DataTypes.STRING,
36 | allowNull: false,
37 | },
38 | },
39 | {
40 | sequelize,
41 | modelName: "ProgramLevel",
42 | tableName: "programlevel",
43 | }
44 | );
45 | // const level = await ProgramLevel.findAll();
46 | return ProgramLevel;
47 | };
48 |
--------------------------------------------------------------------------------
/src/api/models/programme.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | module.exports = (sequelize, DataTypes) => {
5 | class Programme extends Model {
6 | /**
7 | * Helper method for defining associations.
8 | * This method is not a part of Sequelize lifecycle.
9 | * The `models/index` file will call this method automatically.
10 | */
11 | static associate(models) {
12 | // define association here
13 | Programme.hasMany(models.Lead, {
14 | foreignKey: "programID",
15 | });
16 | Programme.belongsTo(models.ProgramLevel, {
17 | foreignKey: "programmeLevel",
18 | });
19 | }
20 | }
21 | Programme.init(
22 | {
23 | name: DataTypes.STRING,
24 | selectUniversity: DataTypes.STRING,
25 | programmeLevel: DataTypes.STRING,
26 | programmeIntake: DataTypes.STRING,
27 | programmeDuration: DataTypes.STRING,
28 | programmeCategory: DataTypes.STRING,
29 | tutionFee: DataTypes.INTEGER,
30 | otherFee: DataTypes.INTEGER,
31 | engRequirement: DataTypes.STRING,
32 | entryRequirement: DataTypes.STRING,
33 | },
34 | {
35 | sequelize,
36 | modelName: "Programme",
37 | tableName: "programmes",
38 | }
39 | );
40 | return Programme;
41 | };
42 |
--------------------------------------------------------------------------------
/src/api/models/property.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class Property extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | }
13 | }
14 | Property.init(
15 | {
16 | //4 program level 5 Program Category 6 Qualificaton type 7 university type 8 LeadGroup 9 intreseted program
17 | type: DataTypes.INTEGER, //1 application status //2 lead status 3 invoice status
18 | property: DataTypes.STRING,
19 | },
20 | {
21 | sequelize,
22 | modelName: "Property",
23 | tableName: "properties",
24 | }
25 | );
26 | return Property;
27 | };
28 |
--------------------------------------------------------------------------------
/src/api/models/qualificationtype.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class QualificationType extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | }
15 | }
16 | QualificationType.init(
17 | {
18 | ID: {
19 | type: DataTypes.INTEGER,
20 | primaryKey: true,
21 | autoIncrement: true,
22 | },
23 | createdAt: {
24 | type: DataTypes.DATE,
25 | defaultValue: DataTypes.NOW,
26 | },
27 | updatedAt: {
28 | type: DataTypes.DATE,
29 | defaultValue: DataTypes.NOW,
30 | },
31 | name: {
32 | type: DataTypes.STRING,
33 | allowNull: false,
34 | },
35 | Color: {
36 | type: DataTypes.STRING,
37 | allowNull: false,
38 | },
39 | },
40 | {
41 | sequelize,
42 | modelName: "QualificationType",
43 | tableName: "qualificationtype",
44 | }
45 | );
46 | // const level = await QualificationType.findAll();
47 | return QualificationType;
48 | };
49 |
--------------------------------------------------------------------------------
/src/api/models/roles.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class Roles extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | // Roles.hasMany(models.Users);
13 | }
14 | }
15 |
16 | Roles.init(
17 | {
18 | title: {
19 | type: DataTypes.STRING,
20 | allowNull: false,
21 | unique: true,
22 | },
23 |
24 | addUni: { type: DataTypes.BOOLEAN, defaultValue: false },
25 | editUni: { type: DataTypes.BOOLEAN, defaultValue: false },
26 | deleteUni: { type: DataTypes.BOOLEAN, defaultValue: false },
27 | viewUni: { type: DataTypes.BOOLEAN, defaultValue: false },
28 |
29 | addUProgram: { type: DataTypes.BOOLEAN, defaultValue: false },
30 | editUProgram: { type: DataTypes.BOOLEAN, defaultValue: false },
31 | deleteUProgram: { type: DataTypes.BOOLEAN, defaultValue: false },
32 | viewUProgram: { type: DataTypes.BOOLEAN, defaultValue: false },
33 |
34 | addLeads: { type: DataTypes.BOOLEAN, defaultValue: false },
35 | editLeads: { type: DataTypes.BOOLEAN, defaultValue: false },
36 | deleteLeads: { type: DataTypes.BOOLEAN, defaultValue: false },
37 | viewLeads: { type: DataTypes.BOOLEAN, defaultValue: false },
38 |
39 | addApplication: { type: DataTypes.BOOLEAN, defaultValue: false },
40 | editApplication: { type: DataTypes.BOOLEAN, defaultValue: false },
41 | deleteApplication: { type: DataTypes.BOOLEAN, defaultValue: false },
42 | viewApplication: { type: DataTypes.BOOLEAN, defaultValue: false },
43 |
44 | addApplicationStatus: { type: DataTypes.BOOLEAN, defaultValue: false },
45 | editApplicationStatus: { type: DataTypes.BOOLEAN, defaultValue: false },
46 | deleteApplicationStatus: { type: DataTypes.BOOLEAN, defaultValue: false },
47 | viewApplicationStatus: { type: DataTypes.BOOLEAN, defaultValue: false },
48 |
49 | addInvCommission: { type: DataTypes.BOOLEAN, defaultValue: false },
50 | editInvCommission: { type: DataTypes.BOOLEAN, defaultValue: false },
51 | deleteInvCommission: { type: DataTypes.BOOLEAN, defaultValue: false },
52 | viewInvCommission: { type: DataTypes.BOOLEAN, defaultValue: false },
53 |
54 | addInvGeneral: { type: DataTypes.BOOLEAN, defaultValue: false },
55 | editInvGeneral: { type: DataTypes.BOOLEAN, defaultValue: false },
56 | deleteInvGeneral: { type: DataTypes.BOOLEAN, defaultValue: false },
57 | viewInvGeneral: { type: DataTypes.BOOLEAN, defaultValue: false },
58 |
59 | addAccounting: { type: DataTypes.BOOLEAN, defaultValue: false },
60 | editAccounting: { type: DataTypes.BOOLEAN, defaultValue: false },
61 | deleteAccounting: { type: DataTypes.BOOLEAN, defaultValue: false },
62 | viewAccounting: { type: DataTypes.BOOLEAN, defaultValue: false },
63 |
64 | // title: DataTypes.STRING
65 | },
66 | {
67 | sequelize,
68 | modelName: "Roles",
69 | tableName: "roles",
70 | }
71 | );
72 | return Roles;
73 | };
74 |
--------------------------------------------------------------------------------
/src/api/models/sales.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class Sales extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | }
15 | }
16 | Sales.init(
17 | {
18 | ID: {
19 | type: DataTypes.INTEGER,
20 | primaryKey: true,
21 | autoIncrement: true,
22 | },
23 | createdAt: {
24 | type: DataTypes.DATE,
25 | defaultValue: DataTypes.NOW,
26 | },
27 | updatedAt: {
28 | type: DataTypes.DATE,
29 | defaultValue: DataTypes.NOW,
30 | },
31 | name: {
32 | type: DataTypes.STRING,
33 | allowNull: false,
34 | },
35 | description: {
36 | type: DataTypes.STRING,
37 | allowNull: false,
38 | },
39 | amount: {
40 | type: DataTypes.STRING,
41 | allowNull: false,
42 | },
43 | date: {
44 | type: DataTypes.DATE,
45 | allowNull: false,
46 | defaultValue: DataTypes.NOW,
47 | },
48 | statusID: {
49 | type: DataTypes.INTEGER,
50 | defaultValue: DataTypes.NOW,
51 | },
52 | },
53 | {
54 | sequelize,
55 | modelName: "Sales",
56 | tableName: "Sales".toLowerCase(),
57 | }
58 | );
59 | // const level = await Sales.findAll();
60 | return Sales;
61 | };
62 |
--------------------------------------------------------------------------------
/src/api/models/university.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class University extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | University.hasMany(models.Campus);
13 | University.hasMany(models.CommissionInvoice, {
14 | foreignKey: "universityID",
15 | });
16 | University.hasMany(models.Lead, {
17 | foreignKey: "universityID",
18 | });
19 | }
20 | }
21 | University.init(
22 | {
23 | logo: DataTypes.STRING,
24 | name: DataTypes.STRING,
25 | type: DataTypes.INTEGER,
26 | counserllerName: DataTypes.STRING,
27 | phone: DataTypes.STRING,
28 | email: DataTypes.STRING,
29 | visaAppFee: DataTypes.INTEGER,
30 | addmissionFee: DataTypes.INTEGER,
31 | qetcFee: DataTypes.INTEGER,
32 | commisionDuration: DataTypes.STRING,
33 | },
34 | {
35 | sequelize,
36 | modelName: "University",
37 | tableName: "universities",
38 | }
39 | );
40 | return University;
41 | };
42 |
--------------------------------------------------------------------------------
/src/api/models/universitytype.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const { Model } = require("sequelize");
4 | // const Sequelize = require("sequelize");
5 | module.exports = (sequelize, DataTypes) => {
6 | class UniversityType extends Model {
7 | /**
8 | * Helper method for defining associations.
9 | * This method is not a part of Sequelize lifecycle.
10 | * The `models/index` file will call this method automatically.
11 | */
12 | static associate(models) {
13 | // define association here
14 | }
15 | }
16 | UniversityType.init(
17 | {
18 | ID: {
19 | type: DataTypes.INTEGER,
20 | primaryKey: true,
21 | autoIncrement: true,
22 | },
23 | createdAt: {
24 | type: DataTypes.DATE,
25 | defaultValue: DataTypes.NOW,
26 | },
27 | updatedAt: {
28 | type: DataTypes.DATE,
29 | defaultValue: DataTypes.NOW,
30 | },
31 | name: {
32 | type: DataTypes.STRING,
33 | allowNull: false,
34 | },
35 | Color: {
36 | type: DataTypes.STRING,
37 | allowNull: false,
38 | },
39 | },
40 | {
41 | sequelize,
42 | modelName: "UniversityType",
43 | tableName: "universitytype",
44 | }
45 | );
46 | // const level = await UniversityType.findAll();
47 | return UniversityType;
48 | };
49 |
--------------------------------------------------------------------------------
/src/api/models/user.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class User extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | User.belongsTo(models.Activity), { foreignKey: "userId" };
13 | }
14 | }
15 | User.init(
16 | {
17 | firstName: DataTypes.STRING,
18 | lastName: DataTypes.STRING,
19 | email: DataTypes.STRING,
20 | },
21 | {
22 | sequelize,
23 | modelName: "User",
24 | tableName: "uusers",
25 | }
26 | );
27 | return User;
28 | };
29 |
--------------------------------------------------------------------------------
/src/api/models/users.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Model } = require("sequelize");
3 | module.exports = (sequelize, DataTypes) => {
4 | class Users extends Model {
5 | /**
6 | * Helper method for defining associations.
7 | * This method is not a part of Sequelize lifecycle.
8 | * The `models/index` file will call this method automatically.
9 | */
10 | static associate(models) {
11 | // define association here
12 | // Users.belongsTo(models.Activity), { foreignKey: "userId" };
13 | // Users.belongsTo(models.Roles), { foreignKey: "roleId" };
14 | Users.belongsTo(models.Branch, { foreignKey: "branchID" });
15 | Users.hasMany(models.Activity, {
16 | foreignKey: "userID",
17 | });
18 | }
19 | }
20 | Users.init(
21 | {
22 | name: DataTypes.STRING,
23 | email: DataTypes.STRING,
24 | [`number`]: DataTypes.STRING,
25 | role: DataTypes.STRING,
26 | branch: DataTypes.STRING,
27 | position: DataTypes.STRING,
28 | date: DataTypes.STRING,
29 | password: DataTypes.STRING,
30 | image: DataTypes.STRING
31 | },
32 | {
33 | sequelize,
34 | modelName: "Users",
35 | tableName: "users",
36 | }
37 | );
38 | return Users;
39 | };
40 |
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/activity.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/admin/activity.controller')
4 |
5 | router.route('/list').get(controller.list)
6 |
7 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/admin.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/admin/admin.controller')
4 | const { cpUpload,uploadSingle,uploadContentImage } = require('../../../utils/upload')
5 | const { validationOptions } = require('../../../middlewares/error')
6 |
7 |
8 | router.route('/login').post(controller.login)
9 | router.route('/create').post(cpUpload, controller.create)
10 | router.route('/edit').put(cpUpload, controller.edit)
11 | router.route('/delete/:adminId').delete(controller.delete)
12 | router.route('/get/:adminId').get(controller.get)
13 | router.route('/list').get(controller.list)
14 | router.route('/edit-password').put(cpUpload, controller.editPassword)
15 | router.route('/forgot-password').post(controller.forgotPassword)
16 | router.route('/reset-password').put(cpUpload, controller.resetPassword)
17 | router.route('/dashboard').get(controller.dashboard)
18 | router.route('/verify-admin-password').post(controller.verify)
19 | router.route('/private-admin').get(controller.privateAdmin)
20 | router.route('/private-admin/create-private-admin').post(controller.createPrivateAdmin)
21 | router.route('/upload-image').post(uploadSingle,controller.imageUpload);
22 | router.route('/test-route').post(controller.testRoute)
23 | router.route('/upload-content').post(uploadContentImage,controller.uploadContent);
24 |
25 |
26 |
27 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/cms.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/admin/cms.controller')
4 | const { cpUpload } = require('../../../utils/upload')
5 |
6 | router.route('/create').post(cpUpload, controller.create)
7 | router.route('/edit').put(cpUpload, controller.edit)
8 | router.route('/delete/:contentId').delete(controller.delete)
9 | router.route('/get/:contentId').get(controller.get)
10 | router.route('/list').post(controller.list)
11 |
12 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/contact.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const controller = require('../../../controllers/admin/contact.controller');
3 | const router = express.Router();
4 | const { cpUpload } = require('../../../utils/upload')
5 |
6 | router.route('/list').post(controller.list);
7 | router.route('/edit').put(cpUpload, controller.edit);
8 |
9 | module.exports = router;
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/email.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/admin/email.controller')
4 | const { cpUpload } = require('../../../utils/upload')
5 |
6 | router.route('/create').post(cpUpload, controller.create)
7 | router.route('/edit').put(cpUpload, controller.edit)
8 | router.route('/delete/:emailId').delete(controller.delete)
9 | router.route('/get/:emailId').get(controller.get)
10 | router.route('/list').get(controller.list)
11 | controller.createEmailBulkTemplate()
12 |
13 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/faq.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/admin/faq.controller')
4 | const { cpUpload } = require('../../../utils/upload')
5 |
6 | router.route('/create').post(cpUpload, controller.create)
7 | router.route('/edit').put(cpUpload, controller.edit)
8 | router.route('/delete/:faqId').delete(controller.delete)
9 | router.route('/get/:faqId').get(controller.get)
10 | router.route('/list').post(controller.list)
11 |
12 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/faqCategories.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/admin/faqCategories.controller')
4 | const { cpUpload } = require('../../../utils/upload')
5 |
6 | router.route('/create').post(cpUpload, controller.create)
7 | router.route('/edit').put(cpUpload, controller.edit)
8 | router.route('/delete/:faqId').delete(controller.delete)
9 | router.route('/get/:faqId').get(controller.get)
10 | router.route('/list').get(controller.list)
11 |
12 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const userRoutes = require('./users.route')
3 | const adminRoutes = require('./admin.route')
4 | const roleRoutes = require('./roles.route')
5 | const emailRoutes = require('./email.route')
6 | const settingsRoutes = require('./settings.route')
7 | const faqRoutes = require('./faq.route')
8 | const contactRoutes = require('./contact.route')
9 | const cmsRoutes = require('./cms.route')
10 | const activityRoutes = require('./activity.route')
11 | const newsletterRoutes = require('./newsletter.route')
12 | const faqCategoriesRoutes = require('./faqCategories.route')
13 | const router = express.Router()
14 |
15 | /**
16 | * GET v1/admin
17 | */
18 | router.use('/staff', adminRoutes)
19 | router.use('/role', roleRoutes)
20 | router.use('/user', userRoutes)
21 | router.use('/email', emailRoutes)
22 | router.use('/settings', settingsRoutes)
23 | router.use('/faq', faqRoutes)
24 | router.use('/contacts', contactRoutes)
25 | router.use('/content', cmsRoutes)
26 | router.use('/activity', activityRoutes)
27 | router.use('/newsletter', newsletterRoutes)
28 | router.use('/faq-categories', faqCategoriesRoutes)
29 |
30 | module.exports = router
31 |
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/newsletter.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/admin/newsletter.controller')
4 |
5 | router.route('/list').get(controller.list)
6 | router.route('/send-email').post(controller.sendEmailToSubscribers)
7 |
8 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/roles.route.js:
--------------------------------------------------------------------------------
1 | const router = require('express').Router();
2 | const controller = require('../../../controllers/admin/roles.controller');
3 |
4 | router.route('/create').post(controller.create);
5 | router.route('/edit').put(controller.edit);
6 | router.route('/delete').delete(controller.delete);
7 | router.route('/get').get(controller.get);
8 | router.route('/list').get(controller.list);
9 | router.route('/list-names').get(controller.getRolesByName);
10 |
11 | module.exports = router;
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/settings.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/admin/settings.controller')
4 | const { cpUpload } = require('../../../utils/upload')
5 |
6 | router.route('/edit').put(cpUpload, controller.edit)
7 | router.route('/get').get(controller.get)
8 |
9 |
10 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/staff.route.js:
--------------------------------------------------------------------------------
1 | const router = require('express').Router();
2 | const controller = require('../../controllers/staff.controller');
3 |
4 | router.route('/create').post(validate.create, controller.create);
5 | router.route('/edit').put(validate.edit, controller.edit);
6 | router.route('/delete').delete(validate.del, controller.delete);
7 | router.route('/get').get(validate.get, controller.get);
8 | router.route('/list').get(controller.list);
9 |
10 | module.exports = router;
--------------------------------------------------------------------------------
/src/api/routes/v1/admin/users.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/admin/users.controller')
4 |
5 | router.route('/create').post(controller.create)
6 | router.route('/edit').put(controller.edit)
7 | router.route('/list').post(controller.list)
8 | router.route('/delete/:userId').delete(controller.delete)
9 | router.route('/:userId').get(controller.get)
10 |
11 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/front-bk/auth.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const controller = require('../../../controllers/front/auth.controller');
3 | const { profileUpload } = require('../../../utils/upload')
4 | const router = express.Router();
5 |
6 |
7 | router.route('/register').post(controller.register);
8 | router.route('/login').post(controller.login);
9 | router.route('/forgot-password').post(controller.forgotPassword)
10 | router.route('/reset-password').post(controller.resetPassword)
11 | router.route('/change-password').put(controller.changePassword)
12 | router.route('/edit-profile').put(controller.editProfile)
13 | router.route('/update-banner').put(profileUpload, controller.updateBanner);
14 |
15 | module.exports = router;
--------------------------------------------------------------------------------
/src/api/routes/v1/front-bk/cms.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const controller = require('../../../controllers/front/cms.controller');
3 | const router = express.Router();
4 |
5 | router.route('/get/:slug').get(controller.get);
6 | router.route('/list').get(controller.list)
7 |
8 | module.exports = router;
--------------------------------------------------------------------------------
/src/api/routes/v1/front-bk/contact.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const controller = require('../../../controllers/front/contact.controller');
3 | const router = express.Router();
4 | const { cpUpload } = require('../../../utils/upload')
5 |
6 | router.route('/submit').post(cpUpload, controller.create);
7 |
8 | module.exports = router;
--------------------------------------------------------------------------------
/src/api/routes/v1/front-bk/faq.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/front/faq.controller')
4 |
5 | router.route('/list/:catId').get(controller.list)
6 | router.route('/list-faq-categories').get(controller.listFaqCategories)
7 |
8 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/front-bk/footer.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const controller = require('../../../controllers/front/footer.controller');
3 | const { cpUpload } = require('../../../utils/upload')
4 | const router = express.Router();
5 |
6 | router.route('/submit').post(cpUpload, controller.submit);
7 | router.route('/get').get(controller.get);
8 | router.route('/cryptocurrency').get(controller.cryptocurrencyListing);
9 |
10 |
11 | module.exports = router;
--------------------------------------------------------------------------------
/src/api/routes/v1/front-bk/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const authRoutes = require('./auth.route')
3 | const usersRoutes = require('./users.route')
4 | const settingsRoutes = require('./settings.route')
5 | const faqRoutes = require('./faq.route')
6 | const contactRoutes = require('./contact.route')
7 | const cmsRoutes = require('./cms.route')
8 | const footerRoutes = require('./footer.route')
9 |
10 | const router = express.Router()
11 | const { uploadToCloudinary, cpUpload } = require('../../../utils/upload')
12 | /**
13 | * GET v1/status
14 | */
15 | router.use('/auth', authRoutes)
16 | router.use('/users', usersRoutes)
17 | router.use('/settings', settingsRoutes)
18 | router.use('/faq', faqRoutes)
19 | router.use('/contact', contactRoutes)
20 | router.use('/cms', cmsRoutes)
21 | router.use('/footer', footerRoutes)
22 | router.use('/test', cpUpload, async (req, res) => {
23 | const url = []
24 | const { path } = req.files.image[0];
25 | const newPath = await uploadToCloudinary(path)
26 | url.push(newPath)
27 |
28 | res.status(200).json({ data: url, message: "image upload successfully" })
29 | })
30 |
31 | module.exports = router
32 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front-bk/settings.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controller = require('../../../controllers/front/settings.controller')
4 |
5 | router.route('/get').get(controller.get)
6 |
7 |
8 | module.exports = router
--------------------------------------------------------------------------------
/src/api/routes/v1/front-bk/users.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const controller = require('../../../controllers/front/users.controller');
3 | const router = express.Router();
4 | const { profileUpload, uploadSingle } = require('../../../utils/upload')
5 |
6 | router.route('/:userId').put(profileUpload, controller.update);
7 | router.route('/:userId').get(controller.getUser);
8 | router.route('/upload-image').post(uploadSingle, controller.uploadContent);
9 | router.route('/refferals/:userId').get(controller.getUserReferrals);
10 |
11 | module.exports = router;
--------------------------------------------------------------------------------
/src/api/routes/v1/front/activities.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const controller = require("../../../controllers/front/activities.controller");
3 | const router = express.Router();
4 | const { cpUpload } = require("../../../utils/upload");
5 |
6 | router.route("/list").get(controller.list);
7 |
8 |
9 | module.exports = router;
10 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/applicants.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | // const controller = require('../../../controllers/front/university.controller');
3 | const controller = require("../../../controllers/front/applicants.controller");
4 | const router = express.Router();
5 | // const { uploadSingle } = require('../../../utils/upload');
6 | const { cpUpload } = require("../../../utils/upload");
7 |
8 | router.route("/createApplicant").post(cpUpload, controller.createApplicant);
9 | router.route("/listApplicants").get(controller.listApplicants);
10 | //
11 | router.route("/edit").put(cpUpload, controller.edit);
12 | router.route("/delete/:id").delete(controller.delete);
13 | router.route("/get/:id").get(controller.get);
14 | router.route("/search").post(controller.search);
15 |
16 | module.exports = router;
17 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/applicationmodulestatus.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/applicationmodulestatus.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router
9 | .route("/create")
10 | .post(upload.any(), controller.createApplicationModuleStatus);
11 | router
12 | .route("/listApplicationModuleStatuss")
13 | .get(controller.listApplicationModuleStatuss);
14 | router.route("/edit").put(controller.edit);
15 | router.route("/delete").post(controller.delete);
16 | router.route("/get/:id").get(controller.get);
17 | // router.findAll();
18 |
19 | module.exports = router;
20 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/backups.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const controller = require("../../../controllers/front/backup.controller");
3 | const router = express.Router();
4 | const { uploadSingle, cpUpload } = require("../../../utils/upload");
5 |
6 | router.route("/create").post(uploadSingle, controller.create);
7 | router.route("/list").get(controller.list);
8 | router.route("/restore/:fileName").put(uploadSingle, controller.restore);
9 | router.route("/delete/:fileName").delete(controller.delete);
10 | router.route("/download/:fileName").get(controller.download);
11 |
12 | module.exports = router;
--------------------------------------------------------------------------------
/src/api/routes/v1/front/billinginfo.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | // const controller = require('../../../controllers/front/university.controller');
3 | const controller = require("../../../controllers/front/billinginfo.controller");
4 | const router = express.Router();
5 | const { uploadSingle, cpUpload, upload } = require("../../../utils/upload");
6 |
7 | router.route("/create").post(upload.any(), controller.create);
8 | router.route("/list").get(controller.list);
9 | router.route("/edit").put(upload.any(), controller.edit);
10 | router.route("/delete/:id").delete(controller.delete);
11 | router.route("/get/:id").get(controller.get);
12 |
13 | module.exports = router;
14 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/branch.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | // const controller = require('../../../controllers/front/university.controller');
3 | const controller = require("../../../controllers/front/branch.controller");
4 | const router = express.Router();
5 | const { uploadSingle, cpUpload } = require("../../../utils/upload");
6 |
7 | router.route("/create").post( controller.create);
8 | router.route("/list").get(controller.list);
9 | router.route("/edit").put(controller.edit);
10 | router.route("/delete/:id").delete(controller.delete);
11 | router.route("/search").post(controller.search);
12 | router.route("/get/:id").get(controller.get);
13 |
14 | module.exports = router;
15 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/commissioninvoice.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/commissioninvoice.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.create);
9 | router.route("/list").get(controller.list);
10 | router.route(upload.any(), "/edit").put(controller.edit);
11 | router.route("/delete/:id").delete(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | router.route("/search").post(controller.search);
14 |
15 | // router.findAll();
16 |
17 | module.exports = router;
18 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/commissioninvoiceitem.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | // const controller = require('../../../controllers/front/university.controller');
3 | const controller = require("../../../controllers/front/commissioninvoiceitem.controller");
4 | const router = express.Router();
5 | const { uploadSingle, cpUpload, upload } = require("../../../utils/upload");
6 |
7 | router.route("/create").post(upload.any(), controller.create);
8 | router.route("/list").get(controller.list);
9 | router.route("/edit").put(upload.any(), controller.edit);
10 | router.route("/delete/:id").delete(controller.delete);
11 | router.route("/get/:id").get(controller.get);
12 |
13 | module.exports = router;
14 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/costofsales.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/costofsales.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.create);
9 | router.route("/list").get(controller.list);
10 | router.route("/edit").put(upload.any(), controller.edit);
11 | router.route("/delete/:id").delete(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | // router.findAll();
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/currencies.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const controller = require("../../../controllers/front/currencies.controller");
3 | const router = express.Router();
4 | const { cpUpload } = require("../../../utils/upload");
5 |
6 | router.route("/create").post(cpUpload, controller.create);
7 | router.route("/list").get(controller.list);
8 | router.route("/lists").get(controller.lists);
9 | router.route("/edit").put(cpUpload, controller.edit);
10 | router.route("/delete/:id").delete(controller.delete);
11 | router.route("/get/:id").get(controller.get);
12 |
13 | module.exports = router;
14 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/depitandcredit.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/depitandcredit.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.create);
9 | router.route("/list").get(controller.list);
10 | router.route("/edit").put(upload.any(), controller.edit);
11 | router.route("/delete/:id").delete(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | // router.findAll();
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/expenses.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/expenses.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.create);
9 | router.route("/list").get(controller.list);
10 | router.route("/edit").put(upload.any(), controller.edit);
11 | router.route("/delete/:id").delete(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | // router.findAll();
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/generalinvoice.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/generalinvoice.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.create);
9 | router.route("/list").get(controller.list);
10 | router.route("/edit").put(upload.any(), controller.edit);
11 | router.route("/delete/:id").delete(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | router.route("/search").post(controller.search);
14 |
15 | // router.findAll();
16 |
17 | module.exports = router;
18 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/generalinvoiceitem.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | // const controller = require('../../../controllers/front/university.controller');
3 | const controller = require("../../../controllers/front/generalinvoiceitem.controller");
4 | const router = express.Router();
5 | const { uploadSingle, cpUpload, upload } = require("../../../utils/upload");
6 |
7 | router.route("/create").post(upload.any(), controller.create);
8 | router.route("/list").get(controller.list);
9 | router.route("/edit").put(upload.any(), controller.edit);
10 | router.route("/delete/:id").delete(controller.delete);
11 | router.route("/get/:id").get(controller.get);
12 |
13 | module.exports = router;
14 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/index.js:
--------------------------------------------------------------------------------
1 | // all modules
2 |
3 | const express = require("express");
4 | // const { route } = require("./university.route");
5 | const universityRoutes = require("./university.route");
6 | const programmeRoutes = require("./programme.route");
7 | const leadRoutes = require("./lead.route");
8 | const applicantsRoute = require("./applicants.route");
9 | const usersRoute = require("./users.route");
10 | const backupsRoutes = require("./backups.route");
11 | const PropertiesRoutes = require("./properties.route");
12 | const currencieRoutes = require("./currencies.route");
13 | const activitiesRoutes = require("./activities.route");
14 | const branchRoutes = require("./branch.route");
15 | // Anasite - Edits
16 | const programLevel = require("./programlevel.route");
17 | const programCategory = require("./programcategory.route");
18 | const qualificationType = require("./qualificationtype.route");
19 | const universityType = require("./universitytype.route");
20 | const leadGroup = require("./leadgroup.route");
21 | const interestedProgram = require("./interestedprogram.route");
22 | const applicationModuleStatus = require("./applicationmodulestatus.route");
23 | const leadsManagmentModuleStatus = require("./leadsmanagmentmodulestatus.route");
24 | const invoiceModuleStatus = require("./invoicemodulestatus.route");
25 | const commissionInvoice = require("./commissioninvoice.route");
26 | const sales = require("./sales.route");
27 | const costofsales = require("./costofsales.route");
28 | const expenses = require("./expenses.route");
29 | const depitandcredit = require("./depitandcredit.route");
30 | const billinginfo = require("./billinginfo.route");
31 | const mailinginfo = require("./mailinginfo.route");
32 | const generalinvoice = require("./generalinvoice.route");
33 | const commissioninvoiceitem = require("./commissioninvoiceitem.route");
34 | const generalinvoiceitem = require("./generalinvoiceitem.route");
35 |
36 | const router = express.Router();
37 |
38 | /**
39 | * GET v1/status
40 | */
41 | router.use("/branch", branchRoutes);
42 | router.use("/backups", backupsRoutes);
43 | router.use("/properties", PropertiesRoutes);
44 | router.use("/university", universityRoutes);
45 | router.use("/programme", programmeRoutes);
46 | router.use("/lead", leadRoutes);
47 | router.use("/applicants", applicantsRoute);
48 | router.use("/users", usersRoute);
49 | router.use("/currencies", currencieRoutes);
50 | router.use("/activities", activitiesRoutes);
51 | // Anasite - Edits:
52 | router.use("/programlevel", programLevel);
53 | router.use("/programcategory", programCategory);
54 | router.use("/qualificationtype", qualificationType);
55 | router.use("/universitytype", universityType);
56 | router.use("/leadgroup", leadGroup);
57 | router.use("/interestedprogram", interestedProgram);
58 | router.use("/applicationmodulestatus", applicationModuleStatus);
59 | router.use("/leadsmanagmentmodulestatus", leadsManagmentModuleStatus);
60 | router.use("/invoicemodulestatus", invoiceModuleStatus);
61 | router.use("/sales", sales);
62 | router.use("/costofsales", costofsales);
63 | router.use("/expenses", expenses);
64 | router.use("/commissioninvoice", commissionInvoice);
65 | router.use("/billinginfo", billinginfo);
66 | router.use("/mailinginfo", mailinginfo);
67 | router.use("/generalinvoice", generalinvoice);
68 | router.use("/depitandcredit", depitandcredit);
69 | router.use("/commissioninvoiceitem", commissioninvoiceitem);
70 | router.use("/generalinvoiceitem", generalinvoiceitem);
71 |
72 | // currencieRoutes;
73 | module.exports = router;
74 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/interestedprogram.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/interestedprogram.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.createInterestedProgram);
9 | router.route("/listInterestedPrograms").get(controller.listInterestedPrograms);
10 | router.route("/edit").put(controller.edit);
11 | router.route("/delete").post(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | // router.findAll();
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/invoicemodulestatus.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/invoicemodulestatus.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router
9 | .route("/create")
10 | .post(upload.any(), controller.createInvoiceModuleStatus);
11 | router
12 | .route("/listInvoiceModuleStatuss")
13 | .get(controller.listInvoiceModuleStatuss);
14 | router.route("/edit").put(controller.edit);
15 | router.route("/delete").post(controller.delete);
16 | router.route("/get/:id").get(controller.get);
17 | // router.findAll();
18 |
19 | module.exports = router;
20 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/lead.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const controller = require("../../../controllers/front/lead.controller");
3 | const router = express.Router();
4 | const { uploadSingle, upload } = require("../../../utils/upload");
5 |
6 | router.route("/createLead").post(upload.single("logo"), controller.createLead);
7 | router.route("/listLead").get(controller.listLead);
8 | router.route("/edit").put(upload.single("logo"), controller.edit);
9 | router.route("/delete/:id").delete(controller.delete);
10 | router.route("/get/:id").get(controller.get);
11 | router.route("/search").post(controller.search);
12 |
13 | module.exports = router;
14 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/leadgroup.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/leadgroup.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.createLeadGroup);
9 | router.route("/listLeadGroups").get(controller.listLeadGroups);
10 | router.route("/edit").put(controller.edit);
11 | router.route("/delete").post(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | // router.findAll();
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/leadsmanagmentmodulestatus.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/leadsmanagmentmodulestatus.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router
9 | .route("/create")
10 | .post(upload.any(), controller.createLeadsManagmentModuleStatus);
11 | router
12 | .route("/listLeadsManagmentModuleStatuss")
13 | .get(controller.listLeadsManagmentModuleStatuss);
14 | router.route("/edit").put(controller.edit);
15 | router.route("/delete").post(controller.delete);
16 | router.route("/get/:id").get(controller.get);
17 | // router.findAll();
18 |
19 | module.exports = router;
20 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/mailinginfo.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | // const controller = require('../../../controllers/front/university.controller');
3 | const controller = require("../../../controllers/front/mailing.controller");
4 | const router = express.Router();
5 | const { uploadSingle, cpUpload, upload } = require("../../../utils/upload");
6 |
7 | router.route("/create").post(upload.any(), controller.create);
8 | router.route("/list").get(controller.list);
9 | router.route("/edit").put(upload.any(), controller.edit);
10 | router.route("/delete/:id").delete(controller.delete);
11 | router.route("/get/:id").get(controller.get);
12 |
13 | module.exports = router;
14 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/programcategory.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/programcategory.controller");
5 | const router = express.Router();
6 |
7 | const multer = require("multer");
8 | const upload = multer();
9 | router.route("/create").post(upload.any(), controller.createProgramCategory);
10 | router.route("/listProgramCategorys").get(controller.listProgramCategorys);
11 | router.route("/edit").put(controller.edit);
12 | router.route("/delete").post(controller.delete);
13 | router.route("/get/:id").get(controller.get);
14 | // router.findAll();
15 |
16 | module.exports = router;
17 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/programlevel.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/programlevel.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.createProgramLevel);
9 | router.route("/listProgramLevels").get(controller.listProgramLevels);
10 | router.route("/edit").put(controller.edit);
11 | router.route("/delete").post(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | // router.findAll();
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/programme.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | // const controller = require('../../../controllers/front/university.controller')
3 | const controller = require("../../../controllers/front/programme.controller");
4 | const router = express.Router();
5 |
6 | router.route("/createProgramme").post(controller.createProgramme);
7 | router.route("/listProgrammes").get(controller.listProgrammes);
8 | router.route("/edit").put(controller.edit);
9 | router.route("/delete/:id").delete(controller.delete);
10 | router.route("/get/:id").get(controller.get);
11 | router.route("/search").post(controller.search);
12 |
13 | // router.findAll();
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/properties.route.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const controller = require("../../../controllers/front/properties.controller");
3 | const router = express.Router();
4 | const { cpUpload } = require("../../../utils/upload");
5 |
6 | router.route("/create").post(cpUpload,controller.create);
7 | router.route("/list").get(controller.list);
8 | router.route("/edit").put(controller.edit);
9 | router.route("/delete/:id").delete(controller.delete);
10 | router.route("/get/:id").get(controller.get);
11 |
12 | module.exports = router;
13 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/qualificationtype.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/qualificationtype.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.createQualificationType);
9 | router.route("/listQualificationTypes").get(controller.listQualificationTypes);
10 | router.route("/edit").put(controller.edit);
11 | router.route("/delete").post(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | // router.findAll();
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/sales.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/sales.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.create);
9 | router.route("/list").get(controller.list);
10 | router.route("/edit").put(upload.any(), controller.edit);
11 | router.route("/delete/:id").delete(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | // router.findAll();
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/university.route.js:
--------------------------------------------------------------------------------
1 | // const express = require("express");
2 | // const controller = require("../../../controllers/front/university.controller");
3 | // const router = express.Router();
4 | // const { uploadSingle } = require("../../../utils/upload");
5 |
6 | // router.route("/create").post(uploadSingle, controller.create);
7 | // router.route("/listUniversity").get(controller.listUniversity);
8 | // router.route("/edit").put(uploadSingle, controller.edit);
9 | // router.route("/delete/:id").delete(controller.delete);
10 | // router.route("/get/:id").get(controller.get);
11 |
12 | // module.exports = router;
13 |
14 | const express = require("express");
15 | const router = express.Router();
16 |
17 | const controller = require("../../../controllers/front/university.controller");
18 | const { uploadSingle } = require("../../../utils/upload");
19 |
20 | router.route("/create").post(uploadSingle, controller.create);
21 | router.route("/listUniversity").get(controller.listUniversity);
22 | router.route("/edit").put(uploadSingle, controller.edit);
23 | router.route("/delete/:id").delete(controller.delete);
24 | router.route("/get/:id").get(controller.get);
25 | router.route("/search").post(controller.search);
26 |
27 |
28 | module.exports = router;
29 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/universitytype.route.js:
--------------------------------------------------------------------------------
1 | // Anasite - Edits: setting up routes
2 | const express = require("express");
3 | // const controller = require('../../../controllers/front/university.controller')
4 | const controller = require("../../../controllers/front/universitytype.controller");
5 | const router = express.Router();
6 | const multer = require("multer");
7 | const upload = multer();
8 | router.route("/create").post(upload.any(), controller.createUniversityType);
9 | router.route("/listUniversityTypes").get(controller.listUniversityTypes);
10 | router.route("/edit").put(controller.edit);
11 | router.route("/delete").post(controller.delete);
12 | router.route("/get/:id").get(controller.get);
13 | // router.findAll();
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/src/api/routes/v1/front/users.route.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | // const controller = require('../../../controllers/front/university.controller')
3 | // const controller = require('../../../controllers/front/users.controller');
4 | const { uploadSingle, upload } = require("../../../utils/upload");
5 | const controller = require('../../../controllers/front/users.controller');
6 |
7 | const router = express.Router();
8 |
9 | // router.route("/createUser").post(controller.createUser);
10 | // router.route("/listUsers").get(controller.listUsers)
11 | router.route("/create").post(controller.create);
12 | router.route("/getUser").post(controller.getUser);
13 | router.route("/list").get(controller.list);
14 | router.route("/edit").put(upload.single("logo"), controller.edit);
15 | router.route("/delete/:id").delete(controller.delete);
16 | router.route("/get/:id").get(controller.get);
17 | router.route("/login").post(controller.login);
18 | router.route("/signup").post(controller.signup);
19 | router.route("/search").post(controller.search);
20 | router.route("/signout").post(controller.signout);
21 |
22 | module.exports = router;
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/src/api/utils/APIError.js:
--------------------------------------------------------------------------------
1 | const httpStatus = require('http-status');
2 |
3 | /**
4 | * @extends Error
5 | */
6 | class ExtendableError extends Error {
7 | constructor({
8 | message, errors, status, isPublic, stack,
9 | }) {
10 | super(message);
11 | this.name = this.constructor.name;
12 | this.message = message;
13 | this.errors = errors;
14 | this.status = status;
15 | this.isPublic = isPublic;
16 | this.isOperational = true; // This is required since bluebird 4 doesn't append it anymore.
17 | this.stack = stack;
18 | // Error.captureStackTrace(this, this.constructor.name);
19 | }
20 | }
21 |
22 | /**
23 | * Class representing an API error.
24 | * @extends ExtendableError
25 | */
26 | class APIError extends ExtendableError {
27 | /**
28 | * Creates an API error.
29 | * @param {string} message - Error message.
30 | * @param {number} status - HTTP status code of error.
31 | * @param {boolean} isPublic - Whether the message should be visible to user or not.
32 | */
33 | constructor({
34 | message,
35 | errors,
36 | stack,
37 | status = httpStatus.INTERNAL_SERVER_ERROR,
38 | isPublic = false,
39 | }) {
40 | super({
41 | message, errors, status, isPublic, stack,
42 | });
43 | }
44 | }
45 |
46 | module.exports = APIError;
47 |
--------------------------------------------------------------------------------
/src/api/utils/emails/emails.js:
--------------------------------------------------------------------------------
1 | const Settings = require('../../models/settings.model')
2 | const Mail = require('../../models/email.model')
3 | const {emailAdd,mailgunDomain,mailgunApi} = require('../../../config/vars')
4 |
5 | //send email to mentioned users
6 | exports.sendEmail = async (email = '', type = '', content = null, subject = '') => {
7 | if (email) {
8 | const getTemplate = await Mail.findOne({ type })
9 | if (getTemplate) {
10 | let setting = await Settings.findOne()
11 | let api=setting?.api ? setting?.api : '';
12 | let domain=setting?.domain ? setting?.domain : '';
13 | let siteEmail=setting?.email ? setting?.email : '';
14 | var mailgun = require('mailgun-js')({ apiKey: api, domain: domain });
15 |
16 | let sub = ''
17 | if(subject){
18 | sub = subject
19 | }
20 | else{
21 | sub = getTemplate.subject
22 | }
23 |
24 | const msg = {
25 | to: email,
26 | from: `Biiview <${siteEmail}>`,
27 | subject: sub,
28 | html: getHtml(getTemplate, content)
29 | };
30 |
31 | mailgun.messages().send(msg, function (err,body) {
32 | if (err) {
33 | console.log(err, "\u2B55")
34 | }
35 | else {
36 | console.log(body)
37 | }
38 | });
39 | }
40 | }
41 | }
42 |
43 | function getHtml(getTemplate, content) {
44 | let text = getTemplate.text
45 | if (content) {
46 | for (let key in content) {
47 | text = text.replace(`${key}`, "'" + `${content[key]}` + "'")
48 | }
49 | }
50 | return text
51 | }
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/src/api/utils/upload.js:
--------------------------------------------------------------------------------
1 | // multer
2 | const fs = require("fs");
3 | const multer = require("multer");
4 | const cloudinary = require("cloudinary");
5 | const { resolve } = require("path");
6 | const uploadsDir = "./src/uploads/";
7 | const imagesDir = `${uploadsDir}images/`;
8 | cloudinary.config({
9 | cloud_name: process.env.CLOUD_NAME,
10 | api_key: process.env.API_KEY,
11 | api_secret: process.env.API_SECRET,
12 | });
13 |
14 | const storage = multer.diskStorage({
15 | destination: function (req, file, cb) {
16 | console.log("ooo\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n reqreqreq", req);
17 | // make uploads directory if do not exist
18 | if (!fs.existsSync(uploadsDir)) fs.mkdirSync(uploadsDir);
19 |
20 | if (!fs.existsSync(imagesDir)) fs.mkdirSync(imagesDir);
21 |
22 | cb(null, imagesDir);
23 | },
24 | filename: function (req, file, cb) {
25 | try {
26 | console.log("\n\n\n\n\n\n\n\n File from Multer", file);
27 | var fileExtension = file.mimetype.split("/")[1];
28 | if (
29 | !file.originalname
30 | .toLowerCase()
31 | .match(/\.(jpg|jpeg|png|gif|svg|ico|webp)$/)
32 | ) {
33 | return cb(new Error("Only image files are allowed."));
34 | }
35 | console.log("\n\n\n\n\n\n\n\n after checking extension from Multer");
36 |
37 | cb(
38 | null,
39 | +Date.now() +
40 | "." +
41 | fileExtension +
42 | "." +
43 | file.originalname.toLowerCase()
44 | );
45 | } catch (err) {
46 | console.log("Error From Multer", err);
47 | }
48 | },
49 | });
50 |
51 | const upload = multer({
52 | storage,
53 | limits: {
54 | fileSize: 2 * 1024 * 1024, // 2 MB
55 | },
56 | });
57 | // console.log("\nlll\nllll\nnnnn", upload);
58 | // exports.cpUpload = upload.fields([{ name: 'image', maxCount: 1 }, { name: 'screenShot', maxCount: 1 }, { name: 'icon', maxCount: 1 }, { name: 'files', maxCount: 1 }, { name: 'manifestFile', maxCount: 1 }, { name: 'crashLog', maxCount: 1 },])
59 | exports.cpUpload = upload.fields([
60 | { name: "image", maxCount: 1 },
61 | { name: "fileUpload", maxCount: 1 },
62 | ]);
63 |
64 | // exports.cpUpload = upload.fields([{ name: 'image', maxCount: 1 }, { name: 'fileUpload', maxCount: 1 }])
65 | exports.uploadSingle = upload.single("logo");
66 | exports.upload = upload;
67 | exports.uploadContentImage = upload.single("files");
68 | exports.profileUpload = upload.fields([
69 | { name: "profileImage", maxCount: 1 },
70 | { name: "bannerImage", maxCount: 1 },
71 | ]);
72 | exports.kycPersonalDoc = upload.fields([
73 | { name: "personalDocumentPassportFront", maxCount: 1 },
74 | { name: "personalDocumentPassportBack", maxCount: 1 },
75 | { name: "personalDocumentIDCardFront", maxCount: 1 },
76 | { name: "personalDocumentIDCardBack", maxCount: 1 },
77 | { name: "personalDocumentDrivingIDFront", maxCount: 1 },
78 | { name: "personalDocumentDrivingIDBack", maxCount: 1 },
79 | { name: "addressDocument", maxCount: 1 },
80 | { name: "additionalDocument", maxCount: 1 },
81 | ]);
82 |
83 | exports.uploadToCloudinary = async (data) => {
84 | return new Promise((resolve) => {
85 | cloudinary.uploader.upload(
86 | data,
87 | (result) => {
88 | resolve(result.secure_url);
89 | },
90 | { resource_type: "auto" }
91 | );
92 | });
93 |
94 | // return `oooooooooooo`
95 | };
96 |
--------------------------------------------------------------------------------
/src/api/utils/util.js:
--------------------------------------------------------------------------------
1 | var fs = require('fs');
2 | var path = require("path");
3 |
4 | exports.leadingZeros =async (data)=>{
5 | const transformed = {};
6 | const fields = ['_id', 'gameId', 'description', 'name', 'icon', 'platformType', 'developmentEnv', 'userId', 'monitizationModel' , 'gameFormat' , 'winningScore' , 'orientation','downloaded','inProgress','launched','prizeEnabled','archived','updatedAt','createdAt'];
7 | for(let i=0;i 0) {
13 | num= Array(+numZeroes).join("0") + num;
14 | }
15 | transformed.gameId=num;
16 | return transformed;
17 | }
18 |
19 |
20 | exports.leadingZerosMobile =async (data)=>{
21 | const transformed = {};
22 | const fields = [ 'gameID', 'gameName', 'gameImage', 'gamePlatform', 'gameGenre', 'gameInstructions','gameRank'];
23 | for(let i=0;i 0) {
29 | num= Array(+numZeroes).join("0") + num;
30 | }
31 | transformed.gameID=num;
32 | return transformed;
33 | }
34 |
35 |
36 | exports.removeFile =async (data)=>{
37 | const imagePath=path.resolve(__dirname, `../../uploads/images/${data}`)
38 | await fs.unlinkSync(imagePath);
39 | return imagePath;
40 | }
--------------------------------------------------------------------------------
/src/config/demo.sql:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/multikitty/education-consultancy-backend/b958ee8adefda822565d5387035a6118ebc84baf/src/config/demo.sql
--------------------------------------------------------------------------------
/src/config/emailtemplate.json:
--------------------------------------------------------------------------------
1 | [{"type":"forgot-password","subject":"Forgot Password","text":"To reset your password click this link:
${url}
If you didn’t ask to reset your password, you can ignore this email.
- Thanks,
"},{"type":"contact-email","subject":"Contact Form","text":"CONTACT US
- UserName: ${name}
- Email: ${email}
- Message: ${message}
"},{"type":"verify-user","subject":"Verify your ban account ....","text":"Hello ${email} :
hjbjjkhh,kjwdjkaxznjdsjk
To verify your email click this link:
${url}
If you already verify your email, you can ignore this email.
Thanks,
"},{"type":"new-user","subject":"Congratulation for Deskillz User","text":"PASTE HERE THE RESET NEW USER TEMPLATE SAMPLEs
"},{"type":"contact-status","subject":"Change Status for Contact Formssss","text":"Your Query No# ${_id} status has been updggggated to ${status}…………… .
"},{"type":"invite-user","subject":"Invite Usersd","text":"Hello ${email} :
Join to our platform join us with 43 : ${url}
Thanks,
"}]
--------------------------------------------------------------------------------
/src/config/errors.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Catch 422 for duplicate key
3 | * @public
4 | */
5 | exports.checkDuplicate = (err, res, name = '') => {
6 | if (err.code === 11000 || err.code === 11001) {
7 | let message = `${name} with same `;
8 | if (err.errmsg.includes('name_1'))
9 | message += 'name already exists';
10 | else if (err.errmsg.includes('email_1'))
11 | message += 'email already exists';
12 | else {
13 | const pathRegex = err.message.match(/\.\$([a-z]+)/)
14 | const path = pathRegex ? pathRegex[1] : '';
15 | const keyRegex = err.message.match(/key:\s+{\s+:\s\"(.*)(?=\")/)
16 | const key = keyRegex ? keyRegex[1] : '';
17 |
18 | message = `'${path}' '${key}' already exists`
19 | }
20 | return res.status(200).send({ success: false, message });
21 | }
22 | };
--------------------------------------------------------------------------------
/src/config/express.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const bodyParser = require("body-parser");
3 | const methodOverride = require("method-override");
4 | const cors = require("cors");
5 | // const frontAuth = require("../api/middlewares/front/auth");
6 | // const adminRoutes = require("../api/routes/v1/admin/index");
7 | // const frontRoutes = require("../api/routes/v1/front/index");
8 | const frontRoutes = require("../api/routes/v1/front/index")
9 | const error = require("../api/middlewares/error");
10 | const path = require("path");
11 | const rateLimit = require("express-rate-limit");
12 | const bearerToken = require("express-bearer-token");
13 | const compression = require("compression");
14 |
15 | /**
16 | * Express instance
17 | * @public
18 | */
19 | const app = express();
20 |
21 | app.use(bodyParser.json({ limit: "50mb" }));
22 | app.use(bodyParser.urlencoded({ limit: "50mb", extended: true }));
23 | app.use(bearerToken());
24 |
25 | app.use(methodOverride());
26 | const apiRequestLimiterAll = rateLimit({
27 | windowMs: 15 * 60 * 1000, // 15 minutes
28 | max: 90000,
29 | });
30 |
31 | app.use(express.static(path.join(__dirname, "../uploads")));
32 | app.use(express.static(path.join(__dirname, "../../admin/static/css")));
33 |
34 | app.use("/v1/", apiRequestLimiterAll);
35 |
36 | var corsOptions = {
37 | origin: "*",
38 | optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
39 | };
40 | app.use(cors(corsOptions));
41 |
42 | // compress all responses
43 | app.use(compression());
44 |
45 | // authentication middleware to enforce authnetication and authorization
46 | // app.use(frontAuth.userValidation);
47 |
48 | // // authentication middleware to get token
49 | // app.use(frontAuth.authenticate);
50 |
51 | // mount admin api v1 routes
52 | // app.use("/v1/admin", adminRoutes);
53 |
54 | // mount admin api v1 routes
55 | app.use("/v1/front", frontRoutes);
56 |
57 | // Admin Site Build Path
58 | app.use("/admin/", express.static(path.join(__dirname, "../../admin")));
59 | app.get("/admin/*", function (req, res) {
60 | res.sendFile(path.join(__dirname, "../../admin", "index.html"));
61 | });
62 |
63 | // Front Site Build Path
64 | app.use("/", express.static(path.join(__dirname, "../../build")));
65 | app.get("/*", function (req, res) {
66 | res.sendFile(path.join(__dirname, "../../build", "index.html"));
67 | });
68 |
69 | // if error is not an instanceOf APIError, convert it.
70 | app.use(error.converter);
71 |
72 | // catch 404 and forward to error handler
73 | app.use(error.notFound);
74 |
75 | // error handler, send stacktrace only during development
76 | app.use(error.handler);
77 |
78 | module.exports = app;
79 |
--------------------------------------------------------------------------------
/src/config/mongoose.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const { mongo, env } = require('./vars');
3 |
4 | // set mongoose Promise to Bluebird
5 | mongoose.Promise = Promise;
6 |
7 | // Exit application on error
8 | mongoose.connection.on('error', (err) => {
9 | process.exit(-1);
10 | });
11 |
12 | // print mongoose logs in dev env
13 | if (env === 'development') {
14 | mongoose.set('debug', true);
15 | }
16 |
17 | /**
18 | * Connect to mongo db
19 | *
20 | * @returns {object} Mongoose connection
21 | * @public
22 | */
23 | exports.connect = () => {
24 | mongoose.connect(mongo.uri, {
25 | useNewUrlParser: true,
26 | useCreateIndex: true,
27 | useFindAndModify: false,
28 | useUnifiedTopology: true,
29 | keepAlive: 1,
30 | });
31 | return mongoose.connection;
32 | };
33 |
--------------------------------------------------------------------------------
/src/config/vars.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const moment = require("moment");
3 |
4 | // import .env variables
5 | require('dotenv').config();
6 |
7 | module.exports = {
8 | jwtExpirationInterval: process.env.JWT_EXPIRATION_MINUTES,
9 | encryptionKey: process.env.ENCRYPTION_KEY,
10 | env: process.env.NODE_ENV,
11 | port: process.env.PORT,
12 | frontEncSecret: process.env.FRONT_ENC_SECRET,
13 | emailAdd: process.env.EMAIL,
14 | mongo: {
15 | uri: process.env.MONGO_URI,
16 | },
17 | mailgunDomain: process.env.MAILGUN_DOMAIN,
18 | mailgunApi:process.env.MAILGUN_API,
19 | pwEncryptionKey: process.env.PW_ENCRYPTION_KEY,
20 | pwdSaltRounds: process.env.PWD_SALT_ROUNDS,
21 | baseUrl: process.env.BASE_URL,
22 | frontenUrl: process.env.REACT_APP_FRONT_URL,
23 | adminPasswordKey: process.env.ADMIN_PASSWORD_KEY,
24 | xAuthToken : process.env.XAUTHTOKEN,
25 | authorization : process.env.AUTHORIZATION
26 | };
27 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | Promise = require("bluebird");
2 | // const { port } = require("./config/vars");
3 | // const mongoose = require('./config/mongoose');
4 | var models = require("../src/api/models");
5 | const app = require("./config/express");
6 | app.set("view engine", "ejs");
7 | const http = require("http");
8 | // mongoose.connect();
9 | const port = 8080;
10 |
11 | models.sequelize.sync().then(function () {
12 | // app.listen(port);
13 | http.createServer(app).listen(port);
14 |
15 | });
16 |
17 |
18 | console.log(`servers is running on ${port}` )
19 |
20 |
21 |
22 | // http.createServer(app).listen(port);
23 | // console.log(`App is running on ${port}`);
24 | module.exports = app;
--------------------------------------------------------------------------------