ci / module boundaries / boundaries (push) Successful in 10s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m30s
ci / api / api (push) Successful in 58s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m1s
ci / db / db (push) Failing after 25s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 1m36s
ci / ts / ts (packages + web) (push) Failing after 6m3s
82 lines
2.6 KiB
Go
82 lines
2.6 KiB
Go
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
|
|
}
|