1
0
Files
record-shop/server/src/app.ts
Samu ded4e17849 feat: discogs lookup routes (barcode/search/release preview)
Known-red tests pending later tasks:
- 'reports duplicate when release already in collection' needs
  POST /api/collection (Task 15)
- 'reports ripped...' and 'reports ambiguous...' need the test-only
  POST /api/library/albums/test-seed route (Task 16)
2026-08-29 17:07:04 +02:00

43 lines
1.2 KiB
TypeScript

import Fastify, { FastifyInstance } from 'fastify'
import Database from 'better-sqlite3'
import cookie from '@fastify/cookie'
import type { Config } from './config.js'
import { SerialQueue } from './queue.js'
import { registerAuthRoutes } from './routes/authRoutes.js'
import { registerSettingsRoutes } from './routes/settingsRoutes.js'
import { registerLookupRoutes } from './routes/lookupRoutes.js'
declare module 'fastify' {
interface FastifyInstance {
db: Database.Database
config: Config
fetchImpl: typeof fetch
discogsQueue: SerialQueue
}
interface FastifyRequest {
user?: import('./auth.js').UserRow
}
}
export interface AppOptions {
db: Database.Database
config: Config
fetchImpl?: typeof fetch
}
export async function buildApp(opts: AppOptions): Promise<FastifyInstance> {
const app = Fastify({ logger: false })
app.decorate('db', opts.db)
app.decorate('config', opts.config)
app.decorate('fetchImpl', opts.fetchImpl ?? fetch)
app.decorate('discogsQueue', new SerialQueue({ minIntervalMs: 1100 }))
await app.register(cookie)
await registerAuthRoutes(app)
await registerSettingsRoutes(app)
await registerLookupRoutes(app)
app.get('/api/health', async () => ({ ok: true }))
return app
}