diff --git a/astro.config.mjs b/astro.config.mjs index d9f9a6a..a49f256 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -3,8 +3,6 @@ import { defineConfig } from 'astro/config'; import tailwindcss from '@tailwindcss/vite'; -import db from '@astrojs/db'; - import node from '@astrojs/node'; // https://astro.build/config @@ -14,8 +12,6 @@ export default defineConfig({ plugins: [tailwindcss()] }, - integrations: [db()], - adapter: node({ mode: 'standalone' }) diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..0b5c1c9 --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,11 @@ +import 'dotenv/config'; +import { defineConfig } from 'drizzle-kit'; + +export default defineConfig({ + out: './drizzle', + schema: './src/db/schema.ts', + dialect: 'postgresql', + dbCredentials: { + url: process.env.DATABASE_URL!, + }, +}); diff --git a/package.json b/package.json index 543862a..c6b0cf0 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "astro": "astro" }, "dependencies": { - "@astrojs/db": "^0.18.3", "@astrojs/node": "^9.5.1", "@tailwindcss/vite": "^4.1.18", "astro": "^5.16.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aad6fb5..e3c1e8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,6 @@ importers: .: dependencies: - '@astrojs/db': - specifier: ^0.18.3 - version: 0.18.3(@types/pg@8.16.0)(pg@8.16.3) '@astrojs/node': specifier: ^9.5.1 version: 9.5.1(astro@5.16.8(@types/node@25.0.6)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.1)(tsx@4.21.0)(typescript@5.9.3)) @@ -51,9 +48,6 @@ packages: '@astrojs/compiler@2.13.0': resolution: {integrity: sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==} - '@astrojs/db@0.18.3': - resolution: {integrity: sha512-iTK50jUgyj25oa/JiXSN1/IVp5kTmPuioLlve06LE8/HzWGv3JpVgCKIV9HHf3kOVi1HV/uauXnyWzkB+yHLSQ==} - '@astrojs/internal-helpers@0.7.5': resolution: {integrity: sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==} @@ -1205,10 +1199,6 @@ packages: decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} - deep-diff@1.0.2: - resolution: {integrity: sha512-aWS3UIVH+NPGCD1kki+DCU9Dua032iSsO43LqQpcs4R3+dVv7tX0qBGjiVHJHjplsoUM2XRO/KB92glqc68awg==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} @@ -1269,95 +1259,6 @@ packages: resolution: {integrity: sha512-O9EC/miwdnRDY10qRxM8P3Pg8hXe3LyU4ZipReKOgTwn4OqANmftj8XJz1UPUAS6NMHf0E2htjsbQujUTkncCg==} hasBin: true - drizzle-orm@0.42.0: - resolution: {integrity: sha512-pS8nNJm2kBNZwrOjTHJfdKkaU+KuUQmV/vk5D57NojDq4FG+0uAYGMulXtYT///HfgsMF0hnFFvu1ezI3OwOkg==} - peerDependencies: - '@aws-sdk/client-rds-data': '>=3' - '@cloudflare/workers-types': '>=4' - '@electric-sql/pglite': '>=0.2.0' - '@libsql/client': '>=0.10.0' - '@libsql/client-wasm': '>=0.10.0' - '@neondatabase/serverless': '>=0.10.0' - '@op-engineering/op-sqlite': '>=2' - '@opentelemetry/api': ^1.4.1 - '@planetscale/database': '>=1.13' - '@prisma/client': '*' - '@tidbcloud/serverless': '*' - '@types/better-sqlite3': '*' - '@types/pg': '*' - '@types/sql.js': '*' - '@vercel/postgres': '>=0.8.0' - '@xata.io/client': '*' - better-sqlite3: '>=7' - bun-types: '*' - expo-sqlite: '>=14.0.0' - gel: '>=2' - knex: '*' - kysely: '*' - mysql2: '>=2' - pg: '>=8' - postgres: '>=3' - prisma: '*' - sql.js: '>=1' - sqlite3: '>=5' - peerDependenciesMeta: - '@aws-sdk/client-rds-data': - optional: true - '@cloudflare/workers-types': - optional: true - '@electric-sql/pglite': - optional: true - '@libsql/client': - optional: true - '@libsql/client-wasm': - optional: true - '@neondatabase/serverless': - optional: true - '@op-engineering/op-sqlite': - optional: true - '@opentelemetry/api': - optional: true - '@planetscale/database': - optional: true - '@prisma/client': - optional: true - '@tidbcloud/serverless': - optional: true - '@types/better-sqlite3': - optional: true - '@types/pg': - optional: true - '@types/sql.js': - optional: true - '@vercel/postgres': - optional: true - '@xata.io/client': - optional: true - better-sqlite3: - optional: true - bun-types: - optional: true - expo-sqlite: - optional: true - gel: - optional: true - knex: - optional: true - kysely: - optional: true - mysql2: - optional: true - pg: - optional: true - postgres: - optional: true - prisma: - optional: true - sql.js: - optional: true - sqlite3: - optional: true - drizzle-orm@0.45.1: resolution: {integrity: sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA==} peerDependencies: @@ -1919,11 +1820,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.6: - resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} - engines: {node: ^18 || >=20} - hasBin: true - neotraverse@0.6.18: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} @@ -2524,47 +2420,6 @@ snapshots: '@astrojs/compiler@2.13.0': {} - '@astrojs/db@0.18.3(@types/pg@8.16.0)(pg@8.16.3)': - dependencies: - '@libsql/client': 0.15.15 - deep-diff: 1.0.2 - drizzle-orm: 0.42.0(@libsql/client@0.15.15)(@types/pg@8.16.0)(pg@8.16.3) - nanoid: 5.1.6 - piccolore: 0.1.3 - prompts: 2.4.2 - yargs-parser: 21.1.1 - zod: 3.25.76 - transitivePeerDependencies: - - '@aws-sdk/client-rds-data' - - '@cloudflare/workers-types' - - '@electric-sql/pglite' - - '@libsql/client-wasm' - - '@neondatabase/serverless' - - '@op-engineering/op-sqlite' - - '@opentelemetry/api' - - '@planetscale/database' - - '@prisma/client' - - '@tidbcloud/serverless' - - '@types/better-sqlite3' - - '@types/pg' - - '@types/sql.js' - - '@vercel/postgres' - - '@xata.io/client' - - better-sqlite3 - - bufferutil - - bun-types - - expo-sqlite - - gel - - knex - - kysely - - mysql2 - - pg - - postgres - - prisma - - sql.js - - sqlite3 - - utf-8-validate - '@astrojs/internal-helpers@0.7.5': {} '@astrojs/markdown-remark@6.3.10': @@ -3000,10 +2855,12 @@ snapshots: transitivePeerDependencies: - bufferutil - utf-8-validate + optional: true '@libsql/core@0.15.15': dependencies: js-base64: 3.7.8 + optional: true '@libsql/darwin-arm64@0.5.22': optional: true @@ -3020,8 +2877,10 @@ snapshots: transitivePeerDependencies: - bufferutil - utf-8-validate + optional: true - '@libsql/isomorphic-fetch@0.3.1': {} + '@libsql/isomorphic-fetch@0.3.1': + optional: true '@libsql/isomorphic-ws@0.1.5': dependencies: @@ -3030,6 +2889,7 @@ snapshots: transitivePeerDependencies: - bufferutil - utf-8-validate + optional: true '@libsql/linux-arm-gnueabihf@0.5.22': optional: true @@ -3052,7 +2912,8 @@ snapshots: '@libsql/win32-x64-msvc@0.5.22': optional: true - '@neon-rs/load@0.0.4': {} + '@neon-rs/load@0.0.4': + optional: true '@oslojs/encoding@1.1.0': {} @@ -3275,6 +3136,7 @@ snapshots: '@types/ws@8.18.1': dependencies: '@types/node': 25.0.6 + optional: true '@ungap/structured-clone@1.3.0': {} @@ -3486,7 +3348,8 @@ snapshots: dependencies: css-tree: 2.2.1 - data-uri-to-buffer@4.0.1: {} + data-uri-to-buffer@4.0.1: + optional: true debug@4.4.3: dependencies: @@ -3496,8 +3359,6 @@ snapshots: dependencies: character-entities: 2.0.2 - deep-diff@1.0.2: {} - defu@6.1.4: {} depd@2.0.0: {} @@ -3506,7 +3367,8 @@ snapshots: destr@2.0.5: {} - detect-libc@2.0.2: {} + detect-libc@2.0.2: + optional: true detect-libc@2.1.2: {} @@ -3553,12 +3415,6 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.42.0(@libsql/client@0.15.15)(@types/pg@8.16.0)(pg@8.16.3): - optionalDependencies: - '@libsql/client': 0.15.15 - '@types/pg': 8.16.0 - pg: 8.16.3 - drizzle-orm@0.45.1(@libsql/client@0.15.15)(@types/pg@8.16.0)(pg@8.16.3): optionalDependencies: '@libsql/client': 0.15.15 @@ -3702,6 +3558,7 @@ snapshots: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + optional: true flattie@1.1.1: {} @@ -3716,6 +3573,7 @@ snapshots: formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 + optional: true fresh@2.0.0: {} @@ -3867,7 +3725,8 @@ snapshots: jiti@2.6.1: {} - js-base64@3.7.8: {} + js-base64@3.7.8: + optional: true js-yaml@4.1.1: dependencies: @@ -3889,6 +3748,7 @@ snapshots: '@libsql/linux-x64-gnu': 0.5.22 '@libsql/linux-x64-musl': 0.5.22 '@libsql/win32-x64-msvc': 0.5.22 + optional: true lightningcss-android-arm64@1.30.2: optional: true @@ -4288,15 +4148,14 @@ snapshots: nanoid@3.3.11: {} - nanoid@5.1.6: {} - neotraverse@0.6.18: {} nlcst-to-string@4.0.0: dependencies: '@types/nlcst': 2.0.3 - node-domexception@1.0.0: {} + node-domexception@1.0.0: + optional: true node-fetch-native@1.6.7: {} @@ -4305,6 +4164,7 @@ snapshots: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + optional: true node-mock-http@1.0.4: {} @@ -4423,7 +4283,8 @@ snapshots: prismjs@1.30.0: {} - promise-limit@2.7.0: {} + promise-limit@2.7.0: + optional: true prompts@2.4.2: dependencies: @@ -4856,7 +4717,8 @@ snapshots: web-namespaces@2.0.1: {} - web-streams-polyfill@3.3.3: {} + web-streams-polyfill@3.3.3: + optional: true which-pm-runs@1.1.0: {} @@ -4870,7 +4732,8 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.1.2 - ws@8.19.0: {} + ws@8.19.0: + optional: true xtend@4.0.2: {} diff --git a/src/db/schema.ts b/src/db/schema.ts index 0145978..378a032 100644 --- a/src/db/schema.ts +++ b/src/db/schema.ts @@ -1,6 +1,6 @@ import { integer, pgTable, varchar, date, json } from "drizzle-orm/pg-core"; -export const usersTable = pgTable("users", { +export const entryTable = pgTable("entries", { id: integer().primaryKey().generatedAlwaysAsIdentity(), data: date().defaultNow(), location: json(), diff --git a/src/pages/api/entry/all.ts b/src/pages/api/entry/all.ts index e080710..f804e44 100644 --- a/src/pages/api/entry/all.ts +++ b/src/pages/api/entry/all.ts @@ -1,7 +1,8 @@ -import { db, Entry } from "astro:db"; +import { db } from "../../../utils/db" +import { entryTable } from "../../../db/schema" export async function GET() { - const entries = await db.select().from(Entry) + const entries = await db.select().from(entryTable) return new Response(JSON.stringify(entries)) } \ No newline at end of file diff --git a/src/pages/api/entry/new.ts b/src/pages/api/entry/new.ts index 2d1b764..f19f330 100644 --- a/src/pages/api/entry/new.ts +++ b/src/pages/api/entry/new.ts @@ -1,4 +1,6 @@ -import { db, Entry } from "astro:db"; +import { db } from "../../../utils/db" +import { entryTable } from "../../../db/schema" +import { httpResponse } from "../../../utils/response"; export async function POST({ request }) { @@ -6,18 +8,15 @@ export async function POST({ request }) { try { const body = await request.json(); - - await db.insert(Entry).values(body) + const entry: typeof entryTable.$inferInsert = body + + await db.insert(entryTable).values(entry) } catch(e) { - return new Response( - JSON.stringify({ - "error": `Malformed JSON (${e})` - }),{ status: 400 } - ) + return httpResponse({ "error": `Malformed JSON (${e})` }, 400) } - return new Response(null, { status: 200 }); + return httpResponse(null, 200); } - return new Response(null, { status: 400 }); + return httpResponse(null, 400); } \ No newline at end of file diff --git a/src/utils/db.ts b/src/utils/db.ts index 5e17893..48e03ed 100644 --- a/src/utils/db.ts +++ b/src/utils/db.ts @@ -1,4 +1,4 @@ import 'dotenv/config'; import { drizzle } from 'drizzle-orm/node-postgres'; -const db = drizzle(process.env.DATABASE_URL!); +export const db = drizzle(process.env.DATABASE_URL!); diff --git a/src/utils/response.ts b/src/utils/response.ts new file mode 100644 index 0000000..b16eb8c --- /dev/null +++ b/src/utils/response.ts @@ -0,0 +1,5 @@ +export function httpResponse(data: object | null, code: number) { + return new Response(JSON.stringify(data), { + status: code + }) +} \ No newline at end of file