Skip to content

Commit e63496b

Browse files
chore: wip
1 parent 0aa3670 commit e63496b

20 files changed

+240
-273
lines changed

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { db } from '@stacksjs/database'
2+
3+
export class DB {
4+
private static instance: any = db
5+
6+
static setTransaction(transaction: any): void {
7+
this.instance = transaction
8+
}
9+
10+
static clearTransaction(): void {
11+
this.instance = db
12+
}
13+
14+
static get current(): any {
15+
return this.instance
16+
}
17+
}

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

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -758,11 +758,7 @@ export async function generateModelString(
758758
}
759759
760760
select(params: (keyof ${modelName}Type)[] | RawBuilder<string> | string): ${modelName}Model {
761-
this.selectFromQuery = this.selectFromQuery.select(params)
762-
763-
this.hasSelect = true
764-
765-
return this
761+
return ${modelName}Model.select(params)
766762
}
767763
768764
static select(params: (keyof ${modelName}Type)[] | RawBuilder<string> | string): ${modelName}Model {
@@ -777,7 +773,7 @@ export async function generateModelString(
777773
}
778774
779775
async find(id: number): Promise<${modelName}Model | undefined> {
780-
return ${modelName}Model.find(id)
776+
return await ${modelName}Model.find(id)
781777
}
782778
783779
// Method to find a ${modelName} by ID
@@ -799,10 +795,10 @@ export async function generateModelString(
799795
}
800796
801797
async first(): Promise<${modelName}Model | undefined> {
802-
return ${modelName}Model.first()
798+
return await ${modelName}Model.first()
803799
}
804800
805-
static async first(): Promise<${modelName}Type | undefined> {
801+
static async first(): Promise<${modelName}Model | undefined> {
806802
const model = await db.selectFrom('${tableName}')
807803
.selectAll()
808804
.executeTakeFirst()
@@ -820,7 +816,7 @@ export async function generateModelString(
820816
}
821817
822818
async firstOrFail(): Promise<${modelName}Model | undefined> {
823-
return this.firstOrFail()
819+
return await ${modelName}Model.firstOrFail()
824820
}
825821
826822
static async firstOrFail(): Promise<${modelName}Model | undefined> {
@@ -861,7 +857,7 @@ export async function generateModelString(
861857
862858
863859
async findOrFail(id: number): Promise<${modelName}Model> {
864-
return ${modelName}Model.findOrFail(id)
860+
return await ${modelName}Model.findOrFail(id)
865861
}
866862
867863
static async findOrFail(id: number): Promise<${modelName}Model> {
@@ -1110,8 +1106,8 @@ export async function generateModelString(
11101106
return instance
11111107
}
11121108
1113-
whereDoesntHave(relation: string): ${modelName}Model {
1114-
return ${modelName}Model.whereDoesntHave(relation)
1109+
whereDoesntHave(relation: string, callback: (query: SubqueryBuilder) => void): ${modelName}Model {
1110+
return ${modelName}Model.whereDoesntHave(relation, callback)
11151111
}
11161112
11171113
static whereDoesntHave(
@@ -1233,7 +1229,7 @@ export async function generateModelString(
12331229
return model
12341230
}
12351231
1236-
static async createMany(new${formattedTableName}: New${modelName}[]): Promise<void> {
1232+
static async createMany(new${modelName}: New${modelName}[]): Promise<void> {
12371233
const instance = new ${modelName}Model(null)
12381234
12391235
const filteredValues = Object.fromEntries(
@@ -1601,7 +1597,7 @@ export async function generateModelString(
16011597
}
16021598
16031599
having(column: keyof ${modelName}Type, operator: string, value: any): ${modelName}Model {
1604-
return ${modelName}Model.having(column, operator)
1600+
return ${modelName}Model.having(column, operator, value)
16051601
}
16061602
16071603
static having(column: keyof ${modelName}Type, operator: string, value: any): ${modelName}Model {
@@ -1648,10 +1644,10 @@ export async function generateModelString(
16481644
return instance
16491645
}
16501646
1651-
async update(${formattedModelName}: ${modelName}Update): Promise<${modelName}Model | undefined> {
1647+
async update(new${modelName}: ${modelName}Update): Promise<${modelName}Model | undefined> {
16521648
const filteredValues = Object.fromEntries(
16531649
Object.entries(new${modelName}).filter(([key]) =>
1654-
!instance.guarded.includes(key) && instance.fillable.includes(key)
1650+
!this.guarded.includes(key) && this.fillable.includes(key)
16551651
),
16561652
) as New${modelName}
16571653

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export class SubqueryBuilder {
4040
})
4141
}
4242

43-
whereNull(column: string) {
43+
whereNull(column: string): void {
4444
this.conditions.push({
4545
type: 'and',
4646
method: 'whereNull',
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { DB } from './db'
2+
3+
export class TransactionBuilder {
4+
static async execute(callback: (trx: any) => Promise<any>): Promise<DB> {
5+
return await DB.current.transaction().execute(async (transaction: any) => {
6+
DB.setTransaction(transaction)
7+
8+
try {
9+
const result = await callback(transaction)
10+
11+
return result
12+
}
13+
finally {
14+
DB.clearTransaction()
15+
}
16+
})
17+
}
18+
}

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

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,7 @@ export class AccessTokenModel {
102102
}
103103

104104
select(params: (keyof AccessTokenType)[] | RawBuilder<string> | string): AccessTokenModel {
105-
this.selectFromQuery = this.selectFromQuery.select(params)
106-
107-
this.hasSelect = true
108-
109-
return this
105+
return AccessTokenModel.select(params)
110106
}
111107

112108
static select(params: (keyof AccessTokenType)[] | RawBuilder<string> | string): AccessTokenModel {
@@ -121,7 +117,7 @@ export class AccessTokenModel {
121117
}
122118

123119
async find(id: number): Promise<AccessTokenModel | undefined> {
124-
return AccessTokenModel.find(id)
120+
return await AccessTokenModel.find(id)
125121
}
126122

127123
// Method to find a AccessToken by ID
@@ -143,10 +139,10 @@ export class AccessTokenModel {
143139
}
144140

145141
async first(): Promise<AccessTokenModel | undefined> {
146-
return AccessTokenModel.first()
142+
return await AccessTokenModel.first()
147143
}
148144

149-
static async first(): Promise<AccessTokenType | undefined> {
145+
static async first(): Promise<AccessTokenModel | undefined> {
150146
const model = await db.selectFrom('personal_access_tokens')
151147
.selectAll()
152148
.executeTakeFirst()
@@ -164,7 +160,7 @@ export class AccessTokenModel {
164160
}
165161

166162
async firstOrFail(): Promise<AccessTokenModel | undefined> {
167-
return this.firstOrFail()
163+
return await AccessTokenModel.firstOrFail()
168164
}
169165

170166
static async firstOrFail(): Promise<AccessTokenModel | undefined> {
@@ -205,7 +201,7 @@ export class AccessTokenModel {
205201
}
206202

207203
async findOrFail(id: number): Promise<AccessTokenModel> {
208-
return AccessTokenModel.findOrFail(id)
204+
return await AccessTokenModel.findOrFail(id)
209205
}
210206

211207
static async findOrFail(id: number): Promise<AccessTokenModel> {
@@ -449,8 +445,8 @@ export class AccessTokenModel {
449445
return instance
450446
}
451447

452-
whereDoesntHave(relation: string): AccessTokenModel {
453-
return AccessTokenModel.whereDoesntHave(relation)
448+
whereDoesntHave(relation: string, callback: (query: SubqueryBuilder) => void): AccessTokenModel {
449+
return AccessTokenModel.whereDoesntHave(relation, callback)
454450
}
455451

456452
static whereDoesntHave(
@@ -572,7 +568,7 @@ export class AccessTokenModel {
572568
return model
573569
}
574570

575-
static async createMany(newPersonalAccessTokens: NewAccessToken[]): Promise<void> {
571+
static async createMany(newAccessToken: NewAccessToken[]): Promise<void> {
576572
const instance = new AccessTokenModel(null)
577573

578574
const filteredValues = Object.fromEntries(
@@ -958,7 +954,7 @@ export class AccessTokenModel {
958954
}
959955

960956
having(column: keyof AccessTokenType, operator: string, value: any): AccessTokenModel {
961-
return AccessTokenModel.having(column, operator)
957+
return AccessTokenModel.having(column, operator, value)
962958
}
963959

964960
static having(column: keyof AccessTokenType, operator: string, value: any): AccessTokenModel {
@@ -1005,10 +1001,10 @@ export class AccessTokenModel {
10051001
return instance
10061002
}
10071003

1008-
async update(accesstoken: AccessTokenUpdate): Promise<AccessTokenModel | undefined> {
1004+
async update(newAccessToken: AccessTokenUpdate): Promise<AccessTokenModel | undefined> {
10091005
const filteredValues = Object.fromEntries(
10101006
Object.entries(newAccessToken).filter(([key]) =>
1011-
!instance.guarded.includes(key) && instance.fillable.includes(key),
1007+
!this.guarded.includes(key) && this.fillable.includes(key),
10121008
),
10131009
) as NewAccessToken
10141010

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

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,7 @@ export class DeploymentModel {
115115
}
116116

117117
select(params: (keyof DeploymentType)[] | RawBuilder<string> | string): DeploymentModel {
118-
this.selectFromQuery = this.selectFromQuery.select(params)
119-
120-
this.hasSelect = true
121-
122-
return this
118+
return DeploymentModel.select(params)
123119
}
124120

125121
static select(params: (keyof DeploymentType)[] | RawBuilder<string> | string): DeploymentModel {
@@ -134,7 +130,7 @@ export class DeploymentModel {
134130
}
135131

136132
async find(id: number): Promise<DeploymentModel | undefined> {
137-
return DeploymentModel.find(id)
133+
return await DeploymentModel.find(id)
138134
}
139135

140136
// Method to find a Deployment by ID
@@ -156,10 +152,10 @@ export class DeploymentModel {
156152
}
157153

158154
async first(): Promise<DeploymentModel | undefined> {
159-
return DeploymentModel.first()
155+
return await DeploymentModel.first()
160156
}
161157

162-
static async first(): Promise<DeploymentType | undefined> {
158+
static async first(): Promise<DeploymentModel | undefined> {
163159
const model = await db.selectFrom('deployments')
164160
.selectAll()
165161
.executeTakeFirst()
@@ -177,7 +173,7 @@ export class DeploymentModel {
177173
}
178174

179175
async firstOrFail(): Promise<DeploymentModel | undefined> {
180-
return this.firstOrFail()
176+
return await DeploymentModel.firstOrFail()
181177
}
182178

183179
static async firstOrFail(): Promise<DeploymentModel | undefined> {
@@ -218,7 +214,7 @@ export class DeploymentModel {
218214
}
219215

220216
async findOrFail(id: number): Promise<DeploymentModel> {
221-
return DeploymentModel.findOrFail(id)
217+
return await DeploymentModel.findOrFail(id)
222218
}
223219

224220
static async findOrFail(id: number): Promise<DeploymentModel> {
@@ -462,8 +458,8 @@ export class DeploymentModel {
462458
return instance
463459
}
464460

465-
whereDoesntHave(relation: string): DeploymentModel {
466-
return DeploymentModel.whereDoesntHave(relation)
461+
whereDoesntHave(relation: string, callback: (query: SubqueryBuilder) => void): DeploymentModel {
462+
return DeploymentModel.whereDoesntHave(relation, callback)
467463
}
468464

469465
static whereDoesntHave(
@@ -587,7 +583,7 @@ export class DeploymentModel {
587583
return model
588584
}
589585

590-
static async createMany(newDeployments: NewDeployment[]): Promise<void> {
586+
static async createMany(newDeployment: NewDeployment[]): Promise<void> {
591587
const instance = new DeploymentModel(null)
592588

593589
const filteredValues = Object.fromEntries(
@@ -1001,7 +997,7 @@ export class DeploymentModel {
1001997
}
1002998

1003999
having(column: keyof DeploymentType, operator: string, value: any): DeploymentModel {
1004-
return DeploymentModel.having(column, operator)
1000+
return DeploymentModel.having(column, operator, value)
10051001
}
10061002

10071003
static having(column: keyof DeploymentType, operator: string, value: any): DeploymentModel {
@@ -1048,10 +1044,10 @@ export class DeploymentModel {
10481044
return instance
10491045
}
10501046

1051-
async update(deployment: DeploymentUpdate): Promise<DeploymentModel | undefined> {
1047+
async update(newDeployment: DeploymentUpdate): Promise<DeploymentModel | undefined> {
10521048
const filteredValues = Object.fromEntries(
10531049
Object.entries(newDeployment).filter(([key]) =>
1054-
!instance.guarded.includes(key) && instance.fillable.includes(key),
1050+
!this.guarded.includes(key) && this.fillable.includes(key),
10551051
),
10561052
) as NewDeployment
10571053

0 commit comments

Comments
 (0)