Add initial project files
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
import { HttpContext } from '@adonisjs/core/http'
|
||||
import { getDatabaseTables, getColumnsForTable } from '#services/database_inspector'
|
||||
import { mapDBTypeToTs } from '#services/module_generator/db_types'
|
||||
import { generateModule } from '#services/module_generator/generate_module'
|
||||
import {
|
||||
ModuleAsset,
|
||||
ModuleLayoutConfig,
|
||||
ModuleTableConfig,
|
||||
} from '#services/module_generator/types'
|
||||
|
||||
export default class MakeModuleController {
|
||||
async tables({ response }: HttpContext) {
|
||||
const tables = await getDatabaseTables()
|
||||
return response.ok(tables)
|
||||
}
|
||||
|
||||
async columns({ request, response }: HttpContext) {
|
||||
const { table } = request.params()
|
||||
const columns = await getColumnsForTable(table)
|
||||
|
||||
return response.ok({
|
||||
columns: columns.map((col) => ({
|
||||
name: col.column_name,
|
||||
type: mapDBTypeToTs(col.data_type) + (col.is_nullable === 'YES' ? ' | null' : ''),
|
||||
isDateTime: ['created_at', 'updated_at'].includes(col.column_name),
|
||||
})),
|
||||
})
|
||||
}
|
||||
|
||||
async generate({ request, response }: HttpContext) {
|
||||
const { name, table, generate, form, datatable } = request.only([
|
||||
'name',
|
||||
'table',
|
||||
'generate',
|
||||
'form',
|
||||
'datatable',
|
||||
]) as {
|
||||
name: string
|
||||
table: string
|
||||
generate: ModuleAsset[]
|
||||
form: ModuleLayoutConfig | null
|
||||
datatable: ModuleTableConfig | null
|
||||
}
|
||||
|
||||
if (typeof name !== 'string' || !/^[a-z][a-zA-Z0-9]*$/.test(name)) {
|
||||
return response.unprocessableEntity({ message: 'Invalid module name' })
|
||||
}
|
||||
if (typeof table !== 'string' || !/^[a-z_][a-z0-9_]*$/i.test(table)) {
|
||||
return response.unprocessableEntity({ message: 'Invalid table name' })
|
||||
}
|
||||
if (!Array.isArray(generate)) {
|
||||
return response.unprocessableEntity({ message: 'Invalid generate list' })
|
||||
}
|
||||
|
||||
const moduleName = await generateModule({ name, table, generate, form, datatable })
|
||||
|
||||
return response.ok({ message: `Module "${moduleName}" created based on table "${table}"` })
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user