FILE / Unmei/Backend

routes/characters.go

Исходный файл и его история в репозитории.
FILE 45bb32e7a6664f9c680c83ff29b4ed1b934d7912
Files
Backend/routes/characters.go
T
2025-03-12 16:30:40 +03:00

94 lines
1.9 KiB
Go

package routes
import (
"backend/database"
"database/sql"
"encoding/json"
"errors"
"github.com/go-chi/chi/v5"
"net/http"
)
func RegisterCharactersRoutes(r chi.Router) {
r.Route("/", func(s chi.Router) {
s.Get("/", getCharacters)
s.Post("/", createCharacter)
})
r.Route("/{id:[0-9]+}", func(s chi.Router) {
s.Get("/", getCharacter)
s.Put("/", updateCharacter)
s.Delete("/", deleteCharacter)
})
r.Get("/characters/{id:[0-9]+}/novels", getCharacterNovels)
}
func getCharacters(w http.ResponseWriter, r *http.Request) {
characters, err := database.FetchCharacters()
Response(w, err, characters)
}
func createCharacter(w http.ResponseWriter, r *http.Request) {
Response(w, nil, "todo")
}
func getCharacter(w http.ResponseWriter, r *http.Request) {
id := IURLParam(r, "id")
char, err := database.FetchCharacter(id)
Response(w, err, char)
}
func updateCharacter(w http.ResponseWriter, r *http.Request) {
user, err := GetCurrentUser(r)
if err != nil {
NoAccess.Ferror(w)
return
}
hasPerm := hasPermission(user, "characters")
if !hasPerm {
NoAccess.Ferror(w)
return
}
body, err := ReadBody(r)
if err != nil {
Error(w, err)
return
}
character := new(database.Character)
err = json.Unmarshal(body, character)
if err != nil {
Error(w, err)
return
}
character, err = database.UpdateCharacter(character)
Response(w, err, character)
}
func deleteCharacter(w http.ResponseWriter, r *http.Request) {
id := IURLParam(r, "id")
user, err := GetCurrentUser(r)
if err != nil {
NoAccess.Ferror(w)
return
}
hasPerm := hasPermission(user, "characters")
if !hasPerm {
NoAccess.Ferror(w)
return
}
err = database.DeleteCharacter(id)
if errors.Is(err, sql.ErrNoRows) {
NotFound.Ferror(w)
return
}
Response(w, err, "ok")
}
func getCharacterNovels(w http.ResponseWriter, r *http.Request) {
id := IURLParam(r, "id")
novels, err := database.FetchCharacterNovels(id)
Response(w, err, novels)
}