Skip to content

Commit dcae4b3

Browse files
chore: wip
1 parent 5dafd4e commit dcae4b3

35 files changed

+343
-1667
lines changed

storage/framework/core/orm/src/base.ts

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export class BaseOrm<T, C> {
1010
protected selectFromQuery: any
1111
protected updateFromQuery: any
1212
protected deleteFromQuery: any
13+
protected withRelations: string[]
1314
protected hasSelect: boolean = false
1415

1516
constructor(tableName: string) {
@@ -18,6 +19,8 @@ export class BaseOrm<T, C> {
1819
this.selectFromQuery = DB.instance.selectFrom(this.tableName)
1920
this.updateFromQuery = DB.instance.updateTable(this.tableName)
2021
this.deleteFromQuery = DB.instance.deleteFrom(this.tableName)
22+
23+
this.withRelations = []
2124
}
2225

2326
// The protected helper method that does the actual work
@@ -254,6 +257,73 @@ export class BaseOrm<T, C> {
254257
return this.applyWhereNotIn<V>(column, values)
255258
}
256259

260+
async exists(): Promise<boolean> {
261+
let model
262+
263+
if (this.hasSelect) {
264+
model = await this.selectFromQuery.executeTakeFirst()
265+
}
266+
else {
267+
model = await this.selectFromQuery.selectAll().executeTakeFirst()
268+
}
269+
270+
return model !== null && model !== undefined
271+
}
272+
273+
with(relations: string[]): this {
274+
this.withRelations = relations
275+
276+
return this
277+
}
278+
279+
async applyLast(): Promise<T | undefined> {
280+
let model
281+
282+
if (this.hasSelect) {
283+
model = await this.selectFromQuery.executeTakeFirst()
284+
}
285+
else {
286+
model = await this.selectFromQuery.selectAll().orderBy('id', 'desc').executeTakeFirst()
287+
}
288+
289+
if (model) {
290+
this.mapCustomGetters(model)
291+
await this.loadRelations(model)
292+
}
293+
294+
return model
295+
}
296+
297+
applyOrderBy(column: keyof C, order: 'asc' | 'desc'): this {
298+
this.selectFromQuery = this.selectFromQuery.orderBy(column, order)
299+
300+
return this
301+
}
302+
303+
orderBy(column: keyof C, order: 'asc' | 'desc'): this {
304+
return this.orderBy(column, order)
305+
}
306+
307+
applyGroupBy(column: keyof C): this {
308+
this.selectFromQuery = this.selectFromQuery.groupBy(column)
309+
310+
return this
311+
}
312+
313+
groupBy(column: keyof C): this {
314+
return this.applyGroupBy(column)
315+
}
316+
317+
applyHaving<V = string>(column: keyof C, operator: Operator, value: V): this {
318+
this.selectFromQuery = this.selectFromQuery.having(column, operator, value)
319+
320+
return this
321+
}
322+
323+
having<V = string>(column: keyof C, operator: Operator, value: V): this {
324+
return this.applyHaving<V>(column, operator, value)
325+
}
326+
257327
// Methods to be implemented by child classes
258328
protected mapCustomGetters(_model: T): void {}
259329

storage/framework/core/orm/src/generate.ts

Lines changed: 10 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -948,7 +948,6 @@ export async function generateModelString(
948948
protected originalAttributes = {} as ${modelName}JsonResponse
949949
${privateSoftDeletes}
950950
protected selectFromQuery: any
951-
protected withRelations: string[]
952951
protected updateFromQuery: any
953952
protected deleteFromQuery: any
954953
protected hasSelect: boolean
@@ -1977,12 +1976,6 @@ export async function generateModelString(
19771976
}
19781977
}
19791978
1980-
with(relations: string[]): ${modelName}Model {
1981-
this.withRelations = relations
1982-
1983-
return this
1984-
}
1985-
19861979
static with(relations: string[]): ${modelName}Model {
19871980
const instance = new ${modelName}Model(undefined)
19881981
@@ -1992,27 +1985,17 @@ export async function generateModelString(
19921985
}
19931986
19941987
async last(): Promise<${modelName}Model | undefined> {
1995-
let model: ${modelName}JsonResponse | undefined
1996-
1997-
if (this.hasSelect) {
1998-
model = await this.selectFromQuery.executeTakeFirst()
1999-
}
2000-
else {
2001-
model = await this.selectFromQuery.selectAll().orderBy('id', 'desc').executeTakeFirst()
2002-
}
2003-
2004-
if (model) {
2005-
this.mapCustomGetters(model)
2006-
await this.loadRelations(model)
2007-
}
1988+
const model = await this.applyLast()
20081989
20091990
const data = new ${modelName}Model(model)
20101991
20111992
return data
20121993
}
20131994
20141995
static async last(): Promise<${modelName}Model | undefined> {
2015-
const model = await DB.instance.selectFrom('${tableName}').selectAll().orderBy('id', 'desc').executeTakeFirst()
1996+
const instance = new ${modelName}Model(undefined)
1997+
1998+
const model = await instance.applyLast()
20161999
20172000
if (!model)
20182001
return undefined
@@ -2022,46 +2005,22 @@ export async function generateModelString(
20222005
return data
20232006
}
20242007
2025-
orderBy(column: keyof ${formattedTableName}Table, order: 'asc' | 'desc'): ${modelName}Model {
2026-
this.selectFromQuery = this.selectFromQuery.orderBy(column, order)
2027-
2028-
return this
2029-
}
2030-
20312008
static orderBy(column: keyof ${formattedTableName}Table, order: 'asc' | 'desc'): ${modelName}Model {
2032-
const instance = new ${modelName}Model(undefined)
2033-
2034-
instance.selectFromQuery = instance.selectFromQuery.orderBy(column, order)
2035-
2036-
return instance
2037-
}
2009+
const instance = new UserModel(undefined)
20382010
2039-
groupBy(column: keyof ${formattedTableName}Table): ${modelName}Model {
2040-
this.selectFromQuery = this.selectFromQuery.groupBy(column)
2041-
2042-
return this
2011+
return instance.applyOrderBy(column, order)
20432012
}
2044-
2013+
20452014
static groupBy(column: keyof ${formattedTableName}Table): ${modelName}Model {
20462015
const instance = new ${modelName}Model(undefined)
2047-
2048-
instance.selectFromQuery = instance.selectFromQuery.groupBy(column)
2049-
2050-
return instance
2051-
}
20522016
2053-
having<V = string>(column: keyof ${formattedTableName}Table, operator: Operator, value: V): ${modelName}Model {
2054-
this.selectFromQuery = this.selectFromQuery.having(column, operator, value)
2055-
2056-
return this
2017+
return instance.applyGroupBy(column)
20572018
}
20582019
20592020
static having<V = string>(column: keyof ${formattedTableName}Table, operator: Operator, value: V): ${modelName}Model {
20602021
const instance = new ${modelName}Model(undefined)
2061-
2062-
instance.selectFromQuery = instance.selectFromQuery.having(column, operator, value)
2063-
2064-
return instance
2022+
2023+
return instance.applyHaving(column, operator, value)
20652024
}
20662025
20672026
inRandomOrder(): ${modelName}Model {

storage/framework/orm/src/models/AccessToken.ts

Lines changed: 8 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ export class AccessTokenModel extends BaseOrm<AccessTokenModel, PersonalAccessTo
6868
protected originalAttributes = {} as AccessTokenJsonResponse
6969

7070
protected selectFromQuery: any
71-
protected withRelations: string[]
7271
protected updateFromQuery: any
7372
protected deleteFromQuery: any
7473
protected hasSelect: boolean
@@ -1266,12 +1265,6 @@ export class AccessTokenModel extends BaseOrm<AccessTokenModel, PersonalAccessTo
12661265
}
12671266
}
12681267

1269-
with(relations: string[]): AccessTokenModel {
1270-
this.withRelations = relations
1271-
1272-
return this
1273-
}
1274-
12751268
static with(relations: string[]): AccessTokenModel {
12761269
const instance = new AccessTokenModel(undefined)
12771270

@@ -1281,27 +1274,17 @@ export class AccessTokenModel extends BaseOrm<AccessTokenModel, PersonalAccessTo
12811274
}
12821275

12831276
async last(): Promise<AccessTokenModel | undefined> {
1284-
let model: AccessTokenJsonResponse | undefined
1285-
1286-
if (this.hasSelect) {
1287-
model = await this.selectFromQuery.executeTakeFirst()
1288-
}
1289-
else {
1290-
model = await this.selectFromQuery.selectAll().orderBy('id', 'desc').executeTakeFirst()
1291-
}
1292-
1293-
if (model) {
1294-
this.mapCustomGetters(model)
1295-
await this.loadRelations(model)
1296-
}
1277+
const model = await this.applyLast()
12971278

12981279
const data = new AccessTokenModel(model)
12991280

13001281
return data
13011282
}
13021283

13031284
static async last(): Promise<AccessTokenModel | undefined> {
1304-
const model = await DB.instance.selectFrom('personal_access_tokens').selectAll().orderBy('id', 'desc').executeTakeFirst()
1285+
const instance = new AccessTokenModel(undefined)
1286+
1287+
const model = await instance.applyLast()
13051288

13061289
if (!model)
13071290
return undefined
@@ -1311,46 +1294,22 @@ export class AccessTokenModel extends BaseOrm<AccessTokenModel, PersonalAccessTo
13111294
return data
13121295
}
13131296

1314-
orderBy(column: keyof PersonalAccessTokensTable, order: 'asc' | 'desc'): AccessTokenModel {
1315-
this.selectFromQuery = this.selectFromQuery.orderBy(column, order)
1316-
1317-
return this
1318-
}
1319-
13201297
static orderBy(column: keyof PersonalAccessTokensTable, order: 'asc' | 'desc'): AccessTokenModel {
1321-
const instance = new AccessTokenModel(undefined)
1322-
1323-
instance.selectFromQuery = instance.selectFromQuery.orderBy(column, order)
1324-
1325-
return instance
1326-
}
1327-
1328-
groupBy(column: keyof PersonalAccessTokensTable): AccessTokenModel {
1329-
this.selectFromQuery = this.selectFromQuery.groupBy(column)
1298+
const instance = new UserModel(undefined)
13301299

1331-
return this
1300+
return instance.applyOrderBy(column, order)
13321301
}
13331302

13341303
static groupBy(column: keyof PersonalAccessTokensTable): AccessTokenModel {
13351304
const instance = new AccessTokenModel(undefined)
13361305

1337-
instance.selectFromQuery = instance.selectFromQuery.groupBy(column)
1338-
1339-
return instance
1340-
}
1341-
1342-
having<V = string>(column: keyof PersonalAccessTokensTable, operator: Operator, value: V): AccessTokenModel {
1343-
this.selectFromQuery = this.selectFromQuery.having(column, operator, value)
1344-
1345-
return this
1306+
return instance.applyGroupBy(column)
13461307
}
13471308

13481309
static having<V = string>(column: keyof PersonalAccessTokensTable, operator: Operator, value: V): AccessTokenModel {
13491310
const instance = new AccessTokenModel(undefined)
13501311

1351-
instance.selectFromQuery = instance.selectFromQuery.having(column, operator, value)
1352-
1353-
return instance
1312+
return instance.applyHaving(column, operator, value)
13541313
}
13551314

13561315
inRandomOrder(): AccessTokenModel {

0 commit comments

Comments
 (0)