feat: real file upload to /opt/hotelsync/uploads + serve via /uploads/ on API

This commit is contained in:
2026-03-23 12:23:13 +03:00
parent 5540d0cdfa
commit 3ef7f8265a
5 changed files with 94 additions and 15 deletions

View File

@@ -4,6 +4,9 @@ import cookie from '@fastify/cookie'
import cors from '@fastify/cors'
import helmet from '@fastify/helmet'
import rateLimit from '@fastify/rate-limit'
import multipart from '@fastify/multipart'
import staticFiles from '@fastify/static'
import { join } from 'path'
import { config } from './config'
import './types' // side-effect: augments fastify types
@@ -22,6 +25,7 @@ import hotelSettingsRoutes from './routes/hotel-settings'
import rentalRoutes from './routes/rental'
import categoriesRoutes from './routes/categories'
import tariffsRoutes from './routes/tariffs'
import uploadRoutes from './routes/upload'
export async function buildApp() {
const fastify = Fastify({
@@ -34,6 +38,11 @@ export async function buildApp() {
bodyLimit: 20 * 1024 * 1024, // 20MB — for base64 photo uploads
})
// ── File uploads & static ─────────────────────────────────────────────────
await fastify.register(multipart)
const uploadsDir = process.env.UPLOADS_DIR ?? join(process.cwd(), 'uploads')
await fastify.register(staticFiles, { root: uploadsDir, prefix: '/uploads/' })
// ── Security ───────────────────────────────────────────────────────────────
await fastify.register(helmet, { contentSecurityPolicy: false })
@@ -86,6 +95,7 @@ export async function buildApp() {
await fastify.register(rentalRoutes)
await fastify.register(categoriesRoutes)
await fastify.register(tariffsRoutes)
await fastify.register(uploadRoutes)
return fastify
}