package api import ( "net/http" "arimelody.me/arimelody.me/admin" music "arimelody.me/arimelody.me/music/view" ) func Handler() http.Handler { mux := http.NewServeMux() // ARTIST ENDPOINTS mux.Handle("/v1/artist/", http.StripPrefix("/v1/artist", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: // GET /api/v1/artist/{id} ServeArtist().ServeHTTP(w, r) case http.MethodPut: // PUT /api/v1/artist/{id} (admin) admin.MustAuthorise(UpdateArtist()).ServeHTTP(w, r) case http.MethodDelete: // DELETE /api/v1/artist/{id} (admin) admin.MustAuthorise(DeleteArtist()).ServeHTTP(w, r) default: http.NotFound(w, r) } }))) mux.Handle("/v1/artist", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: // GET /api/v1/artist ServeAllArtists().ServeHTTP(w, r) case http.MethodPost: // POST /api/v1/artist (admin) admin.MustAuthorise(CreateArtist()).ServeHTTP(w, r) default: http.NotFound(w, r) } })) // RELEASE ENDPOINTS mux.Handle("/v1/music/", http.StripPrefix("/v1/music", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: // GET /api/v1/music/{id} music.ServeRelease().ServeHTTP(w, r) case http.MethodPut: // PUT /api/v1/music/{id} (admin) admin.MustAuthorise(UpdateRelease()).ServeHTTP(w, r) case http.MethodDelete: // DELETE /api/v1/music/{id} (admin) admin.MustAuthorise(DeleteRelease()).ServeHTTP(w, r) default: http.NotFound(w, r) } }))) mux.Handle("/v1/music", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: // GET /api/v1/music ServeCatalog().ServeHTTP(w, r) case http.MethodPost: // POST /api/v1/music (admin) admin.MustAuthorise(CreateRelease()).ServeHTTP(w, r) default: http.NotFound(w, r) } })) // TRACK ENDPOINTS mux.Handle("/v1/track/", http.StripPrefix("/v1/track", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: // GET /api/v1/track/{id} (admin) admin.MustAuthorise(ServeTrack()).ServeHTTP(w, r) case http.MethodPut: // PUT /api/v1/track/{id} (admin) admin.MustAuthorise(UpdateTrack()).ServeHTTP(w, r) case http.MethodDelete: // DELETE /api/v1/track/{id} (admin) admin.MustAuthorise(DeleteTrack()).ServeHTTP(w, r) default: http.NotFound(w, r) } }))) mux.Handle("/v1/track", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: // GET /api/v1/track (admin) admin.MustAuthorise(ServeAllTracks()).ServeHTTP(w, r) case http.MethodPost: // POST /api/v1/track (admin) admin.MustAuthorise(CreateTrack()).ServeHTTP(w, r) default: http.NotFound(w, r) } })) return mux }