lfra_db 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.env +3 -0
  2. package/index.js +100 -0
  3. package/package.json +16 -0
  4. package/src/models/apilog.js +18 -0
  5. package/src/models/archivedapilog.js +18 -0
  6. package/src/models/archivedauditlog.js +83 -0
  7. package/src/models/auditlog.js +83 -0
  8. package/src/models/bankdetails.js +40 -0
  9. package/src/models/combinedUnits.js +62 -0
  10. package/src/models/company.js +52 -0
  11. package/src/models/contract.js +42 -0
  12. package/src/models/customer.js +174 -0
  13. package/src/models/email.js +25 -0
  14. package/src/models/entry_exit.js +53 -0
  15. package/src/models/facility.js +39 -0
  16. package/src/models/facilityasset.js +25 -0
  17. package/src/models/faq.js +18 -0
  18. package/src/models/guard.js +47 -0
  19. package/src/models/invoice.js +105 -0
  20. package/src/models/invoiceBillingSetting.js +29 -0
  21. package/src/models/john.js +9 -0
  22. package/src/models/levy.js +49 -0
  23. package/src/models/levytype.js +19 -0
  24. package/src/models/message.js +39 -0
  25. package/src/models/module.js +21 -0
  26. package/src/models/penalty.js +51 -0
  27. package/src/models/refresh_token.js +23 -0
  28. package/src/models/reminder.js +47 -0
  29. package/src/models/settings.js +19 -0
  30. package/src/models/sms_africastalking.js +21 -0
  31. package/src/models/sms_meliora.js +17 -0
  32. package/src/models/tax.js +35 -0
  33. package/src/models/unitasset.js +25 -0
  34. package/src/models/units.js +70 -0
  35. package/src/models/user.js +94 -0
  36. package/src/models/visitLog.js +86 -0
  37. package/src/models/visitor.js +54 -0
  38. package/src/models/waitlist.js +45 -0
  39. package/src/models/waterConcentrator.js +50 -0
  40. package/src/models/waterMeter.js +50 -0
  41. package/src/models/waterMeterSetting.js +29 -0
package/.env ADDED
@@ -0,0 +1,3 @@
1
+ User=Ps
2
+ Password=Letmein987
3
+ source=?authSource=admin
package/index.js ADDED
@@ -0,0 +1,100 @@
1
+ const mongoose = require('mongoose');
2
+ require('dotenv').config()
3
+
4
+
5
+ // Maintain a record of open connections for each database
6
+ const connections = {};
7
+ const url = '127.0.0.1:27017';
8
+ const source = '?authSource=admin'
9
+
10
+ // Utility function to connect to MongoDB
11
+ async function connectToMongoDB(dbName) {
12
+ try {
13
+
14
+ const connectionString = `mongodb://Ps:Letmein987@127.0.0.1:27017/${dbName}${source}`;
15
+ await mongoose.connect(connectionString, {
16
+ useNewUrlParser: true,
17
+ });
18
+ console.log('Connected to MongoDB');
19
+ } catch (err) {
20
+ console.error('Error connecting to MongoDB:', err);
21
+ throw err;
22
+ }
23
+ }
24
+
25
+ // Function to switch databases dynamically
26
+ async function switchDB(dbName) {
27
+ // Check if there's already a connection to the desired database
28
+ if (connections[dbName]) {
29
+ return connections[dbName]; // Return existing connection
30
+ }
31
+ try {
32
+ const connectionString = `mongodb://Ps:Letmein987@127.0.0.1:27017/${dbName}${source}`;
33
+ const dbConnection = await mongoose.createConnection(connectionString, {
34
+ useNewUrlParser: true,
35
+ });
36
+ connections[dbName] = dbConnection; // Store the connection for reuse
37
+ console.log(`Switched to database: ${dbName}`);
38
+ return dbConnection;
39
+ } catch (err) {
40
+ console.error(`Error switching to database: ${dbName}`, err);
41
+ throw err;
42
+ }
43
+ }
44
+
45
+
46
+ // Importing all model files (Note: models may need to be re-registered for different connections)
47
+ const models = {
48
+ User: require('./src/models/user'),
49
+ AuditLog: require('./src/models/auditlog'),
50
+ Company: require('./src/models/company'),
51
+ Customer: require('./src/models/customer'),
52
+ Email: require('./src/models/email'),
53
+ Module: require('./src/models/module'),
54
+ Facility: require('./src/models/facility'),
55
+ RefreshToken: require('./src/models/refresh_token'),
56
+ ApiLog: require('./src/models/apilog'),
57
+ ArchivedApiLog: require('./src/models/archivedapilog'),
58
+ ArchivedAuditLog: require('./src/models/archivedauditlog'),
59
+ FacilityAsset: require('./src/models/facilityasset'),
60
+ Unit: require('./src/models/units'),
61
+ FAQ: require('./src/models/faq'),
62
+ UnitAsset: require('./src/models/unitasset'),
63
+ CombinedUnit: require('./src/models/combinedUnits'),
64
+ Message: require('./src/models/message'),
65
+ SMSAfricastalking: require('./src/models/sms_africastalking'),
66
+ SMSMeliora: require('./src/models/sms_meliora'),
67
+ WaterConcentrator: require('./src/models/waterConcentrator'),
68
+ WaterMeter: require('./src/models/waterMeter'),
69
+ WaterMeterSettings: require('./src/models/waterMeterSetting'),
70
+ EntryExit: require('./src/models/entry_exit'),
71
+ Guard: require('./src/models/guard'),
72
+ Visitor: require('./src/models/visitor'),
73
+ VisitLog: require('./src/models/visitLog'),
74
+ Settings: require('./src/models/settings'),
75
+ Contract: require('./src/models/contract'),
76
+ Levy: require('./src/models/levy'),
77
+ LevyType: require('./src/models/levytype'),
78
+ Invoice: require('./src/models/invoice'),
79
+ Tax: require('./src/models/tax'),
80
+ InvoiceBillingSetting: require('./src/models/invoiceBillingSetting'),
81
+ Penalty: require('./src/models/penalty'),
82
+ Reminder: require('./src/models/reminder'),
83
+ BankDetails: require('./src/models/bankdetails'),
84
+ John:require('./src/models/john')
85
+ };
86
+
87
+ // Function to get models dynamically from a specific database connection
88
+ async function getModelFromDB(dbConnection, modelName, schema) {
89
+ if (!dbConnection.models[modelName]) {
90
+ return dbConnection.model(modelName, schema); // Register the model in the db connection
91
+ }
92
+ return dbConnection.models[modelName]; // Return existing model if already registered
93
+ }
94
+
95
+ module.exports = {
96
+ connectToMongoDB,
97
+ switchDB,
98
+ getModelFromDB,
99
+ ...models // Spread operator to export all models
100
+ }
package/package.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "lfra_db",
3
+ "version": "1.0.0",
4
+ "main": "index.js",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1"
7
+ },
8
+ "keywords": [],
9
+ "author": "",
10
+ "license": "ISC",
11
+ "description": "",
12
+ "dependencies": {
13
+ "dotenv": "^16.4.5",
14
+ "mongoose": "^8.3.5"
15
+ }
16
+ }
@@ -0,0 +1,18 @@
1
+ // models/apiLog.js
2
+ const mongoose = require('mongoose');
3
+ const { Schema } = mongoose;
4
+
5
+ const apiLogSchema = new Schema({
6
+ url: { type: String, required: true, index: true },
7
+ method: { type: String, required: true, index: true },
8
+ duration: { type: Number, required: true },
9
+ time: { type: Date, default: Date.now, required: true, index: true },
10
+ date: { type: String, required: true, index: true },
11
+ });
12
+
13
+
14
+ apiLogSchema.index({ time: 1 }, { expireAfterSeconds: 60 * 60 * 24 * 365 });
15
+
16
+ const ApiLog = mongoose.model('ApiLog', apiLogSchema);
17
+
18
+ module.exports = ApiLog;
@@ -0,0 +1,18 @@
1
+
2
+ const mongoose = require('mongoose');
3
+ const { Schema } = mongoose;
4
+
5
+ const ArchivedApiLogSchema = new Schema({
6
+ url: { type: String, required: true, index: true },
7
+ method: { type: String, required: true, enum: ['GET', 'POST', 'PUT', 'DELETE'], index: true },
8
+ duration: { type: Number, required: true },
9
+ time: { type: Date, default: Date.now, required: true, index: true },
10
+ date: { type: String, required: true, index: true },
11
+ });
12
+
13
+
14
+ ArchivedApiLogSchema.index({ time: 1 }, { expireAfterSeconds: 60 * 60 * 24 * 365 });
15
+
16
+ const ArchivedApiLog = mongoose.model('ArchivedApiLog', ArchivedApiLogSchema);
17
+
18
+ module.exports = ArchivedApiLog;
@@ -0,0 +1,83 @@
1
+ const mongoose = require('mongoose');
2
+
3
+ const ArchivedAuditLogSchema = new mongoose.Schema({
4
+ action: {
5
+ type: String,
6
+ required: true,
7
+ trim: true
8
+ },
9
+ page: {
10
+ type: String,
11
+ required: true,
12
+ trim: true
13
+ },
14
+ userId: {
15
+ type: mongoose.Schema.Types.ObjectId,
16
+ ref: 'Company',
17
+ required: true
18
+ },
19
+ userInfo: {
20
+ type: mongoose.Schema.Types.Mixed,
21
+ required: true
22
+ },
23
+ projectId: {
24
+ type: mongoose.Schema.Types.ObjectId,
25
+ ref: 'Project',
26
+ required: true
27
+ },
28
+ projectInfo: {
29
+ type: mongoose.Schema.Types.Mixed,
30
+ required: true
31
+ },
32
+ computerName: {
33
+ type: String,
34
+ required: true,
35
+ trim: true
36
+ },
37
+ browser: {
38
+ type: String,
39
+ required: true,
40
+ trim: true
41
+ },
42
+ ipAddress: {
43
+ type: String,
44
+ required: true,
45
+ trim: true
46
+ },
47
+ time: {
48
+ type: String,
49
+ required: true,
50
+ trim: true
51
+ },
52
+ date: {
53
+ type: String,
54
+ required: true,
55
+ trim: true
56
+ },
57
+ createdOn: {
58
+ type: Date,
59
+ default: Date.now,
60
+ required: true
61
+ },
62
+ oldData: {
63
+ type: mongoose.Schema.Types.Mixed,
64
+ default: {}
65
+ },
66
+ newData: {
67
+ type: mongoose.Schema.Types.Mixed,
68
+ default: {}
69
+ },
70
+ deletedData: {
71
+ type: mongoose.Schema.Types.Mixed,
72
+ default: {}
73
+ }
74
+ }, {
75
+ timestamps: true
76
+ });
77
+
78
+ ArchivedAuditLogSchema.index({ userId: 1, projectId: 1, createdOn: -1 });
79
+ ArchivedAuditLogSchema.index({ action: 1 });
80
+ ArchivedAuditLogSchema.index({ page: 1 });
81
+ const ArchivedAuditLog = mongoose.model('ArchivedAuditLog', ArchivedAuditLogSchema);
82
+
83
+ module.exports = ArchivedAuditLog;
@@ -0,0 +1,83 @@
1
+ const mongoose = require('mongoose');
2
+
3
+ const auditLogSchema = new mongoose.Schema({
4
+ action: {
5
+ type: String,
6
+ required: true,
7
+ trim: true
8
+ },
9
+ page: {
10
+ type: String,
11
+ required: true,
12
+ trim: true
13
+ },
14
+ userId: {
15
+ type: mongoose.Schema.Types.ObjectId,
16
+ ref: 'Company',
17
+ required: true
18
+ },
19
+ userInfo: {
20
+ type: mongoose.Schema.Types.Mixed,
21
+ required: true
22
+ },
23
+ projectId: {
24
+ type: mongoose.Schema.Types.ObjectId,
25
+ ref: 'Project',
26
+ required: true
27
+ },
28
+ projectInfo: {
29
+ type: mongoose.Schema.Types.Mixed,
30
+ required: true
31
+ },
32
+ computerName: {
33
+ type: String,
34
+ required: true,
35
+ trim: true
36
+ },
37
+ browser: {
38
+ type: String,
39
+ required: true,
40
+ trim: true
41
+ },
42
+ ipAddress: {
43
+ type: String,
44
+ required: true,
45
+ trim: true
46
+ },
47
+ time: {
48
+ type: String,
49
+ required: true,
50
+ trim: true
51
+ },
52
+ date: {
53
+ type: String,
54
+ required: true,
55
+ trim: true
56
+ },
57
+ createdOn: {
58
+ type: Date,
59
+ default: Date.now,
60
+ required: true
61
+ },
62
+ oldData: {
63
+ type: mongoose.Schema.Types.Mixed,
64
+ default: {}
65
+ },
66
+ newData: {
67
+ type: mongoose.Schema.Types.Mixed,
68
+ default: {}
69
+ },
70
+ deletedData: {
71
+ type: mongoose.Schema.Types.Mixed,
72
+ default: {}
73
+ }
74
+ }, {
75
+ timestamps: true
76
+ });
77
+
78
+ auditLogSchema.index({ userId: 1, projectId: 1, createdOn: -1 });
79
+ auditLogSchema.index({ action: 1 });
80
+ auditLogSchema.index({ page: 1 });
81
+ const AuditLog = mongoose.model('AuditLog', auditLogSchema);
82
+
83
+ module.exports = AuditLog;
@@ -0,0 +1,40 @@
1
+ const mongoose = require('mongoose');
2
+
3
+ const BankDetailsSchema = new mongoose.Schema({
4
+ accountName: {
5
+ type: String,
6
+ required: true
7
+ },
8
+ accountNumber: {
9
+ type: String,
10
+ required: true,
11
+ },
12
+ bankName: {
13
+ type: String,
14
+ required: true,
15
+ },
16
+ branchName: {
17
+ type: String,
18
+ required: true,
19
+ },
20
+ branchCode: {
21
+ type: String,
22
+ required: false,
23
+ },
24
+ bankCode: {
25
+ type: String,
26
+ required: false,
27
+ },
28
+ isDefault: {
29
+ type: Boolean,
30
+ default: false
31
+ },
32
+ facilityId: {
33
+ type: mongoose.Schema.Types.ObjectId,
34
+ ref: 'Facility'
35
+ },
36
+ });
37
+
38
+ const BankDetails = mongoose.model('BankDetails', BankDetailsSchema);
39
+
40
+ module.exports = BankDetails;
@@ -0,0 +1,62 @@
1
+ const mongoose = require('mongoose');
2
+
3
+ // Define the schema for companies
4
+ const combinedUnitSchema = new mongoose.Schema({
5
+ combinedUnitName: {
6
+ type: String,
7
+ required: true
8
+ },
9
+ combinedDivision:{
10
+ type:String,
11
+ required:true
12
+ },
13
+ combinedUnitType:{
14
+ type:String,
15
+ required:true
16
+ },
17
+ combinedFloorUnit:{
18
+ type:String,
19
+ required:true
20
+ },
21
+ combinedLettableFloorArea:{
22
+ type:String,
23
+ required:false
24
+ },
25
+ combinedLRNumber:{
26
+ type:String,
27
+ required:true
28
+ },
29
+ combinedGrossArea:{
30
+ type:Number,
31
+ required:false
32
+ },
33
+ combinedNetLettableArea:{
34
+ type:Number,
35
+ required:false
36
+ },
37
+ combinedReason:{
38
+ type:String,
39
+ required:false
40
+ },
41
+ status:{
42
+ type:String,
43
+ required:true
44
+ },
45
+ selectedCombinedUnits:[],
46
+ facilityId:{
47
+ type: mongoose.Schema.Types.ObjectId,
48
+ ref: 'Facility',
49
+ }
50
+
51
+
52
+ }, {
53
+ timestamps: true // Automatically add createdAt and updatedAt fields
54
+ });
55
+
56
+ // Indexes for improved performance
57
+ combinedUnitSchema.index({ name: 1 });
58
+
59
+ // Compile the model from the schema
60
+ const CombinedUnit = mongoose.model('CombinedUnit', combinedUnitSchema);
61
+
62
+ module.exports = CombinedUnit;
@@ -0,0 +1,52 @@
1
+ const mongoose = require('mongoose');
2
+
3
+ // Define the schema for companies
4
+ const companySchema = new mongoose.Schema({
5
+ name: {
6
+ type: String,
7
+ required: [true, 'Company name is required'],
8
+ trim: true,
9
+ minlength: [1, 'Company name must be at least 1 character long']
10
+ },
11
+ address: {
12
+ type: String,
13
+ required: false
14
+ },
15
+ country: { type: String, required: false },
16
+ email: { type: String, required: true },
17
+ city: { type: String, required: true },
18
+ registrationNumber:{ type: String, required: true },
19
+ companyTaxNumber:{type:String,required:true},
20
+ logo: {
21
+ type: String,
22
+ trim: false,
23
+ default: null
24
+ },
25
+ isEnabled: { type: Boolean, default: false },
26
+ kyc: {
27
+ taxCertificate: {
28
+ type: String
29
+ },
30
+ Id: {
31
+ type: String
32
+ },
33
+ companyCertificate: {
34
+ type: String
35
+ }
36
+ },
37
+
38
+ facilities: [{
39
+ type: mongoose.Schema.Types.ObjectId,
40
+ ref: 'Facility'
41
+ }]
42
+ }, {
43
+ timestamps: true // Automatically add createdAt and updatedAt fields
44
+ });
45
+
46
+ // Indexes for improved performance
47
+ companySchema.index({ name: 1 });
48
+
49
+ // Compile the model from the schema
50
+ const Company = mongoose.model('Company', companySchema);
51
+
52
+ module.exports = Company;
@@ -0,0 +1,42 @@
1
+ const mongoose = require('mongoose');
2
+
3
+ const contractSchema = new mongoose.Schema({
4
+ contractName: {
5
+ type: String,
6
+ required: true
7
+ },
8
+ contractStart: {
9
+ type: String,
10
+ required: true
11
+ },
12
+ contractEnd: {
13
+ type: String,
14
+ required: true
15
+ },
16
+ levy: {
17
+ type: mongoose.Schema.Types.ObjectId,
18
+ ref: 'Levy',
19
+ required: [true, 'Levy is required'],
20
+ },
21
+ units:[],
22
+ disabled: {
23
+ type: Boolean,
24
+ default: false
25
+ },
26
+ facilityId: {
27
+ type: mongoose.Schema.Types.ObjectId,
28
+ ref: 'Facility',
29
+ required: true
30
+ },
31
+ },
32
+ // { timestamps: true }
33
+ );
34
+
35
+ contractSchema.index({ contractName: 1 });
36
+
37
+ const Contract = mongoose.model('Contract', contractSchema);
38
+
39
+ module.exports = Contract;
40
+
41
+
42
+
@@ -0,0 +1,174 @@
1
+ const mongoose = require('mongoose');
2
+
3
+ const CustomerSchema = new mongoose.Schema({
4
+ customerNumber: {
5
+ type: Number,
6
+ required: true
7
+ },
8
+ firstName: {
9
+ type: String,
10
+ required: true,
11
+ },
12
+ lastName: {
13
+ type: String,
14
+ required: true,
15
+ },
16
+ phoneNumber: {
17
+ type: String,
18
+ required: true,
19
+ },
20
+ idNumber: {
21
+ type: String,
22
+ required: true,
23
+ },
24
+ email: {
25
+ type: String,
26
+ required: true
27
+ },
28
+ nextOfKinName: {
29
+ type: String,
30
+ required: true
31
+ },
32
+ nextOfKinRelationship: {
33
+ type: String,
34
+ required: true
35
+ },
36
+ nextOfKinContact: {
37
+ type: String,
38
+ required: true
39
+ },
40
+ customerType: {
41
+ type: String,
42
+ required: true
43
+ },
44
+ residentType: {
45
+ type: String,
46
+ required: true
47
+ },
48
+ facilityId: {
49
+ type: mongoose.Schema.Types.ObjectId,
50
+ ref: 'Facility'
51
+ },
52
+ status: {
53
+ type: String,
54
+ required: false,
55
+ enum: ['Active', 'Inactive']
56
+ },
57
+
58
+ familyMembers: [
59
+ {
60
+ no: {
61
+ type: Number,
62
+ required: false
63
+ },
64
+ name: {
65
+ type: String,
66
+ required: false,
67
+ },
68
+ phoneNumber: {
69
+ type: String,
70
+ required: false,
71
+ },
72
+ email: {
73
+ type: String,
74
+ required: false
75
+ },
76
+ relation: {
77
+ type: String,
78
+ required: false,
79
+ },
80
+ qrCode: {
81
+ type: Boolean,
82
+ required: false
83
+ },
84
+ addVisitor: {
85
+ type: Boolean,
86
+ required: false
87
+ },
88
+ receiveMessage: {
89
+ type: Boolean,
90
+ required: false
91
+ },
92
+ qrUniqueCode:
93
+ {
94
+ type: String,
95
+ unique: false
96
+ },
97
+ disabled: {
98
+ type: Boolean,
99
+ required: false
100
+ }
101
+ },
102
+ ],
103
+ staff: [
104
+ {
105
+ no: {
106
+ type: Number,
107
+ required: false
108
+ },
109
+ name: {
110
+ type: String,
111
+ required: false,
112
+ },
113
+ phoneNumber: {
114
+ type: String,
115
+ required: false,
116
+ },
117
+ jobRole: {
118
+ type: String,
119
+ required: false,
120
+ },
121
+ qrCode: {
122
+ type: Boolean,
123
+ required: false
124
+ },
125
+ qrUniqueCode:
126
+ { type: String, unique: false },
127
+
128
+ disabled: {
129
+ type: Boolean,
130
+ required: false
131
+ },
132
+
133
+ },
134
+ ],
135
+ vehicles: [
136
+ {
137
+ no: {
138
+ type: Number,
139
+ required: false
140
+ },
141
+ registration: {
142
+ type: String,
143
+ required: false
144
+ },
145
+ name: {
146
+ type: String,
147
+ required: false
148
+ },
149
+ model: {
150
+ type: String,
151
+ required: false
152
+ },
153
+ plateNumber: {
154
+ type: String,
155
+ required: false
156
+ },
157
+
158
+ qrCode: {
159
+ type: Boolean,
160
+ required: false
161
+ },
162
+ qrUniqueCode: { type: String, unique: false }
163
+ ,
164
+ disabled: {
165
+ type: Boolean,
166
+ required: false
167
+ }
168
+ },
169
+ ],
170
+ });
171
+
172
+ const Customer = mongoose.model('Customer', CustomerSchema);
173
+
174
+ module.exports = Customer;