import { z } from 'zod'; import { ETeamVisibility } from '../../types/teams'; export const teamCreateSchema = z.object({ name: z .string() .min(3, 'Nama tim minimal 3 karakter') .max(50, 'Nama tim maksimal 50 karakter'), logo: z.string().url('Logo harus berupa URL yang valid').nullable(), banner: z.string().url('Banner harus berupa URL yang valid').nullable(), description: z .string() .min(10, 'Deskripsi minimal 10 karakter') .max(500, 'Deskripsi maksimal 500 karakter'), city: z.string().min(1, 'Kota harus diisi'), visibility: z.nativeEnum(ETeamVisibility, { errorMap: () => ({ message: 'Visibilitas tidak valid' }), }), }); export const teamUpdateSchema = z.object({ name: z .string() .min(3, 'Nama tim minimal 3 karakter') .max(50, 'Nama tim maksimal 50 karakter') .optional(), logo: z.string().url('Logo harus berupa URL yang valid').nullable().optional(), banner: z.string().url('Banner harus berupa URL yang valid').nullable().optional(), description: z .string() .min(10, 'Deskripsi minimal 10 karakter') .max(500, 'Deskripsi maksimal 500 karakter') .optional(), city: z.string().min(1, 'Kota harus diisi').optional(), visibility: z .nativeEnum(ETeamVisibility, { errorMap: () => ({ message: 'Visibilitas tidak valid' }), }) .optional(), }); export const inviteMemberSchema = z.object({ email: z.string().email('Email tidak valid'), }); export const joinTeamSchema = z.object({ message: z .string() .min(10, 'Pesan minimal 10 karakter') .max(200, 'Pesan maksimal 200 karakter'), }); export const projectSubmissionSchema = z.object({ project_name: z .string() .min(3, 'Nama project minimal 3 karakter') .max(100, 'Nama project maksimal 100 karakter'), description: z .string() .min(20, 'Deskripsi minimal 20 karakter') .max(1000, 'Deskripsi maksimal 1000 karakter'), repository_url: z.string().url('URL repository tidak valid'), demo_url: z.string().url('URL demo tidak valid').optional().or(z.literal('')), presentation_url: z.string().url('URL presentasi tidak valid').optional().or(z.literal('')), screenshots: z.array(z.string().url('URL screenshot tidak valid')).optional(), }); export const userOnboardingSchema = z.object({ fullname: z.string().min(3, 'Nama lengkap minimal 3 karakter').optional(), avatar: z.string().url('Avatar harus berupa URL yang valid').nullable().optional(), location: z.string().min(1, 'Domisili harus diisi'), bio: z.string().max(500, 'Bio maksimal 500 karakter').optional(), skills: z.array(z.string()).optional(), }); export type TTeamCreateForm = z.infer; export type TTeamUpdateForm = z.infer; export type TInviteMemberForm = z.infer; export type TJoinTeamForm = z.infer; export type TProjectSubmissionForm = z.infer; export type TUserOnboardingForm = z.infer;