Skip to content

Commit 8bfe40d

Browse files
committed
chore: wip
1 parent 4b19837 commit 8bfe40d

File tree

3 files changed

+28
-35
lines changed

3 files changed

+28
-35
lines changed

pkgx.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
# https://stacksjs.org/docs/dependency-management
1010

1111
dependencies:
12-
bun.sh: ^1.1.6
12+
bun.sh: ^1.1.8
1313
aws.amazon.com/cli: ^2.15.30
1414
dns.lookup.dog: ^0.1.0
1515
info-zip.org/zip: ^3.0

public/logo.png

-18.1 KB
Loading

storage/framework/core/actions/src/database/mysql.ts

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { db } from '@stacksjs/database'
33
import { ok } from '@stacksjs/error-handling'
44
import { path } from '@stacksjs/path'
55
import { fs, glob } from '@stacksjs/storage'
6-
import type { Attributes, ModelOptions, RelationConfig } from '@stacksjs/types'
6+
import type { Attributes, Model, RelationConfig } from '@stacksjs/types'
77
import { checkPivotMigration, getLastMigrationFields, hasTableBeenMigrated, mapFieldTypeToColumnType } from '.'
88

99
export async function resetMysqlDatabase() {
@@ -23,9 +23,8 @@ export async function resetMysqlDatabase() {
2323
const userModelFiles = glob.sync(path.userModelsPath('*.ts'))
2424

2525
for (const userModel of userModelFiles) {
26-
const userModelPath = await import(userModel)
27-
28-
const pivotTables = await getPivotTables(userModelPath.default)
26+
const model = (await import(userModel)).default as Model
27+
const pivotTables = await getPivotTables(model)
2928

3029
for (const pivotTable of pivotTables) await db.schema.dropTable(pivotTable.table).ifExists().execute()
3130
}
@@ -80,12 +79,11 @@ export async function generateMysqlMigration(modelPath: string) {
8079
}
8180
}
8281

83-
const model = await import(modelPath)
84-
82+
const model = (await import(modelPath)).default as Model
8583
const fileName = path.basename(modelPath)
86-
const tableName = model.default.table
84+
const tableName = model.table
8785

88-
const fieldsString = JSON.stringify(model.default.attributes, null, 2) // Pretty print the JSON
86+
const fieldsString = JSON.stringify(model.attributes, null, 2) // Pretty print the JSON
8987
const copiedModelPath = path.frameworkPath(`database/models/${fileName}`)
9088

9189
let haveFieldsChanged = false
@@ -119,35 +117,32 @@ export async function generateMysqlMigration(modelPath: string) {
119117

120118
log.debug(`Has ${tableName} been migrated? ${hasBeenMigrated}`)
121119

122-
await createForeignKeysMigration(model.default)
120+
await createForeignKeysMigration(model)
123121

124122
if (haveFieldsChanged) await createAlterTableMigration(modelPath)
125123
else await createTableMigration(modelPath)
126124
}
127125

128-
async function getRelations(model: ModelOptions): Promise<RelationConfig[]> {
126+
async function getRelations(model: Model): Promise<RelationConfig[]> {
129127
const relationsArray = ['hasOne', 'belongsTo', 'hasMany', 'belongsToMany', 'hasOneThrough']
130-
131128
const relationships = []
132129

133130
for (const relation of relationsArray) {
134131
if (hasRelations(model, relation)) {
135132
for (const relationInstance of model[relation]) {
136133
const modelRelationPath = path.userModelsPath(`${relationInstance.model.name}.ts`)
137-
138-
const modelRelation = await import(modelRelationPath)
139-
134+
const modelRelation = (await import(modelRelationPath)).default
140135
const formattedModelName = model.name.toLowerCase()
141136

142137
relationships.push({
143138
relationship: relation,
144139
model: relationInstance.model.name,
145-
table: modelRelation.default.table,
140+
table: modelRelation.table,
146141
foreignKey: relationInstance.foreignKey || `${formattedModelName}_id`,
147142
relationName: relationInstance.relationName || '',
148143
throughModel: relationInstance.through || '',
149144
throughForeignKey: relationInstance.throughForeignKey || '',
150-
pivotTable: relationInstance?.pivotTable || `${formattedModelName}_${modelRelation.default.table}`,
145+
pivotTable: relationInstance?.pivotTable || `${formattedModelName}_${modelRelation.table}`,
151146
})
152147
}
153148
}
@@ -161,19 +156,18 @@ function hasRelations(obj: any, key: string): boolean {
161156
}
162157

163158
async function getPivotTables(
164-
model: ModelOptions,
159+
model: Model,
165160
): Promise<{ table: string; firstForeignKey: string; secondForeignKey: string }[]> {
166161
const pivotTable = []
167162

168163
if ('belongsToMany' in model) {
169164
for (const belongsToManyRelation of model.belongsToMany) {
170165
const modelRelationPath = path.userModelsPath(`${belongsToManyRelation.model}.ts`)
171-
const modelRelation = await import(modelRelationPath)
172-
166+
const modelRelation = (await import(modelRelationPath)).default
173167
const formattedModelName = model.name.toLowerCase()
174168

175169
pivotTable.push({
176-
table: belongsToManyRelation?.pivotTable || `${formattedModelName}_${modelRelation.default.table}`,
170+
table: belongsToManyRelation?.pivotTable || `${formattedModelName}_${modelRelation.table}`,
177171
firstForeignKey: belongsToManyRelation.firstForeignKey,
178172
secondForeignKey: belongsToManyRelation.secondForeignKey,
179173
})
@@ -188,14 +182,14 @@ async function getPivotTables(
188182
async function createTableMigration(modelPath: string) {
189183
log.debug('createTableMigration modelPath:', modelPath)
190184

191-
const model = await import(modelPath)
192-
const tableName = model.default.table
185+
const model = (await import(modelPath)).default as Model
186+
const tableName = model.table
193187

194-
await createPivotTableMigration(model.default)
188+
await createPivotTableMigration(model)
195189

196-
const fields = model.default.attributes
197-
const useTimestamps = model.default?.traits?.useTimestamps ?? model.default?.traits?.timestampable
198-
const useSoftDeletes = model.default?.traits?.useSoftDeletes ?? model.default?.traits?.softDeletable
190+
const fields = model.attributes
191+
const useTimestamps = model.traits?.useTimestamps ?? model.traits?.timestampable
192+
const useSoftDeletes = model.traits?.useSoftDeletes ?? model.traits?.softDeletable
199193

200194
let migrationContent = `import type { Database } from '@stacksjs/database'\n`
201195
migrationContent += `import { sql } from '@stacksjs/database'\n\n`
@@ -242,7 +236,7 @@ async function createTableMigration(modelPath: string) {
242236
log.success(`Created migration: ${migrationFileName}`)
243237
}
244238

245-
async function createPivotTableMigration(model: ModelOptions) {
239+
async function createPivotTableMigration(model: Model) {
246240
const pivotTables = await getPivotTables(model)
247241

248242
if (!pivotTables.length) return
@@ -273,7 +267,7 @@ async function createPivotTableMigration(model: ModelOptions) {
273267
}
274268
}
275269

276-
async function createForeignKeysMigration(model: ModelOptions) {
270+
async function createForeignKeysMigration(model: Model) {
277271
const relations = await getRelations(model)
278272

279273
for (const relation of relations) {
@@ -297,15 +291,15 @@ async function createForeignKeysMigration(model: ModelOptions) {
297291
export async function createAlterTableMigration(modelPath: string) {
298292
console.log('createAlterTableMigration')
299293

300-
const model = await import(modelPath)
294+
const model = (await import(modelPath)).default as Model
301295
const modelName = path.basename(modelPath)
302-
const tableName = model.default.table
296+
const tableName = model.table
303297

304298
// Assuming you have a function to get the fields from the last migration
305299
// For simplicity, this is not implemented here
306300
const lastMigrationFields = await getLastMigrationFields(modelName)
307301
const lastFields = lastMigrationFields ?? {}
308-
const currentFields = model.default.attributes as Attributes
302+
const currentFields = model.attributes as Attributes
309303

310304
// Determine fields to add and remove
311305
const fieldsToAdd = Object.keys(currentFields)
@@ -344,9 +338,8 @@ export async function fetchMysqlTables(): Promise<string[]> {
344338
const tables: string[] = []
345339

346340
for (const modelPath of modelFiles) {
347-
const model = await import(modelPath)
348-
349-
const tableName = model.default.table
341+
const model = (await import(modelPath)).default as Model
342+
const tableName = model.table
350343

351344
tables.push(tableName)
352345
}

0 commit comments

Comments
 (0)