diff --git a/src/lib/types.ts b/src/lib/types.ts index d4799eb3..0e55b35a 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -47,7 +47,7 @@ export const postgresColumnCreateSchema = Type.Object({ table_id: Type.Integer(), name: Type.String(), type: Type.String(), - default_value: Type.Optional(Type.String()), + default_value: Type.Optional(Type.Unknown()), default_value_format: Type.Optional( Type.Union([Type.Literal('expression'), Type.Literal('literal')]) ), @@ -67,7 +67,7 @@ export const postgresColumnUpdateSchema = Type.Object({ name: Type.Optional(Type.String()), type: Type.Optional(Type.String()), drop_default: Type.Optional(Type.Boolean()), - default_value: Type.Optional(Type.String()), + default_value: Type.Optional(Type.Unknown()), default_value_format: Type.Optional( Type.Union([Type.Literal('expression'), Type.Literal('literal')]) ), @@ -78,7 +78,7 @@ export const postgresColumnUpdateSchema = Type.Object({ is_nullable: Type.Optional(Type.Boolean()), is_unique: Type.Optional(Type.Boolean()), comment: Type.Optional(Type.String()), - check: Type.Optional(Type.String()), + check: Type.Optional(Type.Union([Type.String(), Type.Null()])), }) export type PostgresColumnUpdate = Static diff --git a/src/server/routes/columns.ts b/src/server/routes/columns.ts index f8da808f..54a7ba2a 100644 --- a/src/server/routes/columns.ts +++ b/src/server/routes/columns.ts @@ -1,4 +1,3 @@ -import { FastifyInstance } from 'fastify' import { PostgresMeta } from '../../lib/index.js' import { DEFAULT_POOL_CONFIG } from '../constants.js' import { extractRequestForLogging } from '../utils.js' @@ -59,38 +58,7 @@ const route: FastifyPluginAsyncTypebox = async (fastify) => { return data } ) - fastify.post( - '/', - { - schema: { - headers: Type.Object({ - pg: Type.String(), - }), - body: postgresColumnCreateSchema, - response: { - 200: postgresColumnSchema, - 400: Type.Object({ - error: Type.String(), - }), - }, - }, - }, - async (request, reply) => { - const connectionString = request.headers.pg - - const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString }) - const { data, error } = await pgMeta.columns.create(request.body as any) - await pgMeta.end() - if (error) { - request.log.error({ error, request: extractRequestForLogging(request) }) - reply.code(400) - if (error.message.startsWith('Cannot find')) reply.code(404) - return { error: error.message } - } - return data - } - ) fastify.get( '/:tableId(^\\d+):ordinalPosition', { @@ -164,6 +132,40 @@ const route: FastifyPluginAsyncTypebox = async (fastify) => { } } ) + + fastify.post( + '/', + { + schema: { + headers: Type.Object({ + pg: Type.String(), + }), + body: postgresColumnCreateSchema, + response: { + 200: postgresColumnSchema, + 400: Type.Object({ + error: Type.String(), + }), + }, + }, + }, + async (request, reply) => { + const connectionString = request.headers.pg + + const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString }) + const { data, error } = await pgMeta.columns.create(request.body) + await pgMeta.end() + if (error) { + request.log.error({ error, request: extractRequestForLogging(request) }) + reply.code(400) + if (error.message.startsWith('Cannot find')) reply.code(404) + return { error: error.message } + } + + return data + } + ) + fastify.patch( '/:id(\\d+\\.\\d+)', { @@ -187,7 +189,7 @@ const route: FastifyPluginAsyncTypebox = async (fastify) => { const connectionString = request.headers.pg const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString }) - const { data, error } = await pgMeta.columns.update(request.params.id, request.body as any) + const { data, error } = await pgMeta.columns.update(request.params.id, request.body) await pgMeta.end() if (error) { request.log.error({ error, request: extractRequestForLogging(request) }) @@ -199,6 +201,7 @@ const route: FastifyPluginAsyncTypebox = async (fastify) => { return data } ) + fastify.delete( '/:id(\\d+\\.\\d+)', {