Files
thrilltrack-explorer/src-old/lib/privacyValidation.ts

68 lines
1.8 KiB
TypeScript

/**
* Privacy Settings Validation
*
* Provides Zod schemas for runtime validation of privacy settings.
*
* Usage:
* ```typescript
* const validated = privacyFormSchema.parse(userInput);
* ```
*
* Security:
* - All user inputs must be validated before database writes
* - Prevents injection attacks and data corruption
* - Ensures data integrity with type-safe validation
*/
import { z } from 'zod';
/**
* Schema for privacy settings in user_preferences
* Uses defaults for backward compatibility with incomplete data
*/
export const privacySettingsSchema = z.object({
activity_visibility: z.enum(['public', 'private'] as const).default('public'),
search_visibility: z.boolean().default(true),
show_location: z.boolean().default(false),
show_age: z.boolean().default(false),
show_avatar: z.boolean().default(true),
show_bio: z.boolean().default(true),
show_activity_stats: z.boolean().default(true),
show_home_park: z.boolean().default(false)
}).passthrough();
/**
* Schema for profile privacy settings
*/
export const profilePrivacySchema = z.object({
privacy_level: z.enum(['public', 'private'] as const),
show_pronouns: z.boolean()
});
/**
* Combined schema for privacy form
*/
export const privacyFormSchema = privacySettingsSchema.merge(profilePrivacySchema);
/**
* Schema for blocking a user
*/
export const blockUserSchema = z.object({
blocked_id: z.string().uuid('Invalid user ID'),
reason: z.string().max(500, 'Reason must be 500 characters or less').optional()
});
/**
* Default privacy settings for new users
*/
export const DEFAULT_PRIVACY_SETTINGS = {
activity_visibility: 'public' as const,
search_visibility: true,
show_location: false,
show_age: false,
show_avatar: true,
show_bio: true,
show_activity_stats: true,
show_home_park: false
};