package nativeapiimport ("context""errors""io""net/http""time""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) addArtistRoute(r chi.Router) {repo := api.ds.Artist()r.Route("/artist", func(r chi.Router) {r.Get("/", rest.GetAll(repo))r.Route("/{id}", func(r chi.Router) {r.Use(server.URLParamsMiddleware)r.Get("/", rest.Get(repo))r.Post("/image", api.uploadArtistImage())r.Delete("/image", api.deleteArtistImage())})})}func (api *Router) uploadArtistImage() http.HandlerFunc {return handleImageUpload(func(ctx context.Context, reader io.Reader, ext string) error {artistID := chi.URLParamFromCtx(ctx, "id")ar, err := api.ds.Artist().Get(ctx, artistID)if err != nil {if errors.Is(err, model.ErrNotFound) {return model.ErrNotFound}return err}oldPath := ar.UploadedImagePath()filename, err := api.imgUpload.SetImage(ctx, consts.EntityArtist, ar.ID, ar.Name, oldPath, reader, ext)if err != nil {return err}ar.UploadedImage = filenamear.UpdatedAt = new(time.Now())if err := api.ds.Artist().Put(ctx, ar, "uploaded_image", "updated_at"); err != nil {return err}api.imgUpload.EnqueueArtwork(ctx, consts.EntityArtist, ar.ID)return nil})}func (api *Router) deleteArtistImage() http.HandlerFunc {return handleImageDelete(func(ctx context.Context) error {artistID := chi.URLParamFromCtx(ctx, "id")ar, err := api.ds.Artist().Get(ctx, artistID)if err != nil {if errors.Is(err, model.ErrNotFound) {return model.ErrNotFound}return err}if err := api.imgUpload.RemoveImage(ctx, ar.UploadedImagePath()); err != nil {return err}ar.UploadedImage = ""ar.UpdatedAt = new(time.Now())if err := api.ds.Artist().Put(ctx, ar, "uploaded_image", "updated_at"); err != nil {return err}api.imgUpload.EnqueueArtwork(ctx, consts.EntityArtist, ar.ID)return nil})}