package app import ( "net/http" "strconv" "strings" "archi_folio/internal/store" ) func (s *Server) home(w http.ResponseWriter, r *http.Request) { content, err := s.store.SiteContent(r.Context()) if err != nil { s.error(w, err) return } projects, err := s.store.Projects(r.Context(), true) if err != nil { s.error(w, err) return } s.render(w, "home.html", pageData{Title: content.HeroTitle, Active: "home", Content: content, Projects: projects, CurrentPath: r.URL.Path}) } func (s *Server) projects(w http.ResponseWriter, r *http.Request) { content, err := s.store.SiteContent(r.Context()) if err != nil { s.error(w, err) return } projects, err := s.store.Projects(r.Context(), false) if err != nil { s.error(w, err) return } s.render(w, "projects.html", pageData{Title: "Projects", Active: "projects", Content: content, Projects: projects, CurrentPath: r.URL.Path}) } func (s *Server) projectDetail(w http.ResponseWriter, r *http.Request) { content, err := s.store.SiteContent(r.Context()) if err != nil { s.error(w, err) return } project, err := s.store.ProjectBySlug(r.Context(), r.PathValue("slug")) if store.IsNotFound(err) { http.NotFound(w, r) return } if err != nil { s.error(w, err) return } s.render(w, "project.html", pageData{Title: project.Title, Active: "projects", Content: content, Project: project, CurrentPath: r.URL.Path}) } func (s *Server) projectImageOverlay(w http.ResponseWriter, r *http.Request) { id, err := strconv.ParseInt(r.PathValue("imageID"), 10, 64) if err != nil { http.NotFound(w, r) return } project, image, err := s.store.ProjectImageForSlug(r.Context(), r.PathValue("slug"), id) if store.IsNotFound(err) { http.NotFound(w, r) return } if err != nil { s.error(w, err) return } s.render(w, "overlay.html", pageData{Title: project.Title, Project: project, Image: image}) } func (s *Server) about(w http.ResponseWriter, r *http.Request) { content, err := s.store.SiteContent(r.Context()) if err != nil { s.error(w, err) return } s.render(w, "about.html", pageData{Title: "About", Active: "about", Content: content, CurrentPath: r.URL.Path}) } func (s *Server) contact(w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { s.render(w, "contact_result.html", pageData{Error: "Please check the form and try again."}) return } name := strings.TrimSpace(r.FormValue("name")) email := strings.TrimSpace(r.FormValue("email")) message := strings.TrimSpace(r.FormValue("message")) if name == "" || email == "" || message == "" || !strings.Contains(email, "@") { s.render(w, "contact_result.html", pageData{Error: "Please provide your name, a valid email, and a short message."}) return } if err := s.store.SaveContact(r.Context(), name, email, message); err != nil { s.render(w, "contact_result.html", pageData{Error: "The request could not be saved. Please try again."}) return } s.render(w, "contact_result.html", pageData{Success: "Thanks. Your request has been saved and the studio will review it soon."}) }