Files
music-agregator/internal/api/router.go
T

83 lines
2.1 KiB
Go

package api
import (
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
"github.com/go-chi/cors"
)
func NewRouter(h *Handlers) *chi.Mux {
r := chi.NewRouter()
r.Use(middleware.Logger)
r.Use(middleware.Recoverer)
r.Use(cors.Handler(cors.Options{
AllowedOrigins: []string{"*"},
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type"},
AllowCredentials: true,
MaxAge: 300,
}))
r.Get("/health", h.Health)
r.Route("/api", func(r chi.Router) {
r.Route("/indexers", func(r chi.Router) {
r.Get("/", h.ListIndexers)
r.Post("/search", h.SearchIndexers)
})
r.Route("/torrents", func(r chi.Router) {
r.Get("/", h.ListTorrents)
r.Post("/", h.AddTorrent)
r.Get("/{hash}", h.GetTorrent)
r.Delete("/{hash}", h.RemoveTorrent)
r.Post("/{hash}/pause", h.PauseTorrent)
r.Post("/{hash}/resume", h.ResumeTorrent)
})
r.Route("/metadata", func(r chi.Router) {
r.Post("/artists/search", h.SearchArtists)
r.Get("/artists/{id}/albums", h.GetArtistAlbums)
})
r.Post("/sync", h.Sync)
r.Route("/artists", func(r chi.Router) {
r.Get("/{id}", h.GetArtist)
r.Put("/{id}", h.EditArtist)
r.Post("/{id}/refresh", h.RefreshArtist)
r.Delete("/{id}", h.DeleteArtist)
r.Put("/{id}/albums/monitor", h.BulkMonitorArtistAlbums)
r.Post("/{id}/search", h.SearchArtistAlbums)
})
r.Route("/albums", func(r chi.Router) {
r.Get("/{id}", h.GetAlbum)
r.Put("/{id}", h.EditAlbum)
r.Post("/{id}/search", h.SearchAlbum)
})
r.Post("/blocklist", h.AddToBlocklist)
r.Route("/queue", func(r chi.Router) {
r.Get("/", h.ListQueue)
r.Post("/", h.AddToQueue)
r.Post("/sync", h.SyncQueue)
r.Get("/stats", h.QueueStats)
r.Get("/{id}", h.GetQueueItem)
r.Put("/{id}", h.UpdateQueueItem)
r.Delete("/{id}", h.DeleteQueueItem)
r.Post("/{id}/blocklist", h.BlocklistQueueItem)
})
r.Route("/library", func(r chi.Router) {
r.Get("/artists", h.ListLibraryArtists)
r.Get("/albums", h.ListLibraryAlbums)
r.Get("/stats", h.LibraryStats)
})
})
return r
}