package handlers import ( "fmt" "net/http" ) // ============================================================================== // REQUEST/RESPONSE TYPES // Structured types for common request patterns with validation // ============================================================================== // LanguageRequest represents a request with language parameter type LanguageRequest struct { Lang string } // ParseLanguageRequest parses and validates language from query parameters func ParseLanguageRequest(r *http.Request) (*LanguageRequest, error) { lang := r.URL.Query().Get("lang") if lang == "" { lang = "en" } // Validate language if lang != "en" && lang != "es" { return nil, fmt.Errorf("unsupported language: %s (use 'en' or 'es')", lang) } return &LanguageRequest{Lang: lang}, nil } // PDFExportRequest represents all parameters for PDF export type PDFExportRequest struct { Lang string // Language: "en" or "es" Length string // Length: "short" or "long" Icons string // Icons: "show" or "hide" Version string // Version: "with_skills" or "clean" } // ParsePDFExportRequest parses and validates PDF export parameters func ParsePDFExportRequest(r *http.Request) (*PDFExportRequest, error) { req := &PDFExportRequest{ Lang: r.URL.Query().Get("lang"), Length: r.URL.Query().Get("length"), Icons: r.URL.Query().Get("icons"), Version: r.URL.Query().Get("version"), } // Set defaults if req.Lang == "" { req.Lang = "en" } if req.Length == "" { req.Length = "short" } if req.Icons == "" { req.Icons = "show" } if req.Version == "" { req.Version = "with_skills" } // Validate language if req.Lang != "en" && req.Lang != "es" { return nil, fmt.Errorf("unsupported language: %s (use 'en' or 'es')", req.Lang) } // Validate length if req.Length != "short" && req.Length != "long" { return nil, fmt.Errorf("unsupported length: %s (use 'short' or 'long')", req.Length) } // Validate icons if req.Icons != "show" && req.Icons != "hide" { return nil, fmt.Errorf("unsupported icons option: %s (use 'show' or 'hide')", req.Icons) } // Validate version if req.Version != "with_skills" && req.Version != "clean" { return nil, fmt.Errorf("unsupported version: %s (use 'with_skills' or 'clean')", req.Version) } return req, nil } // PreferenceToggleRequest represents a toggle request with language context type PreferenceToggleRequest struct { Lang string // Current language from query or cookie } // ParsePreferenceToggleRequest parses toggle request parameters func ParsePreferenceToggleRequest(r *http.Request, defaultLang string) *PreferenceToggleRequest { lang := r.URL.Query().Get("lang") if lang == "" { lang = defaultLang } return &PreferenceToggleRequest{Lang: lang} }