x
This commit is contained in:
1 parent
fb776f778f
commit
8f64d89f6f
13 files changed
+779
-295
No files matched your search
@@ -0,0 +1,89 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const filePath = path.join(__dirname, 'apps/backend/src/routes/pages.ts');
|
||||
let content = fs.readFileSync(filePath, 'utf8');
|
||||
|
||||
content = content.replace(/import \{[\s\S]*?\} from "@homaroma\/types";/, `import {
|
||||
LocalizedStringSchema,
|
||||
HeroSectionPayloadSchema,
|
||||
CategoriesSectionPayloadSchema,
|
||||
ProductsSectionPayloadSchema,
|
||||
BannerSectionPayloadSchema,
|
||||
TextSectionPayloadSchema,
|
||||
AnnouncementBarSectionPayloadSchema,
|
||||
NewsletterSectionPayloadSchema,
|
||||
EditorialTileSectionPayloadSchema,
|
||||
EditorialCarouselSectionPayloadSchema,
|
||||
HeroArticleSectionPayloadSchema,
|
||||
RichTextSectionPayloadSchema,
|
||||
ScentNotesBreakdownSectionPayloadSchema,
|
||||
QuoteCalloutSectionPayloadSchema,
|
||||
ProductCarouselSectionPayloadSchema,
|
||||
AccordionSectionPayloadSchema,
|
||||
ContactInfoSectionPayloadSchema,
|
||||
ContactFormSectionPayloadSchema
|
||||
} from "@homaroma/types";
|
||||
import { z } from "zod";`);
|
||||
|
||||
// Remove manual validation functions
|
||||
content = content.replace(/function isLocalizedStringValue[\s\S]*?function validateContactFormPayload[^{]*\{[\s\S]*?return null;\n\}/, '');
|
||||
|
||||
// Refactor validateSectionPayload
|
||||
content = content.replace(/function validateSectionPayload\(type: string, payload: any\): string \| null \{[\s\S]*?return null;\n\}/, `function validateSectionPayload(type: string, payload: any): { success: boolean; issues?: z.ZodIssue[] } {
|
||||
if (!payload || typeof payload !== 'object') {
|
||||
return { success: false, issues: [{ code: 'custom', message: "Payload must be a JSON object", path: [] }] };
|
||||
}
|
||||
|
||||
let schema: z.ZodTypeAny;
|
||||
|
||||
switch (type.toUpperCase()) {
|
||||
case 'HERO': schema = HeroSectionPayloadSchema; break;
|
||||
case 'CATEGORIES': schema = CategoriesSectionPayloadSchema; break;
|
||||
case 'PRODUCTS': schema = ProductsSectionPayloadSchema; break;
|
||||
case 'BANNER': schema = BannerSectionPayloadSchema; break;
|
||||
case 'TEXT': schema = TextSectionPayloadSchema; break;
|
||||
case 'ANNOUNCEMENT_BAR': schema = AnnouncementBarSectionPayloadSchema; break;
|
||||
case 'NEWSLETTER': schema = NewsletterSectionPayloadSchema; break;
|
||||
case 'EDITORIAL_TILE': schema = EditorialTileSectionPayloadSchema; break;
|
||||
case 'EDITORIAL_CAROUSEL': schema = EditorialCarouselSectionPayloadSchema; break;
|
||||
case 'HERO_ARTICLE': schema = HeroArticleSectionPayloadSchema; break;
|
||||
case 'RICH_TEXT': schema = RichTextSectionPayloadSchema; break;
|
||||
case 'SCENT_NOTES_BREAKDOWN': schema = ScentNotesBreakdownSectionPayloadSchema; break;
|
||||
case 'QUOTE_CALLOUT': schema = QuoteCalloutSectionPayloadSchema; break;
|
||||
case 'PRODUCT_CAROUSEL': schema = ProductCarouselSectionPayloadSchema; break;
|
||||
case 'ACCORDION': schema = AccordionSectionPayloadSchema; break;
|
||||
case 'CONTACT_INFO': schema = ContactInfoSectionPayloadSchema; break;
|
||||
case 'CONTACT_FORM': schema = ContactFormSectionPayloadSchema; break;
|
||||
default:
|
||||
return { success: false, issues: [{ code: 'custom', message: \`Unknown section type: \${type}\`, path: [] }] };
|
||||
}
|
||||
|
||||
const res = schema.safeParse(payload);
|
||||
if (!res.success) {
|
||||
return { success: false, issues: res.error.issues };
|
||||
}
|
||||
return { success: true };
|
||||
}`);
|
||||
|
||||
// Update error handling in POST /:slug/sections
|
||||
content = content.replace(
|
||||
/const validationError = validateSectionPayload\(type, payload\);\n\s*if \(validationError\) \{\n\s*set\.status = 400;\n\s*return \{ error: validationError \};\n\s*\}/g,
|
||||
`const validationResult = validateSectionPayload(type, payload);
|
||||
if (!validationResult.success) {
|
||||
set.status = 400;
|
||||
return { error: "Validation failed", details: validationResult.issues };
|
||||
}`
|
||||
);
|
||||
|
||||
// Update error handling in PUT /sections/:sectionId
|
||||
content = content.replace(
|
||||
/const validationError = validateSectionPayload\(validationType, payload\);\n\s*if \(validationError\) \{\n\s*set\.status = 400;\n\s*return \{ error: validationError \};\n\s*\}/g,
|
||||
`const validationResult = validateSectionPayload(validationType, payload);
|
||||
if (!validationResult.success) {
|
||||
set.status = 400;
|
||||
return { error: "Validation failed", details: validationResult.issues };
|
||||
}`
|
||||
);
|
||||
|
||||
fs.writeFileSync(filePath, content);
|
||||
Reference in new issue
Block a user