Skip to content

Commit d4050dd

Browse files
chore: wip
1 parent a6fbe6a commit d4050dd

15 files changed

+68
-17
lines changed

database/migrations/1718191600649-create-personal_access_tokens-table.ts renamed to database/migrations/1719030575175-create-personal_access_tokens-table.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export async function up(db: Database<any>) {
77
.addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
88
.addColumn('name', 'varchar(255)')
99
.addColumn('token', 'varchar(512)', col => col.unique())
10-
.addColumn('plainTextToken', 'varchar(512)')
10+
.addColumn('plain_text_token', 'varchar(512)')
1111
.addColumn('abilities', sql`enum('read', 'write', 'admin', 'read|write', 'read|admin', 'write|admin', 'read|write|admin')`)
1212
.addColumn('team_id', 'integer', (col) =>
1313
col.references('teams.id').onDelete('cascade')

database/migrations/1718191600649-create-teams-table.ts renamed to database/migrations/1719030575176-create-teams-table.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ export async function up(db: Database<any>) {
66
.createTable('teams')
77
.addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
88
.addColumn('name', 'varchar(255)')
9-
.addColumn('companyName', 'varchar(255)')
9+
.addColumn('company_name', 'varchar(255)')
1010
.addColumn('email', 'varchar(255)')
11-
.addColumn('billingEmail', 'varchar(255)')
11+
.addColumn('billing_email', 'varchar(255)')
1212
.addColumn('status', 'varchar(255)')
1313
.addColumn('description', 'varchar(255)')
1414
.addColumn('path', 'varchar(255)')
15-
.addColumn('isPersonal', 'boolean')
15+
.addColumn('is_personal', 'boolean')
1616
.addColumn('accesstoken_id', 'integer', (col) =>
1717
col.references('personal_access_tokens.id').onDelete('cascade')
1818
)

database/migrations/1718191600650-create-deployments-table.ts renamed to database/migrations/1719030575179-create-deployments-table.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ export async function up(db: Database<any>) {
55
await db.schema
66
.createTable('deployments')
77
.addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
8-
.addColumn('commitSha', 'varchar(512)', col => col.unique())
9-
.addColumn('commitMessage', 'varchar(255)')
8+
.addColumn('commit_sha', 'varchar(512)', col => col.unique())
9+
.addColumn('commit_message', 'varchar(255)')
1010
.addColumn('branch', 'varchar(255)')
1111
.addColumn('status', 'varchar(255)')
12-
.addColumn('executionTime', 'integer')
13-
.addColumn('deployScript', 'varchar(255)')
14-
.addColumn('terminalOutput', 'varchar(255)')
12+
.addColumn('execution_time', 'integer')
13+
.addColumn('deploy_script', 'varchar(255)')
14+
.addColumn('terminal_output', 'varchar(255)')
1515
.addColumn('user_id', 'integer', (col) =>
1616
col.references('users.id').onDelete('cascade')
1717
)

database/migrations/1718191600648-create-users-table.ts renamed to database/migrations/1719030575180-create-users-table.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export async function up(db: Database<any>) {
77
.addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
88
.addColumn('name', 'varchar(255)', col => col.notNull())
99
.addColumn('email', 'varchar(255)', col => col.unique().notNull())
10-
.addColumn('jobTitle', 'varchar(255)', col => col.notNull())
10+
.addColumn('job_title', 'varchar(255)', col => col.notNull())
1111
.addColumn('password', 'varchar(255)', col => col.notNull())
1212
.addColumn('created_at', 'timestamp', col => col.notNull().defaultTo(sql.raw('CURRENT_TIMESTAMP')))
1313
.addColumn('updated_at', 'timestamp')
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import type { Database } from '@stacksjs/database'
2+
import { sql } from '@stacksjs/database'
3+
4+
export async function up(db: Database<any>) {
5+
await db.schema.alterTable('users')
6+
.addColumn('content', 'varchar(255)', col => col.notNull())
7+
.execute();
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import type { Database } from '@stacksjs/database'
2+
import { sql } from '@stacksjs/database'
3+
4+
export async function up(db: Database<any>) {
5+
await db.schema.alterTable('users')
6+
.dropColumn('content')
7+
.execute();
8+
}

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

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ok } from '@stacksjs/error-handling'
44
import { getModelName, getTableName } from '@stacksjs/orm'
55
import { path } from '@stacksjs/path'
66
import { fs, glob } from '@stacksjs/storage'
7+
import { snakeCase } from '@stacksjs/strings'
78
import type { Attribute, Attributes, Model } from '@stacksjs/types'
89
import {
910
checkPivotMigration,
@@ -140,9 +141,9 @@ async function createTableMigration(modelPath: string) {
140141

141142
for (const [fieldName, options] of Object.entries(fields)) {
142143
const fieldOptions = options as Attribute
143-
144+
const fieldNameFormatted = snakeCase(fieldName)
144145
const columnType = mapFieldTypeToColumnType(fieldOptions.validation?.rule)
145-
migrationContent += ` .addColumn('${fieldName}', ${columnType}`
146+
migrationContent += ` .addColumn('${fieldNameFormatted}', ${columnType}`
146147

147148
// Check if there are configurations that require the lambda function
148149
if (fieldOptions.unique || fieldOptions?.required) {
@@ -230,8 +231,12 @@ export async function createAlterTableMigration(modelPath: string) {
230231
const currentFields = model.attributes as Attributes
231232

232233
// Determine fields to add and remove
233-
const fieldsToAdd = Object.keys(currentFields)
234-
const fieldsToRemove = Object.keys(lastFields)
234+
235+
const changes = pluckChanges(Object.keys(lastFields), Object.keys(currentFields))
236+
237+
const fieldsToAdd = changes?.added || []
238+
239+
const fieldsToRemove = changes?.removed || []
235240

236241
let migrationContent = `import type { Database } from '@stacksjs/database'\n`
237242
migrationContent += `import { sql } from '@stacksjs/database'\n\n`
@@ -242,9 +247,23 @@ export async function createAlterTableMigration(modelPath: string) {
242247
for (const fieldName of fieldsToAdd) {
243248
const options = currentFields[fieldName] as Attribute
244249
const columnType = mapFieldTypeToColumnType(options.validation?.rule)
245-
migrationContent += ` .addColumn('${fieldName}', '${columnType}')\n`
250+
const formattedFieldName = snakeCase(fieldName)
251+
252+
migrationContent += ` .addColumn('${formattedFieldName}', ${columnType}`
253+
254+
// Check if there are configurations that require the lambda function
255+
if (options.unique || options?.required) {
256+
migrationContent += `, col => col`
257+
if (options.unique) migrationContent += `.unique()`
258+
if (options?.required) migrationContent += `.notNull()`
259+
migrationContent += ``
260+
}
261+
262+
migrationContent += `)\n`
246263
}
247264

265+
console.log(migrationContent)
266+
248267
// Remove fields that no longer exist
249268
for (const fieldName of fieldsToRemove) migrationContent += ` .dropColumn('${fieldName}')\n`
250269

@@ -261,6 +280,17 @@ export async function createAlterTableMigration(modelPath: string) {
261280
log.success(`Created migration: ${italic(migrationFileName)}`)
262281
}
263282

283+
function pluckChanges(array1: string[], array2: string[]): { added: string[]; removed: string[] } | null {
284+
const removed = array1.filter((item) => !array2.includes(item))
285+
const added = array2.filter((item) => !array1.includes(item))
286+
287+
if (removed.length === 0 && added.length === 0) {
288+
return null
289+
}
290+
291+
return { added, removed }
292+
}
293+
264294
export async function fetchMysqlTables(): Promise<string[]> {
265295
const modelFiles = glob.sync(path.userModelsPath('*.ts'))
266296
const tables: string[] = []

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ok } from '@stacksjs/error-handling'
44
import { getTableName } from '@stacksjs/orm'
55
import { path } from '@stacksjs/path'
66
import { fs, glob } from '@stacksjs/storage'
7+
import { snakeCase } from '@stacksjs/strings'
78
import type { Attribute, Model } from '@stacksjs/types'
89
import {
910
checkPivotMigration,
@@ -141,8 +142,9 @@ async function createTableMigration(modelPath: string) {
141142

142143
for (const [fieldName, options] of Object.entries(fields)) {
143144
const fieldOptions = options as Attribute
145+
const fieldNameFormatted = snakeCase(fieldName)
144146
const columnType = mapFieldTypeToColumnType(fieldOptions.validations?.rule)
145-
migrationContent += ` .addColumn('${fieldName}', '${columnType}'`
147+
migrationContent += ` .addColumn('${fieldNameFormatted}', '${columnType}'`
146148

147149
// Check if there are configurations that require the lambda function
148150
if (fieldOptions.unique || fieldOptions.validations?.rule?.required) {

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ok } from '@stacksjs/error-handling'
44
import { getModelName, getTableName } from '@stacksjs/orm'
55
import { path } from '@stacksjs/path'
66
import { fs, glob } from '@stacksjs/storage'
7+
import { snakeCase } from '@stacksjs/strings'
78
import type { Attribute, Attributes, Model } from '@stacksjs/types'
89
import {
910
checkPivotMigration,
@@ -236,8 +237,10 @@ export async function createAlterTableMigration(modelPath: string) {
236237
// Add new fields
237238
for (const fieldName of fieldsToAdd) {
238239
const options = currentFields[fieldName] as Attribute
240+
const fieldNameFormatted = snakeCase(fieldName)
241+
239242
const columnType = mapFieldTypeToColumnType(options.validations?.rule)
240-
migrationContent += ` .addColumn('${fieldName}', '${columnType}')\n`
243+
migrationContent += ` .addColumn('${fieldNameFormatted}', '${columnType}')\n`
241244
}
242245

243246
// Remove fields that no longer exist

0 commit comments

Comments
 (0)