import { IsBoolean, IsDateString, IsIn, IsInt, IsNumber, IsOptional, IsString, Max, Min } from "class-validator"; export class CreateBillPayeeDto { @IsString() name!: string; @IsOptional() @IsString() nickname?: string; @IsOptional() @IsString() category?: string; @IsOptional() @IsString() website?: string; @IsOptional() @IsString() accountNumberLast4?: string; } export class CreateBillDto { @IsOptional() @IsString() payeeId?: string; @IsString() name!: string; @IsNumber() @Min(0.01) amount!: number; @IsOptional() @IsString() currency?: string; @IsDateString() dueDate!: string; @IsOptional() @IsIn(["pending", "scheduled"]) status?: "pending" | "scheduled"; @IsOptional() @IsIn(["none", "weekly", "monthly", "quarterly", "yearly"]) recurrence?: "none" | "weekly" | "monthly" | "quarterly" | "yearly"; @IsOptional() @IsBoolean() autopay?: boolean; @IsOptional() @IsInt() @Min(0) @Max(30) reminderDays?: number; @IsOptional() @IsString() notes?: string; } export class UpdateBillDto { @IsOptional() @IsString() payeeId?: string | null; @IsOptional() @IsString() name?: string; @IsOptional() @IsNumber() @Min(0.01) amount?: number; @IsOptional() @IsString() currency?: string; @IsOptional() @IsDateString() dueDate?: string; @IsOptional() @IsIn(["pending", "scheduled", "paid", "skipped", "cancelled"]) status?: "pending" | "scheduled" | "paid" | "skipped" | "cancelled"; @IsOptional() @IsIn(["none", "weekly", "monthly", "quarterly", "yearly"]) recurrence?: "none" | "weekly" | "monthly" | "quarterly" | "yearly"; @IsOptional() @IsBoolean() autopay?: boolean; @IsOptional() @IsInt() @Min(0) @Max(30) reminderDays?: number; @IsOptional() @IsString() notes?: string | null; } export class MarkBillPaidDto { @IsOptional() @IsNumber() @Min(0.01) amount?: number; @IsOptional() @IsDateString() paidAt?: string; @IsOptional() @IsIn(["manual", "autopay", "bank_bill_pay", "card", "ach", "check", "cash", "other"]) method?: string; @IsOptional() @IsString() confirmationNumber?: string; @IsOptional() @IsString() notes?: string; }