101 lines
2.7 KiB
Go
101 lines
2.7 KiB
Go
|
|
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}
|
||
|
|
}
|