@arikajs/database 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +333 -0
- package/dist/Connections/MySQLConnection.d.ts +39 -0
- package/dist/Connections/MySQLConnection.d.ts.map +1 -0
- package/dist/Connections/MySQLConnection.js +91 -0
- package/dist/Connections/MySQLConnection.js.map +1 -0
- package/dist/Connections/PostgreSQLConnection.d.ts +39 -0
- package/dist/Connections/PostgreSQLConnection.d.ts.map +1 -0
- package/dist/Connections/PostgreSQLConnection.js +85 -0
- package/dist/Connections/PostgreSQLConnection.js.map +1 -0
- package/dist/Connections/SQLiteConnection.d.ts +51 -0
- package/dist/Connections/SQLiteConnection.d.ts.map +1 -0
- package/dist/Connections/SQLiteConnection.js +111 -0
- package/dist/Connections/SQLiteConnection.js.map +1 -0
- package/dist/Contracts/Database.d.ts +131 -0
- package/dist/Contracts/Database.d.ts.map +1 -0
- package/dist/Contracts/Database.js +3 -0
- package/dist/Contracts/Database.js.map +1 -0
- package/dist/Contracts/Schema.d.ts +124 -0
- package/dist/Contracts/Schema.d.ts.map +1 -0
- package/dist/Contracts/Schema.js +3 -0
- package/dist/Contracts/Schema.js.map +1 -0
- package/dist/Database.d.ts +38 -0
- package/dist/Database.d.ts.map +1 -0
- package/dist/Database.js +55 -0
- package/dist/Database.js.map +1 -0
- package/dist/DatabaseManager.d.ts +36 -0
- package/dist/DatabaseManager.d.ts.map +1 -0
- package/dist/DatabaseManager.js +126 -0
- package/dist/DatabaseManager.js.map +1 -0
- package/dist/Migrations/Migration.d.ts +17 -0
- package/dist/Migrations/Migration.d.ts.map +1 -0
- package/dist/Migrations/Migration.js +10 -0
- package/dist/Migrations/Migration.js.map +1 -0
- package/dist/Migrations/Migrator.d.ts +51 -0
- package/dist/Migrations/Migrator.d.ts.map +1 -0
- package/dist/Migrations/Migrator.js +166 -0
- package/dist/Migrations/Migrator.js.map +1 -0
- package/dist/Model/Model.d.ts +309 -0
- package/dist/Model/Model.d.ts.map +1 -0
- package/dist/Model/Model.js +607 -0
- package/dist/Model/Model.js.map +1 -0
- package/dist/Model/Relations.d.ts +53 -0
- package/dist/Model/Relations.d.ts.map +1 -0
- package/dist/Model/Relations.js +124 -0
- package/dist/Model/Relations.js.map +1 -0
- package/dist/Model/SoftDeletes.d.ts +24 -0
- package/dist/Model/SoftDeletes.d.ts.map +1 -0
- package/dist/Model/SoftDeletes.js +95 -0
- package/dist/Model/SoftDeletes.js.map +1 -0
- package/dist/Query/QueryBuilder.d.ts +94 -0
- package/dist/Query/QueryBuilder.d.ts.map +1 -0
- package/dist/Query/QueryBuilder.js +276 -0
- package/dist/Query/QueryBuilder.js.map +1 -0
- package/dist/Schema/Grammars/Grammar.d.ts +27 -0
- package/dist/Schema/Grammars/Grammar.d.ts.map +1 -0
- package/dist/Schema/Grammars/Grammar.js +25 -0
- package/dist/Schema/Grammars/Grammar.js.map +1 -0
- package/dist/Schema/Grammars/MySQLGrammar.d.ts +13 -0
- package/dist/Schema/Grammars/MySQLGrammar.d.ts.map +1 -0
- package/dist/Schema/Grammars/MySQLGrammar.js +78 -0
- package/dist/Schema/Grammars/MySQLGrammar.js.map +1 -0
- package/dist/Schema/Grammars/PostgreSQLGrammar.d.ts +13 -0
- package/dist/Schema/Grammars/PostgreSQLGrammar.d.ts.map +1 -0
- package/dist/Schema/Grammars/PostgreSQLGrammar.js +57 -0
- package/dist/Schema/Grammars/PostgreSQLGrammar.js.map +1 -0
- package/dist/Schema/Grammars/SQLiteGrammar.d.ts +13 -0
- package/dist/Schema/Grammars/SQLiteGrammar.d.ts.map +1 -0
- package/dist/Schema/Grammars/SQLiteGrammar.js +53 -0
- package/dist/Schema/Grammars/SQLiteGrammar.js.map +1 -0
- package/dist/Schema/Schema.d.ts +120 -0
- package/dist/Schema/Schema.d.ts.map +1 -0
- package/dist/Schema/Schema.js +226 -0
- package/dist/Schema/Schema.js.map +1 -0
- package/dist/Schema/SchemaBuilder.d.ts +24 -0
- package/dist/Schema/SchemaBuilder.d.ts.map +1 -0
- package/dist/Schema/SchemaBuilder.js +49 -0
- package/dist/Schema/SchemaBuilder.js.map +1 -0
- package/dist/Seeders/SeedRunner.d.ts +22 -0
- package/dist/Seeders/SeedRunner.d.ts.map +1 -0
- package/dist/Seeders/SeedRunner.js +72 -0
- package/dist/Seeders/SeedRunner.js.map +1 -0
- package/dist/Seeders/Seeder.d.ts +11 -0
- package/dist/Seeders/Seeder.d.ts.map +1 -0
- package/dist/Seeders/Seeder.js +10 -0
- package/dist/Seeders/Seeder.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModelQueryBuilder = exports.Model = void 0;
|
|
4
|
+
const Database_1 = require("../Database");
|
|
5
|
+
const Relations_1 = require("./Relations");
|
|
6
|
+
/**
|
|
7
|
+
* Base Model class for Active Record pattern
|
|
8
|
+
*/
|
|
9
|
+
class Model {
|
|
10
|
+
constructor() {
|
|
11
|
+
/**
|
|
12
|
+
* Instance table name (for backward compatibility)
|
|
13
|
+
*/
|
|
14
|
+
this.table = '';
|
|
15
|
+
/**
|
|
16
|
+
* Instance primary key (for backward compatibility)
|
|
17
|
+
*/
|
|
18
|
+
this.primaryKey = 'id';
|
|
19
|
+
/**
|
|
20
|
+
* Indicates if the model exists in the database
|
|
21
|
+
*/
|
|
22
|
+
this.exists = false;
|
|
23
|
+
/**
|
|
24
|
+
* The model's original attributes (for dirty checking)
|
|
25
|
+
*/
|
|
26
|
+
this.original = {};
|
|
27
|
+
/**
|
|
28
|
+
* The model's attributes
|
|
29
|
+
*/
|
|
30
|
+
this.attributes = {};
|
|
31
|
+
/**
|
|
32
|
+
* Loaded relationships
|
|
33
|
+
*/
|
|
34
|
+
this.relations = {};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create a new query builder for the model
|
|
38
|
+
*/
|
|
39
|
+
static query() {
|
|
40
|
+
const queryBuilder = Database_1.Database.table(this.getTableName(), this.getConnectionName());
|
|
41
|
+
return new ModelQueryBuilder(queryBuilder, this);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Find a record by ID
|
|
45
|
+
*/
|
|
46
|
+
static async find(id) {
|
|
47
|
+
return this.query().find(id);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Find a record by ID or throw an error
|
|
51
|
+
*/
|
|
52
|
+
static async findOrFail(id) {
|
|
53
|
+
const result = await this.find(id);
|
|
54
|
+
if (!result) {
|
|
55
|
+
throw new Error(`${this.name} not found with ID ${id}`);
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get all records
|
|
61
|
+
*/
|
|
62
|
+
static async all() {
|
|
63
|
+
return this.query().all();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Add a where clause
|
|
67
|
+
*/
|
|
68
|
+
static where(column, operator, value) {
|
|
69
|
+
return this.query().where(column, operator, value);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Add an OR where clause
|
|
73
|
+
*/
|
|
74
|
+
static orWhere(column, operator, value) {
|
|
75
|
+
return this.query().orWhere(column, operator, value);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Add a where in clause
|
|
79
|
+
*/
|
|
80
|
+
static whereIn(column, values) {
|
|
81
|
+
return this.query().whereIn(column, values);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Add a where not in clause
|
|
85
|
+
*/
|
|
86
|
+
static whereNotIn(column, values) {
|
|
87
|
+
return this.query().whereNotIn(column, values);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Add a where null clause
|
|
91
|
+
*/
|
|
92
|
+
static whereNull(column) {
|
|
93
|
+
return this.query().whereNull(column);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Add a where not null clause
|
|
97
|
+
*/
|
|
98
|
+
static whereNotNull(column) {
|
|
99
|
+
return this.query().whereNotNull(column);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Add an order by clause
|
|
103
|
+
*/
|
|
104
|
+
static orderBy(column, direction) {
|
|
105
|
+
return this.query().orderBy(column, direction);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Add a limit clause
|
|
109
|
+
*/
|
|
110
|
+
static limit(limit) {
|
|
111
|
+
return this.query().limit(limit);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Add an offset clause
|
|
115
|
+
*/
|
|
116
|
+
static offset(offset) {
|
|
117
|
+
return this.query().offset(offset);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Create a new record
|
|
121
|
+
*/
|
|
122
|
+
static async create(data) {
|
|
123
|
+
return this.query().create(data);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get the first record
|
|
127
|
+
*/
|
|
128
|
+
static async first() {
|
|
129
|
+
return this.query().first();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get records
|
|
133
|
+
*/
|
|
134
|
+
static async get() {
|
|
135
|
+
return this.query().get();
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get the count of records
|
|
139
|
+
*/
|
|
140
|
+
static async count(column) {
|
|
141
|
+
return this.query().count(column);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Eager load relationships
|
|
145
|
+
*/
|
|
146
|
+
static with(relations) {
|
|
147
|
+
return this.query().with(relations);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Delete a record by ID
|
|
151
|
+
*/
|
|
152
|
+
static async delete(id) {
|
|
153
|
+
return this.query().delete(id);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get the table name
|
|
157
|
+
*/
|
|
158
|
+
static getTableName() {
|
|
159
|
+
if (!this.table) {
|
|
160
|
+
throw new Error('Table name not defined for model');
|
|
161
|
+
}
|
|
162
|
+
return this.table;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get the connection name
|
|
166
|
+
*/
|
|
167
|
+
static getConnectionName() {
|
|
168
|
+
return this.connection;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get the primary key
|
|
172
|
+
*/
|
|
173
|
+
static getPrimaryKeyName() {
|
|
174
|
+
return this.primaryKey;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get the table name (instance method)
|
|
178
|
+
*/
|
|
179
|
+
getTable() {
|
|
180
|
+
const constructor = this.constructor;
|
|
181
|
+
return constructor.getTableName();
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get the connection name (instance method)
|
|
185
|
+
*/
|
|
186
|
+
getConnection() {
|
|
187
|
+
const constructor = this.constructor;
|
|
188
|
+
return constructor.getConnectionName();
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get the primary key (instance method)
|
|
192
|
+
*/
|
|
193
|
+
getPrimaryKey() {
|
|
194
|
+
const constructor = this.constructor;
|
|
195
|
+
return constructor.getPrimaryKeyName();
|
|
196
|
+
}
|
|
197
|
+
// ==================== Instance Methods ====================
|
|
198
|
+
/**
|
|
199
|
+
* Get an attribute value
|
|
200
|
+
*/
|
|
201
|
+
getAttribute(key) {
|
|
202
|
+
return this.attributes[key];
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Set an attribute value
|
|
206
|
+
*/
|
|
207
|
+
setAttribute(key, value) {
|
|
208
|
+
this.attributes[key] = value;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Fill the model with an array of attributes
|
|
212
|
+
*/
|
|
213
|
+
fill(attributes) {
|
|
214
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
215
|
+
this.setAttribute(key, value);
|
|
216
|
+
}
|
|
217
|
+
return this;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Save the model to the database
|
|
221
|
+
*/
|
|
222
|
+
async save() {
|
|
223
|
+
const query = Database_1.Database.table(this.getTable(), this.getConnection());
|
|
224
|
+
if (this.exists) {
|
|
225
|
+
// Update existing record
|
|
226
|
+
const primaryKey = this.getPrimaryKey();
|
|
227
|
+
const id = this.attributes[primaryKey];
|
|
228
|
+
if (!id) {
|
|
229
|
+
throw new Error('Cannot update model without primary key value');
|
|
230
|
+
}
|
|
231
|
+
const dirty = this.getDirty();
|
|
232
|
+
if (Object.keys(dirty).length === 0) {
|
|
233
|
+
return true; // No changes to save
|
|
234
|
+
}
|
|
235
|
+
await query.where(primaryKey, id).update(dirty);
|
|
236
|
+
this.syncOriginal();
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
// Insert new record
|
|
241
|
+
const result = await query.insert(this.attributes);
|
|
242
|
+
// Set the primary key if it was auto-generated
|
|
243
|
+
const primaryKey = this.getPrimaryKey();
|
|
244
|
+
if (result && result.insertId && !this.attributes[primaryKey]) {
|
|
245
|
+
this.attributes[primaryKey] = result.insertId;
|
|
246
|
+
}
|
|
247
|
+
this.exists = true;
|
|
248
|
+
this.syncOriginal();
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Delete the model from the database
|
|
254
|
+
*/
|
|
255
|
+
async deleteInstance() {
|
|
256
|
+
if (!this.exists) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
const primaryKey = this.getPrimaryKey();
|
|
260
|
+
const id = this.attributes[primaryKey];
|
|
261
|
+
if (!id) {
|
|
262
|
+
throw new Error('Cannot delete model without primary key value');
|
|
263
|
+
}
|
|
264
|
+
const query = Database_1.Database.table(this.getTable(), this.getConnection());
|
|
265
|
+
await query.where(primaryKey, id).delete();
|
|
266
|
+
this.exists = false;
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Refresh the model from the database
|
|
271
|
+
*/
|
|
272
|
+
async refresh() {
|
|
273
|
+
if (!this.exists) {
|
|
274
|
+
throw new Error('Cannot refresh a model that does not exist');
|
|
275
|
+
}
|
|
276
|
+
const primaryKey = this.getPrimaryKey();
|
|
277
|
+
const id = this.attributes[primaryKey];
|
|
278
|
+
const fresh = await Database_1.Database.table(this.getTable(), this.getConnection())
|
|
279
|
+
.where(primaryKey, id)
|
|
280
|
+
.first();
|
|
281
|
+
if (!fresh) {
|
|
282
|
+
throw new Error('Model not found in database');
|
|
283
|
+
}
|
|
284
|
+
this.attributes = fresh;
|
|
285
|
+
this.syncOriginal();
|
|
286
|
+
return this;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Get the attributes that have been changed since last sync
|
|
290
|
+
*/
|
|
291
|
+
getDirty() {
|
|
292
|
+
const dirty = {};
|
|
293
|
+
for (const [key, value] of Object.entries(this.attributes)) {
|
|
294
|
+
if (this.original[key] !== value) {
|
|
295
|
+
dirty[key] = value;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return dirty;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Check if the model or specific attribute is dirty
|
|
302
|
+
*/
|
|
303
|
+
isDirty(attribute) {
|
|
304
|
+
if (attribute) {
|
|
305
|
+
return this.original[attribute] !== this.attributes[attribute];
|
|
306
|
+
}
|
|
307
|
+
return Object.keys(this.getDirty()).length > 0;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Sync the original attributes with the current attributes
|
|
311
|
+
*/
|
|
312
|
+
syncOriginal() {
|
|
313
|
+
this.original = { ...this.attributes };
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Mark the model as existing
|
|
317
|
+
*/
|
|
318
|
+
setExists(exists) {
|
|
319
|
+
this.exists = exists;
|
|
320
|
+
return this;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Convert the model to a plain object
|
|
324
|
+
*/
|
|
325
|
+
toJSON() {
|
|
326
|
+
return {
|
|
327
|
+
...this.attributes,
|
|
328
|
+
...this.relations,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
// ==================== Relationship Methods ====================
|
|
332
|
+
/**
|
|
333
|
+
* Define a has-one relationship
|
|
334
|
+
*/
|
|
335
|
+
hasOne(related, foreignKey, localKey) {
|
|
336
|
+
const fk = foreignKey || `${this.getTable()}_id`;
|
|
337
|
+
const lk = localKey || this.getPrimaryKey();
|
|
338
|
+
return new Relations_1.HasOne(related, this, fk, lk);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Define a has-many relationship
|
|
342
|
+
*/
|
|
343
|
+
hasMany(related, foreignKey, localKey) {
|
|
344
|
+
const fk = foreignKey || `${this.getTable()}_id`;
|
|
345
|
+
const lk = localKey || this.getPrimaryKey();
|
|
346
|
+
return new Relations_1.HasMany(related, this, fk, lk);
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Define a belongs-to relationship
|
|
350
|
+
*/
|
|
351
|
+
belongsTo(related, foreignKey, ownerKey) {
|
|
352
|
+
const relatedTable = related.table;
|
|
353
|
+
const fk = foreignKey || `${relatedTable}_id`;
|
|
354
|
+
const ok = ownerKey || 'id';
|
|
355
|
+
return new Relations_1.BelongsTo(related, this, fk, ok);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Define a belongs-to-many relationship
|
|
359
|
+
*/
|
|
360
|
+
belongsToMany(related, pivotTable, foreignPivotKey, relatedPivotKey, parentKey, relatedKey) {
|
|
361
|
+
const relatedTable = related.table;
|
|
362
|
+
const thisTable = this.getTable();
|
|
363
|
+
const pivot = pivotTable || [thisTable, relatedTable].sort().join('_');
|
|
364
|
+
const fpk = foreignPivotKey || `${thisTable}_id`;
|
|
365
|
+
const rpk = relatedPivotKey || `${relatedTable}_id`;
|
|
366
|
+
const pk = parentKey || this.getPrimaryKey();
|
|
367
|
+
const rk = relatedKey || 'id';
|
|
368
|
+
return new Relations_1.BelongsToMany(related, this, pivot, fpk, rpk, pk, rk);
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Get a relationship value
|
|
372
|
+
*/
|
|
373
|
+
getRelation(name) {
|
|
374
|
+
return this.relations[name];
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Set a relationship value
|
|
378
|
+
*/
|
|
379
|
+
setRelation(name, value) {
|
|
380
|
+
this.relations[name] = value;
|
|
381
|
+
return this;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Load a relationship
|
|
385
|
+
*/
|
|
386
|
+
async load(relation) {
|
|
387
|
+
if (typeof this[relation] === 'function') {
|
|
388
|
+
const relationInstance = this[relation]();
|
|
389
|
+
const result = await relationInstance.get();
|
|
390
|
+
this.setRelation(relation, result);
|
|
391
|
+
}
|
|
392
|
+
return this;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
exports.Model = Model;
|
|
396
|
+
/**
|
|
397
|
+
* The table associated with the model
|
|
398
|
+
*/
|
|
399
|
+
Model.table = '';
|
|
400
|
+
/**
|
|
401
|
+
* The primary key for the model
|
|
402
|
+
*/
|
|
403
|
+
Model.primaryKey = 'id';
|
|
404
|
+
/**
|
|
405
|
+
* Model query builder wrapper
|
|
406
|
+
*/
|
|
407
|
+
class ModelQueryBuilder {
|
|
408
|
+
constructor(queryBuilder, modelClass) {
|
|
409
|
+
this.queryBuilder = queryBuilder;
|
|
410
|
+
this.modelClass = modelClass;
|
|
411
|
+
this.eagerLoad = new Map();
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Get all records
|
|
415
|
+
*/
|
|
416
|
+
async all() {
|
|
417
|
+
const results = await this.queryBuilder.get();
|
|
418
|
+
const models = results.map(data => this.hydrate(data));
|
|
419
|
+
return await this.loadRelations(models);
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Find a record by ID
|
|
423
|
+
*/
|
|
424
|
+
async find(id) {
|
|
425
|
+
const instance = new this.modelClass();
|
|
426
|
+
const result = await this.queryBuilder
|
|
427
|
+
.where(instance['getPrimaryKey'](), id)
|
|
428
|
+
.first();
|
|
429
|
+
if (!result) {
|
|
430
|
+
return null;
|
|
431
|
+
}
|
|
432
|
+
const model = this.hydrate(result);
|
|
433
|
+
await this.loadRelations([model]);
|
|
434
|
+
return model;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Create a new record
|
|
438
|
+
*/
|
|
439
|
+
async create(data) {
|
|
440
|
+
const result = await this.queryBuilder.insert(data);
|
|
441
|
+
const instance = this.hydrate(data);
|
|
442
|
+
// Set the primary key if it was auto-generated
|
|
443
|
+
const primaryKey = instance['getPrimaryKey']();
|
|
444
|
+
if (result && result.insertId && !data[primaryKey]) {
|
|
445
|
+
instance.setAttribute(primaryKey, result.insertId);
|
|
446
|
+
}
|
|
447
|
+
instance.setExists(true);
|
|
448
|
+
instance['syncOriginal']();
|
|
449
|
+
return instance;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Add a where clause
|
|
453
|
+
*/
|
|
454
|
+
where(column, operator, value) {
|
|
455
|
+
this.queryBuilder.where(column, operator, value);
|
|
456
|
+
return this;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Add an OR where clause
|
|
460
|
+
*/
|
|
461
|
+
orWhere(column, operator, value) {
|
|
462
|
+
this.queryBuilder.orWhere(column, operator, value);
|
|
463
|
+
return this;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Add a where in clause
|
|
467
|
+
*/
|
|
468
|
+
whereIn(column, values) {
|
|
469
|
+
this.queryBuilder.whereIn(column, values);
|
|
470
|
+
return this;
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Add a where not in clause
|
|
474
|
+
*/
|
|
475
|
+
whereNotIn(column, values) {
|
|
476
|
+
this.queryBuilder.whereNotIn(column, values);
|
|
477
|
+
return this;
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Add a where null clause
|
|
481
|
+
*/
|
|
482
|
+
whereNull(column) {
|
|
483
|
+
this.queryBuilder.whereNull(column);
|
|
484
|
+
return this;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Add a where not null clause
|
|
488
|
+
*/
|
|
489
|
+
whereNotNull(column) {
|
|
490
|
+
this.queryBuilder.whereNotNull(column);
|
|
491
|
+
return this;
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Add an order by clause
|
|
495
|
+
*/
|
|
496
|
+
orderBy(column, direction) {
|
|
497
|
+
this.queryBuilder.orderBy(column, direction);
|
|
498
|
+
return this;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Add a limit clause
|
|
502
|
+
*/
|
|
503
|
+
limit(limit) {
|
|
504
|
+
this.queryBuilder.limit(limit);
|
|
505
|
+
return this;
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Add an offset clause
|
|
509
|
+
*/
|
|
510
|
+
offset(offset) {
|
|
511
|
+
this.queryBuilder.offset(offset);
|
|
512
|
+
return this;
|
|
513
|
+
}
|
|
514
|
+
/**
|
|
515
|
+
* Update records
|
|
516
|
+
*/
|
|
517
|
+
async update(data) {
|
|
518
|
+
return await this.queryBuilder.update(data);
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Delete a record by ID
|
|
522
|
+
*/
|
|
523
|
+
async delete(id) {
|
|
524
|
+
if (id !== undefined) {
|
|
525
|
+
const instance = new this.modelClass();
|
|
526
|
+
this.queryBuilder.where(instance['getPrimaryKey'](), id);
|
|
527
|
+
}
|
|
528
|
+
return await this.queryBuilder.delete();
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Get the first record
|
|
532
|
+
*/
|
|
533
|
+
async first() {
|
|
534
|
+
const result = await this.queryBuilder.first();
|
|
535
|
+
if (!result) {
|
|
536
|
+
return null;
|
|
537
|
+
}
|
|
538
|
+
const model = this.hydrate(result);
|
|
539
|
+
await this.loadRelations([model]);
|
|
540
|
+
return model;
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Get records
|
|
544
|
+
*/
|
|
545
|
+
async get() {
|
|
546
|
+
const results = await this.queryBuilder.get();
|
|
547
|
+
const models = results.map(data => this.hydrate(data));
|
|
548
|
+
return await this.loadRelations(models);
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Get the count of records
|
|
552
|
+
*/
|
|
553
|
+
async count(column) {
|
|
554
|
+
return await this.queryBuilder.count(column);
|
|
555
|
+
}
|
|
556
|
+
/**
|
|
557
|
+
* Eager load relationships
|
|
558
|
+
*/
|
|
559
|
+
with(relations) {
|
|
560
|
+
if (typeof relations === 'string') {
|
|
561
|
+
this.eagerLoad.set(relations, null);
|
|
562
|
+
}
|
|
563
|
+
else if (Array.isArray(relations)) {
|
|
564
|
+
relations.forEach(rel => this.eagerLoad.set(rel, null));
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
Object.entries(relations).forEach(([rel, callback]) => {
|
|
568
|
+
this.eagerLoad.set(rel, callback);
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
return this;
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* Hydrate a model instance from data
|
|
575
|
+
*/
|
|
576
|
+
hydrate(data) {
|
|
577
|
+
const instance = new this.modelClass();
|
|
578
|
+
instance['attributes'] = { ...data };
|
|
579
|
+
instance['original'] = { ...data };
|
|
580
|
+
instance['exists'] = true;
|
|
581
|
+
return instance;
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* Load eager loaded relationships
|
|
585
|
+
*/
|
|
586
|
+
async loadRelations(models) {
|
|
587
|
+
if (models.length === 0 || this.eagerLoad.size === 0) {
|
|
588
|
+
return models;
|
|
589
|
+
}
|
|
590
|
+
for (const [relation, callback] of this.eagerLoad.entries()) {
|
|
591
|
+
for (const model of models) {
|
|
592
|
+
if (typeof model[relation] === 'function') {
|
|
593
|
+
const relationInstance = model[relation]();
|
|
594
|
+
// Apply callback if provided
|
|
595
|
+
if (callback && relationInstance.query) {
|
|
596
|
+
callback(relationInstance.query());
|
|
597
|
+
}
|
|
598
|
+
const result = await relationInstance.get();
|
|
599
|
+
model.setRelation(relation, result);
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
return models;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
exports.ModelQueryBuilder = ModelQueryBuilder;
|
|
607
|
+
//# sourceMappingURL=Model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Model.js","sourceRoot":"","sources":["../../src/Model/Model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Model, ModelQueryBuilder } from './Model';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for all relationship types
|
|
4
|
+
*/
|
|
5
|
+
export declare abstract class Relation<T extends Model = Model> {
|
|
6
|
+
protected related: typeof Model;
|
|
7
|
+
protected parent: Model;
|
|
8
|
+
constructor(related: typeof Model, parent: Model);
|
|
9
|
+
abstract get(): Promise<T | T[] | null>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Has One relationship
|
|
13
|
+
*/
|
|
14
|
+
export declare class HasOne<T extends Model = Model> extends Relation<T> {
|
|
15
|
+
protected foreignKey: string;
|
|
16
|
+
protected localKey: string;
|
|
17
|
+
constructor(related: typeof Model, parent: Model, foreignKey: string, localKey?: string);
|
|
18
|
+
get(): Promise<T | null>;
|
|
19
|
+
query(): ModelQueryBuilder<T>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Has Many relationship
|
|
23
|
+
*/
|
|
24
|
+
export declare class HasMany<T extends Model = Model> extends Relation<T> {
|
|
25
|
+
protected foreignKey: string;
|
|
26
|
+
protected localKey: string;
|
|
27
|
+
constructor(related: typeof Model, parent: Model, foreignKey: string, localKey?: string);
|
|
28
|
+
get(): Promise<T[]>;
|
|
29
|
+
query(): ModelQueryBuilder<T>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Belongs To relationship
|
|
33
|
+
*/
|
|
34
|
+
export declare class BelongsTo<T extends Model = Model> extends Relation<T> {
|
|
35
|
+
protected foreignKey: string;
|
|
36
|
+
protected ownerKey: string;
|
|
37
|
+
constructor(related: typeof Model, parent: Model, foreignKey: string, ownerKey?: string);
|
|
38
|
+
get(): Promise<T | null>;
|
|
39
|
+
query(): ModelQueryBuilder<T>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Belongs To Many relationship (many-to-many)
|
|
43
|
+
*/
|
|
44
|
+
export declare class BelongsToMany<T extends Model = Model> extends Relation<T> {
|
|
45
|
+
protected pivotTable: string;
|
|
46
|
+
protected foreignPivotKey: string;
|
|
47
|
+
protected relatedPivotKey: string;
|
|
48
|
+
protected parentKey: string;
|
|
49
|
+
protected relatedKey: string;
|
|
50
|
+
constructor(related: typeof Model, parent: Model, pivotTable: string, foreignPivotKey: string, relatedPivotKey: string, parentKey?: string, relatedKey?: string);
|
|
51
|
+
get(): Promise<T[]>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=Relations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Relations.d.ts","sourceRoot":"","sources":["../../src/Model/Relations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGnD;;GAEG;AACH,8BAAsB,QAAQ,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IAE9C,SAAS,CAAC,OAAO,EAAE,OAAO,KAAK;IAC/B,SAAS,CAAC,MAAM,EAAE,KAAK;gBADb,OAAO,EAAE,OAAO,KAAK,EACrB,MAAM,EAAE,KAAK;IAG3B,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;CAC1C;AAED;;GAEG;AACH,qBAAa,MAAM,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAIxD,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,SAAS,CAAC,QAAQ,EAAE,MAAM;gBAH1B,OAAO,EAAE,OAAO,KAAK,EACrB,MAAM,EAAE,KAAK,EACH,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAa;IAK/B,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAY9B,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC;CAIhC;AAED;;GAEG;AACH,qBAAa,OAAO,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAIzD,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,SAAS,CAAC,QAAQ,EAAE,MAAM;gBAH1B,OAAO,EAAE,OAAO,KAAK,EACrB,MAAM,EAAE,KAAK,EACH,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAa;IAK/B,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAYzB,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC;CAIhC;AAED;;GAEG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAI3D,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,SAAS,CAAC,QAAQ,EAAE,MAAM;gBAH1B,OAAO,EAAE,OAAO,KAAK,EACrB,MAAM,EAAE,KAAK,EACH,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAa;IAK/B,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAY9B,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC;CAIhC;AAED;;GAEG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAI/D,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,SAAS,CAAC,eAAe,EAAE,MAAM;IACjC,SAAS,CAAC,eAAe,EAAE,MAAM;IACjC,SAAS,CAAC,SAAS,EAAE,MAAM;IAC3B,SAAS,CAAC,UAAU,EAAE,MAAM;gBAN5B,OAAO,EAAE,OAAO,KAAK,EACrB,MAAM,EAAE,KAAK,EACH,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,SAAS,GAAE,MAAa,EACxB,UAAU,GAAE,MAAa;IAKjC,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;CA4B5B"}
|