Skip to content

Commit 29787d0

Browse files
chore: wip
1 parent d3afdef commit 29787d0

File tree

10 files changed

+31
-20
lines changed

10 files changed

+31
-20
lines changed

database/migrations/1715721404981-create-subscribers-table.ts renamed to database/migrations/1715780028682-create-subscribers-table.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ export async function up(db: Database<any>) {
66
.createTable('subscribers')
77
.addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
88
.addColumn('subscribed', 'boolean')
9-
.addColumn('user_id', 'integer')
9+
.addColumn('user_id', 'integer', (col) =>
10+
col.references('users.id').onDelete('cascade').notNull()
11+
)
1012
.addColumn('created_at', 'timestamp', col => col.notNull().defaultTo(sql.raw('CURRENT_TIMESTAMP')))
1113
.addColumn('updated_at', 'timestamp')
1214
.execute()

database/migrations/1715721404983-create-posts-table.ts renamed to database/migrations/1715780028683-create-posts-table.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ export async function up(db: Database<any>) {
77
.addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
88
.addColumn('title', 'varchar(255)')
99
.addColumn('body', 'varchar(255)')
10-
.addColumn('user_id', 'integer')
10+
.addColumn('user_id', 'integer', (col) =>
11+
col.references('users.id').onDelete('cascade').notNull()
12+
)
1113
.addColumn('created_at', 'timestamp', col => col.notNull().defaultTo(sql.raw('CURRENT_TIMESTAMP')))
1214
.addColumn('updated_at', 'timestamp')
1315
.execute()

storage/framework/core/database/src/drivers/index.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { log } from '@stacksjs/cli'
22
import { db } from '@stacksjs/database'
33
import { path } from '@stacksjs/path'
44
import { fs } from '@stacksjs/storage'
5+
import { isString } from '@stacksjs/validation'
56
import type { Attributes, Model, RelationConfig } from '@stacksjs/types'
67

78
export * from './mysql'
@@ -112,14 +113,22 @@ export async function getRelations(model: Model): Promise<RelationConfig[]> {
112113
for (const relation of relationsArray) {
113114
if (hasRelations(model, relation)) {
114115
for (const relationInstance of model[relation]) {
115-
const modelRelationPath = path.userModelsPath(`${relationInstance.model}.ts`)
116+
let relationModel = relationInstance.model
117+
118+
if (isString(relationInstance)) {
119+
relationModel = relationInstance
120+
}
121+
122+
const modelRelationPath = path.userModelsPath(`${relationModel}.ts`)
116123
const modelRelation = (await import(modelRelationPath)).default
117124
const formattedModelName = model.name.toLowerCase()
118125

119126
relationships.push({
120127
relationship: relation,
121-
model: relationInstance.model,
128+
model: relationModel,
122129
table: modelRelation.table,
130+
relationModel: model.name,
131+
relationTable: model.table,
123132
foreignKey: relationInstance.foreignKey || `${formattedModelName}_id`,
124133
relationName: relationInstance.relationName || '',
125134
throughModel: relationInstance.through || '',

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,12 @@ async function createTableMigration(modelPath: string) {
173173
migrationContent += `)\n`
174174
}
175175

176-
177176
if (otherModelRelations?.length) {
177+
console.log(otherModelRelations)
178178
for (const modelRelation of otherModelRelations) {
179-
migrationContent += ` .addColumn('${modelRelation.foreignKey}', 'integer') \n`
179+
migrationContent += ` .addColumn('${modelRelation.foreignKey}', 'integer', (col) =>
180+
col.references('${modelRelation.relationTable}.id').onDelete('cascade').notNull()
181+
) \n`
180182
}
181183
}
182184

storage/framework/core/database/src/drivers/postgres.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,9 @@ async function createTableMigration(modelPath: string) {
152152

153153
if (otherModelRelations?.length) {
154154
for (const modelRelation of otherModelRelations) {
155-
migrationContent += ` .addColumn('${modelRelation.foreignKey}', 'integer') \n`
155+
migrationContent += ` .addColumn('${modelRelation.foreignKey}', 'integer', (col) =>
156+
col.references('${modelRelation.relationTable}.id').onDelete('cascade').notNull()
157+
) \n`
156158
}
157159
}
158160

storage/framework/core/database/src/drivers/sqlite.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,9 @@ async function createTableMigration(modelPath: string): Promise<void> {
173173

174174
if (otherModelRelations?.length) {
175175
for (const modelRelation of otherModelRelations) {
176-
migrationContent += ` .addColumn('${modelRelation.foreignKey}', 'integer') \n`
176+
migrationContent += ` .addColumn('${modelRelation.foreignKey}', 'integer', (col) =>
177+
col.references('${modelRelation.relationTable}.id').onDelete('cascade').notNull()
178+
) \n`
177179
}
178180
}
179181

storage/framework/core/database/src/migrations.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export async function runDatabaseMigration() {
5757

5858
if (results) {
5959
log.success('Database migrated successfully.')
60-
return ok(migration)
60+
return ok(results)
6161
}
6262

6363
log.success('Database migration completed with no new migrations.')

storage/framework/core/types/src/model.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ export interface RelationConfig {
122122
relationship: string
123123
model: string
124124
table: string
125+
relationModel: string
126+
relationTable: string,
125127
foreignKey: string
126128
relationName: string
127129
throughModel: string

storage/framework/database/models/User.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,7 @@ export default {
3838
// useUuid: true, // defaults to false
3939
},
4040

41-
hasMany: [
42-
{
43-
model: 'Post',
44-
},
45-
],
46-
47-
hasOne: [
48-
{
49-
model: 'Subscriber',
50-
},
51-
],
41+
hasOne: ['Post', 'Subscriber'],
5242

5343
attributes: {
5444
name: {

0 commit comments

Comments
 (0)