Files
DoGaMa-serv/internal/web/template_repositories.go
T
2026-08-26 22:35:42 +02:00

75 lines
2.6 KiB
Go

package web
import (
"database/sql"
"errors"
"net/http"
"git.zaynet.fr/DoGaMa/DoGaMa-serv/internal/templaterepo"
)
func (s *server) templateRepositoriesPage(w http.ResponseWriter, r *http.Request) {
data, ok := s.adminPageData(w, r, "Administration", "administration")
if !ok {
return
}
entries, err := s.repository.ListTemplateRepositories(r.Context())
if err != nil {
s.problem(w, http.StatusInternalServerError, message("error.internal"))
return
}
data.TemplateRepositories = entries
s.render(w, http.StatusOK, "settings.html", data)
}
func (s *server) templateRepositoryCreateForm(w http.ResponseWriter, r *http.Request) {
actor, ok := s.requireAdminMutation(w, r, false)
if !ok {
return
}
in := templaterepo.Input{Name: r.FormValue("name"), URL: r.FormValue("url")}
if _, err := s.repository.CreateTemplateRepository(r.Context(), in); err != nil {
if errors.Is(err, templaterepo.ErrInvalid) {
s.templateRepositoriesRender(w, r, http.StatusUnprocessableEntity, in, localized(s.language(r, actor.Language), "template_repositories.validation_error"))
return
}
s.templateRepositoriesRender(w, r, http.StatusUnprocessableEntity, in, localized(s.language(r, actor.Language), "template_repositories.duplicate_error"))
return
}
http.Redirect(w, r, "/administration#repositories", http.StatusSeeOther)
}
func (s *server) templateRepositoryDeleteForm(w http.ResponseWriter, r *http.Request) {
actor, ok := s.requireAdminMutation(w, r, false)
if !ok {
return
}
if err := s.repository.DeleteTemplateRepository(r.Context(), r.PathValue("id")); err != nil {
if errors.Is(err, templaterepo.ErrInvalid) || errors.Is(err, sql.ErrNoRows) {
s.problem(w, http.StatusNotFound, localized(s.language(r, actor.Language), "template_repositories.not_found"))
return
}
s.problem(w, http.StatusInternalServerError, message("error.internal"))
return
}
http.Redirect(w, r, "/administration#repositories", http.StatusSeeOther)
}
func (s *server) templateRepositoriesRender(w http.ResponseWriter, r *http.Request, status int, in templaterepo.Input, formError string) {
data, ok := s.adminPageData(w, r, "Template repositories", "administration")
if !ok {
return
}
entries, err := s.repository.ListTemplateRepositories(r.Context())
if err != nil {
s.problem(w, http.StatusInternalServerError, message("error.internal"))
return
}
data.TemplateRepositories, data.TemplateRepositoryInput, data.Error = entries, in, formError
if err := s.populateAdminUsers(r, &data); err != nil {
s.problem(w, http.StatusInternalServerError, "The users are unavailable.")
return
}
s.render(w, status, "settings.html", data)
}