mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 18:51:11 -05:00
68 lines
1.8 KiB
TypeScript
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
|
|
};
|