feat(deploy): production deployment setup and fixes
- Debian-based api image (bookworm-slim), docker/debian mirrors, prisma binaryTargets for openssl 3.0 - nginx: admin SPA under /admin, TLS via acme.sh (ZeroSSL) + auto-renewal cron, http->https redirect - prisma: add origin_goods.delisted migration, sync missing schema (good_image/tag_font_color/good_tags), fix users.createdAt Timestamptz - api: CORS wildcard reflection, helmet CORP cross-origin, price backfill in persistProductDetail, categoryIcon ancestor fallback, mediaByColor per-color gallery in public goods detail - admin: /admin base path (vite + router) - import-data.mjs: udt_name casting, serial sequence advance fix
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
export default defineEventHandler(() => {
|
||||
const config = useRuntimeConfig();
|
||||
return $fetch(`${config.public.backendUrl}/public/categories`);
|
||||
});
|
||||
export default defineEventHandler(() => {
|
||||
const config = useRuntimeConfig();
|
||||
return $fetch(`${config.public.backendUrl}/public/categories`);
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export default defineEventHandler(() => {
|
||||
const config = useRuntimeConfig();
|
||||
return $fetch(`${config.public.backendUrl}/public/countries`);
|
||||
});
|
||||
export default defineEventHandler(() => {
|
||||
const config = useRuntimeConfig();
|
||||
return $fetch(`${config.public.backendUrl}/public/countries`);
|
||||
});
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
export default defineEventHandler((event) => {
|
||||
const config = useRuntimeConfig();
|
||||
const requestUrl = event.node.req.url ?? '/';
|
||||
const query = Object.fromEntries(
|
||||
new URL(requestUrl, 'http://localhost').searchParams.entries(),
|
||||
);
|
||||
return $fetch(`${config.public.backendUrl}/public/goods`, { query });
|
||||
});
|
||||
export default defineEventHandler((event) => {
|
||||
const config = useRuntimeConfig();
|
||||
const requestUrl = event.node.req.url ?? '/';
|
||||
const query = Object.fromEntries(
|
||||
new URL(requestUrl, 'http://localhost').searchParams.entries(),
|
||||
);
|
||||
return $fetch(`${config.public.backendUrl}/public/goods`, { query });
|
||||
});
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
export default defineEventHandler((event) => {
|
||||
const config = useRuntimeConfig();
|
||||
const id = getRouterParam(event, 'id');
|
||||
|
||||
if (!id) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
message: 'Good ID is required',
|
||||
});
|
||||
}
|
||||
|
||||
return $fetch(`${config.public.backendUrl}/public/goods/${id}`);
|
||||
});
|
||||
export default defineEventHandler((event) => {
|
||||
const config = useRuntimeConfig();
|
||||
const id = getRouterParam(event, 'id');
|
||||
|
||||
if (!id) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
message: 'Good ID is required',
|
||||
});
|
||||
}
|
||||
|
||||
return $fetch(`${config.public.backendUrl}/public/goods/${id}`);
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export default defineEventHandler(() => {
|
||||
const config = useRuntimeConfig();
|
||||
return $fetch(`${config.public.backendUrl}/public/tag-groups`);
|
||||
});
|
||||
export default defineEventHandler(() => {
|
||||
const config = useRuntimeConfig();
|
||||
return $fetch(`${config.public.backendUrl}/public/tag-groups`);
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export default defineEventHandler(() => {
|
||||
const config = useRuntimeConfig();
|
||||
return $fetch(`${config.public.backendUrl}/public/tags`);
|
||||
});
|
||||
export default defineEventHandler(() => {
|
||||
const config = useRuntimeConfig();
|
||||
return $fetch(`${config.public.backendUrl}/public/tags`);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user