FILE / Unmei/Backend
routes/characters.go
Исходный файл и его история в репозитории.
94 lines
1.9 KiB
Go
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)
|
|
}
|