package nativeapiimport ("context""errors""io""net/http""github.com/deluan/rest""github.com/go-chi/chi/v5""github.com/navidrome/navidrome/consts""github.com/navidrome/navidrome/model""github.com/navidrome/navidrome/server")func (api *Router) addRadioRoute(r chi.Router) {constructor := func(ctx context.Context) rest.Repository {return api.ds.Resource(ctx, model.Radio{})}r.Route("/radio", func(r chi.Router) {r.Get("/", rest.GetAll(constructor))r.Post("/", rest.Post(constructor))r.Route("/{id}", func(r chi.Router) {r.Use(server.URLParamsMiddleware)r.Get("/", rest.Get(constructor))r.Put("/", rest.Put(constructor))r.Delete("/", rest.Delete(constructor))r.Post("/image", api.uploadRadioImage())r.Delete("/image", api.deleteRadioImage())})})}func (api *Router) uploadRadioImage() http.HandlerFunc {return handleImageUpload(func(ctx context.Context, reader io.Reader, ext string) error {radioID := chi.URLParamFromCtx(ctx, "id")radio, err := api.ds.Radio(ctx).Get(radioID)if err != nil {if errors.Is(err, model.ErrNotFound) {return model.ErrNotFound}return err}oldPath := radio.UploadedImagePath()filename, err := api.imgUpload.SetImage(ctx, consts.EntityRadio, radio.ID, radio.Name, oldPath, reader, ext)if err != nil {return err}radio.UploadedImage = filenamereturn api.ds.Radio(ctx).Put(radio, "UploadedImage")})}func (api *Router) deleteRadioImage() http.HandlerFunc {return handleImageDelete(func(ctx context.Context) error {radioID := chi.URLParamFromCtx(ctx, "id")radio, err := api.ds.Radio(ctx).Get(radioID)if err != nil {if errors.Is(err, model.ErrNotFound) {return model.ErrNotFound}return err}if err := api.imgUpload.RemoveImage(ctx, radio.UploadedImagePath()); err != nil {return err}radio.UploadedImage = ""return api.ds.Radio(ctx).Put(radio, "UploadedImage")})}