Files
cv-site/internal/handlers/types.go
T

101 lines
2.7 KiB
Go
Raw Normal View History

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}
}