import Fastify from "fastify"; import cookie from "@fastify/cookie"; import multipart from "@fastify/multipart"; import { registerAuthRoutes } from "../modules/auth/routes/auth-routes.js"; import { registerAdminInventoryRoutes } from "../modules/inventory/routes/admin-inventory-routes.js"; import { registerAdminLookupRoutes } from "../modules/inventory/routes/admin-lookup-routes.js"; import { registerAdminImageRoutes } from "../modules/inventory/routes/admin-image-routes.js"; import { registerPublicInventoryRoutes } from "../modules/inventory/routes/public-inventory-routes.js"; import { registerPublicImageRoutes } from "../modules/inventory/routes/public-image-routes.js"; import { registerAdminListingRoutes } from "../modules/listings/routes/admin-listing-routes.js"; import { registerPublicListingRoutes } from "../modules/listings/routes/public-listing-routes.js"; import { registerAdminProductRoutes } from "../modules/products/routes/admin-product-routes.js"; import { registerPublicProductRoutes } from "../modules/products/routes/public-product-routes.js"; import { registerPublicSearchRoutes } from "../modules/search/routes/public-search-routes.js"; import { registerPublicSellerRoutes } from "../modules/sellers/routes/public-seller-routes.js"; import { registerPublicLookupRoutes } from "../modules/inventory/routes/public-lookup-routes.js"; import { registerAdminSaleRoutes } from "../modules/sales/routes/admin-sale-routes.js"; import { registerAdminAcquisitionRoutes } from "../modules/acquisitions/routes/admin-acquisition-routes.js"; import { registerAdminDashboardRoutes } from "../modules/dashboard/routes/admin-dashboard-routes.js"; import { registerAdminPricingRoutes } from "../modules/pricing/routes/admin-pricing-routes.js"; import { registerAdminProviderMappingRoutes } from "../modules/pricing/routes/admin-provider-mapping-routes.js"; import { registerAdminExportRoutes } from "../modules/exports/routes/admin-export-routes.js"; import { registerAdminSettingsRoutes } from "../modules/settings/routes/admin-settings-routes.js"; import { registerAdminSavedViewRoutes } from "../modules/search/routes/admin-saved-view-routes.js"; export function buildApp(dependencies) { const app = Fastify(); app.setErrorHandler((error, request, reply) => { const statusCode = error.statusCode ?? 500; const message = statusCode >= 500 ? "Internal server error." : error.message; if (statusCode >= 500) { request.log.error(error); } return reply.code(statusCode).send({ error: { code: error.code ?? "INTERNAL_SERVER_ERROR", message, }, }); }); app.get("/health", async () => ({ data: { status: "ok" } })); app.register(cookie); app.register(multipart, { limits: { fileSize: 10 * 1024 * 1024, files: 1 } }); app.register(registerAuthRoutes, { ...dependencies, prefix: "/api/v1/auth", }); app.register(registerAdminProductRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminInventoryRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminLookupRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminImageRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminListingRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminSaleRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminAcquisitionRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminDashboardRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminPricingRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminProviderMappingRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminExportRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminSettingsRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerAdminSavedViewRoutes, { ...dependencies, prefix: "/api/v1/admin", }); app.register(registerPublicSearchRoutes, { ...dependencies, prefix: "/api/v1", }); app.register(registerPublicProductRoutes, { ...dependencies, prefix: "/api/v1", }); app.register(registerPublicListingRoutes, { ...dependencies, prefix: "/api/v1", }); app.register(registerPublicInventoryRoutes, { ...dependencies, prefix: "/api/v1", }); app.register(registerPublicImageRoutes, { ...dependencies, prefix: "/api/v1", }); app.register(registerPublicSellerRoutes, { ...dependencies, prefix: "/api/v1", }); app.register(registerPublicLookupRoutes, { ...dependencies, prefix: "/api/v1", }); return app; }