package app import "net/http" func (s *Server) adminRedirect(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/admin/main", http.StatusSeeOther) } func (s *Server) adminMain(w http.ResponseWriter, r *http.Request) { data, err := s.adminData(r, "main") if err != nil { s.error(w, err) return } s.renderAdmin(w, r, "admin_main.html", "admin_main_partial.html", data) } func (s *Server) adminProjects(w http.ResponseWriter, r *http.Request) { data, err := s.adminData(r, "projects") if err != nil { s.error(w, err) return } s.renderAdmin(w, r, "admin_projects.html", "admin_projects_partial.html", data) } func (s *Server) adminContactDetails(w http.ResponseWriter, r *http.Request) { data, err := s.adminData(r, "contact-details") if err != nil { s.error(w, err) return } s.renderAdmin(w, r, "admin_contact_details.html", "admin_contact_details_partial.html", data) } func (s *Server) adminData(r *http.Request, tab string) (pageData, error) { content, err := s.store.SiteContent(r.Context()) if err != nil { return pageData{}, err } data := pageData{Title: "Admin", Admin: true, AdminTab: tab, Content: content, Success: r.URL.Query().Get("ok"), Error: r.URL.Query().Get("err"), Version: s.cfg.Version} if tab == "projects" { projects, err := s.store.Projects(r.Context(), false) if err != nil { return pageData{}, err } imagesByProject, err := s.store.ProjectImagesByProject(r.Context()) if err != nil { return pageData{}, err } for i := range projects { projects[i].Images = imagesByProject[projects[i].ID] } data.Projects = projects } if tab == "contact-details" { contacts, err := s.store.ContactRequests(r.Context()) if err != nil { return pageData{}, err } data.Contacts = contacts } return data, nil }