package uploads import ( "context" "encoding/base64" "encoding/json" "strings" "pipu/api/internal/api/gen" "pipu/api/internal/musicbrainz" ) func releaseDTO(report ReleaseReport) (gen.UploadReleaseReport, error) { raw, err := json.Marshal(report) if err != nil { return gen.UploadReleaseReport{}, err } var out gen.UploadReleaseReport err = json.Unmarshal(raw, &out) return out, err } func (h *Handler) GetUploadReleases(ctx context.Context, req gen.GetUploadReleasesRequestObject) (gen.GetUploadReleasesResponseObject, error) { group := "" if req.Params.GroupId != nil { group = req.Params.GroupId.String() } report, err := h.svc.GetReleaseReport(ctx, req.Id, group) if err != nil { return nil, err } out, err := releaseDTO(report) if err != nil { return nil, err } return gen.GetUploadReleases200JSONResponse(out), nil } func (h *Handler) SearchUploadReleases(ctx context.Context, req gen.SearchUploadReleasesRequestObject) (gen.SearchUploadReleasesResponseObject, error) { q := musicbrainz.Query{Artist: strings.TrimSpace(deref(req.Body.Artist, "")), Album: strings.TrimSpace(deref(req.Body.Album, ""))} q.Audio = deref(req.Body.Audio, false) if req.Body.GroupId != nil { q.GroupID = req.Body.GroupId.String() } if req.Body.ReleaseId != nil { q.ReleaseID = req.Body.ReleaseId.String() } report, err := h.svc.SearchReleases(ctx, req.Id, q) if err != nil { return nil, err } out, err := releaseDTO(report) if err != nil { return nil, err } return gen.SearchUploadReleases202JSONResponse(out), nil } func (h *Handler) GetUploadReleaseCover(ctx context.Context, req gen.GetUploadReleaseCoverRequestObject) (gen.GetUploadReleaseCoverResponseObject, error) { group := "" if req.Params.GroupId != nil { group = req.Params.GroupId.String() } cover, err := h.svc.ReleaseCover(ctx, req.Id, req.ReleaseId.String(), group) if err != nil { return nil, err } return gen.GetUploadReleaseCover200JSONResponse{ImageBase64: base64.StdEncoding.EncodeToString(cover.Data), MimeType: cover.MIME, SourceUrl: cover.URL, ExactRelease: cover.Exact}, nil } func (h *Handler) ApplyUploadRelease(ctx context.Context, req gen.ApplyUploadReleaseRequestObject) (gen.ApplyUploadReleaseResponseObject, error) { group := "" if req.Body.GroupId != nil { group = req.Body.GroupId.String() } report, err := h.svc.ApplyRelease(ctx, req.Id, req.Body.ReleaseId.String(), req.Body.ApplyMetadata, req.Body.ApplyCover, group) if err != nil { return nil, err } out, err := releaseDTO(report) if err != nil { return nil, err } return gen.ApplyUploadRelease200JSONResponse(out), nil }