feat: backend for warnings, partial frontend for reports
This commit is contained in:
parent
29274287a2
commit
a0bc39bcba
12 changed files with 479 additions and 79 deletions
63
backend/routes/mod/warnings.go
Normal file
63
backend/routes/mod/warnings.go
Normal file
|
@ -0,0 +1,63 @@
|
|||
package mod
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"codeberg.org/u1f320/pronouns.cc/backend/db"
|
||||
"codeberg.org/u1f320/pronouns.cc/backend/log"
|
||||
"codeberg.org/u1f320/pronouns.cc/backend/server"
|
||||
"emperror.dev/errors"
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/go-chi/render"
|
||||
)
|
||||
|
||||
type warning struct {
|
||||
db.Warning
|
||||
Read bool `json:"read"`
|
||||
}
|
||||
|
||||
func dbWarningsToResponse(ws []db.Warning) []warning {
|
||||
out := make([]warning, len(ws))
|
||||
for i := range ws {
|
||||
out[i] = warning{ws[i], ws[i].ReadAt != nil}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func (s *Server) getWarnings(w http.ResponseWriter, r *http.Request) (err error) {
|
||||
ctx := r.Context()
|
||||
claims, _ := server.ClaimsFromContext(ctx)
|
||||
showAll := r.FormValue("all") == "true"
|
||||
|
||||
warnings, err := s.DB.Warnings(ctx, claims.UserID, !showAll)
|
||||
if err != nil {
|
||||
log.Errorf("getting warnings: %v", err)
|
||||
return errors.Wrap(err, "getting warnings from database")
|
||||
}
|
||||
|
||||
render.JSON(w, r, dbWarningsToResponse(warnings))
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) ackWarning(w http.ResponseWriter, r *http.Request) (err error) {
|
||||
ctx := r.Context()
|
||||
claims, _ := server.ClaimsFromContext(ctx)
|
||||
|
||||
id, err := strconv.ParseInt(chi.URLParam(r, "id"), 10, 64)
|
||||
if err != nil {
|
||||
return server.APIError{Code: server.ErrBadRequest}
|
||||
}
|
||||
|
||||
ok, err := s.DB.AckWarning(ctx, claims.UserID, id)
|
||||
if err != nil {
|
||||
log.Errorf("acknowledging warning: %v", err)
|
||||
return errors.Wrap(err, "acknowledging warning")
|
||||
}
|
||||
if !ok {
|
||||
return server.APIError{Code: server.ErrNotFound}
|
||||
}
|
||||
|
||||
render.JSON(w, r, map[string]any{"ok": true})
|
||||
return nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue