2024-08-30 12:36:47 +07:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"log"
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
"github.com/gorilla/mux"
|
|
|
|
)
|
|
|
|
|
|
|
|
type APIServer struct {
|
|
|
|
Host string
|
|
|
|
Port string
|
2024-08-30 18:02:07 +07:00
|
|
|
Db SQLiteDatabase
|
2024-08-31 15:10:25 +07:00
|
|
|
Cfg *Config
|
2024-08-30 12:36:47 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
type APIError struct {
|
2024-08-31 15:10:25 +07:00
|
|
|
Status string
|
|
|
|
Error string
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewAPIError(status string, error string) *APIError {
|
|
|
|
return &APIError{
|
|
|
|
Status: status,
|
|
|
|
Error: error,
|
|
|
|
}
|
2024-08-30 12:36:47 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
func WriteJSON(w http.ResponseWriter, status int, v any) error {
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
|
|
w.WriteHeader(status)
|
|
|
|
return json.NewEncoder(w).Encode(v)
|
|
|
|
}
|
|
|
|
|
2024-08-31 15:10:25 +07:00
|
|
|
func NewAPIServer(database SQLiteDatabase, cfg Config) *APIServer {
|
2024-08-30 12:36:47 +07:00
|
|
|
return &APIServer{
|
|
|
|
Host: cfg.Host,
|
2024-08-30 18:02:07 +07:00
|
|
|
Db: database,
|
2024-08-31 15:10:25 +07:00
|
|
|
Cfg: &cfg,
|
2024-08-30 12:36:47 +07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *APIServer) Start() {
|
|
|
|
router := mux.NewRouter()
|
|
|
|
router.HandleFunc("/prerace", s.handleCreatePreRace).Methods("POST")
|
|
|
|
router.HandleFunc("/preraces", s.handleGetPreRaces).Methods("GET")
|
2024-08-30 18:02:07 +07:00
|
|
|
router.HandleFunc("/prerace/{id}", s.handleDeletePreRace).Methods("DELETE")
|
|
|
|
router.HandleFunc("/prerace/{id}", s.handleUpdatePreRace).Methods("PUT")
|
|
|
|
router.HandleFunc("/prerace/{id}", s.handleGetPreRaceByID).Methods("GET")
|
2024-08-31 15:10:25 +07:00
|
|
|
router.HandleFunc("/race/{title}", s.handleCreateRace).Methods("POST")
|
2024-08-30 12:36:47 +07:00
|
|
|
|
|
|
|
log.Println("Listening for new Preraces / Races")
|
|
|
|
|
|
|
|
http.ListenAndServe(s.Host, router)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *APIServer) handleGetPreRaceByID(w http.ResponseWriter, r *http.Request) {
|
2024-08-30 18:02:07 +07:00
|
|
|
WriteJSON(w, http.StatusOK, mux.Vars(r))
|
2024-08-30 12:36:47 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
func (s *APIServer) handleGetPreRaces(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *APIServer) handleCreatePreRace(w http.ResponseWriter, r *http.Request) {
|
2024-08-30 18:02:07 +07:00
|
|
|
race := NewRace()
|
|
|
|
_ = json.NewDecoder(r.Body).Decode(&race)
|
|
|
|
defer r.Body.Close()
|
|
|
|
|
|
|
|
race.PreRace = true
|
|
|
|
|
2024-08-31 15:10:25 +07:00
|
|
|
exist := s.Db.FindRelease(race.TorrentName, race.Indexer)
|
|
|
|
|
|
|
|
if exist.TorrentName == "" {
|
|
|
|
err := s.Db.CreatePreRace(race)
|
|
|
|
if err != nil {
|
|
|
|
log.Println("Could not create new race in db", err)
|
|
|
|
WriteJSON(w, http.StatusForbidden, "{Error: Could not add to database}")
|
|
|
|
}
|
2024-08-30 18:02:07 +07:00
|
|
|
WriteJSON(w, http.StatusOK, race)
|
2024-08-31 15:10:25 +07:00
|
|
|
} else {
|
|
|
|
er := NewAPIError("ok", "already in database")
|
|
|
|
WriteJSON(w, http.StatusOK, er)
|
2024-08-30 18:02:07 +07:00
|
|
|
}
|
2024-08-31 15:10:25 +07:00
|
|
|
|
|
|
|
rls := NewRelease(race.TorrentName, race.Title, race.Year, *s.Cfg)
|
|
|
|
rls.ProcessRelease()
|
2024-08-30 12:36:47 +07:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *APIServer) handleDeletePreRace(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *APIServer) handleUpdatePreRace(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
}
|
2024-08-31 15:10:25 +07:00
|
|
|
|
|
|
|
func (s *APIServer) handleCreateRace(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
}
|