first commit

This commit is contained in:
2026-06-10 18:30:46 +02:00
parent 3e7b0ae2e0
commit cabd4803a4
39 changed files with 3635 additions and 81 deletions
+103
View File
@@ -0,0 +1,103 @@
import { z } from "zod";
const intensity = z.enum(["mild", "moderate", "strong"]);
const confidence = z.enum(["high", "medium", "low"]);
export const ratingExplainedSchema = z.object({
officialRating: z.string(),
region: z.string(),
summary: z.string(),
factors: z.array(
z.object({
category: z.enum([
"violence",
"language",
"sexuality",
"substances",
"frightening",
"other",
]),
intensity,
description: z.string(),
approximateTiming: z.string().optional(),
confidence: confidence.optional(),
}),
),
borderlineNote: z.string().optional(),
});
export const skipGuideSchema = z.object({
originalRating: z.string(),
suggestedAudienceAge: z.number().int().min(0).max(21),
totalSkippedMinutes: z.number().int().min(0),
segments: z.array(
z.object({
start: z.string(),
end: z.string(),
reason: z.string(),
intensity,
plotImpact: z.enum(["none", "minor", "significant"]),
skipRecommendation: z.enum(["recommended", "optional", "do_not_skip"]),
resumeHint: z.string(),
}),
),
disclaimer: z.string(),
});
export const sensitivityGuideSchema = z.object({
summary: z.string(),
themes: z.array(
z.object({
theme: z.string(),
severity: intensity,
description: z.string(),
approximateTiming: z.string().optional(),
}),
),
});
export const internationalRatingsSchema = z.object({
ratings: z.array(
z.object({
country: z.string(),
countryCode: z.string(),
rating: z.string(),
descriptors: z.array(z.string()).optional(),
}),
),
discrepancyNote: z.string(),
strictestCountry: z.string().optional(),
mostLenientCountry: z.string().optional(),
});
export const productionFactsSchema = z.object({
facts: z.array(
z.object({
category: z.string(),
fact: z.string(),
}),
),
budget: z.string().optional(),
boxOffice: z.string().optional(),
filmingLocations: z.array(z.string()).optional(),
});
export const historicalAccuracySchema = z.object({
accuracyScore: z.number().min(0).max(100),
summary: z.string(),
accurateElements: z.array(z.string()),
inventions: z.array(
z.object({
claim: z.string(),
reality: z.string(),
}),
),
confidence,
});
export type RatingExplained = z.infer<typeof ratingExplainedSchema>;
export type SkipGuide = z.infer<typeof skipGuideSchema>;
export type SensitivityGuide = z.infer<typeof sensitivityGuideSchema>;
export type InternationalRatings = z.infer<typeof internationalRatingsSchema>;
export type ProductionFacts = z.infer<typeof productionFactsSchema>;
export type HistoricalAccuracy = z.infer<typeof historicalAccuracySchema>;