From 250b6dbb33652876f50527a7414b95e1c7ad91ff Mon Sep 17 00:00:00 2001 From: Deluan Date: Sun, 9 Apr 2023 17:50:04 -0400 Subject: [PATCH] Start breaking OpenAPI spec --- api/paths/album.yml | 28 ++++ api/paths/albums.yml | 39 ++++++ api/paths/artist.yml | 28 ++++ api/paths/artists.yml | 39 ++++++ api/paths/server.yml | 18 +++ api/paths/track.yml | 28 ++++ api/paths/tracks.yml | 39 ++++++ api/spec.yml | 227 ++------------------------------ go.mod | 2 +- go.sum | 8 +- server/api/openapi_api.gen.go | 2 +- server/api/openapi_types.gen.go | 2 +- 12 files changed, 234 insertions(+), 226 deletions(-) create mode 100644 api/paths/album.yml create mode 100644 api/paths/albums.yml create mode 100644 api/paths/artist.yml create mode 100644 api/paths/artists.yml create mode 100644 api/paths/server.yml create mode 100644 api/paths/track.yml create mode 100644 api/paths/tracks.yml diff --git a/api/paths/album.yml b/api/paths/album.yml new file mode 100644 index 000000000..5cfcd4442 --- /dev/null +++ b/api/paths/album.yml @@ -0,0 +1,28 @@ +get: + summary: Retrieve an individual album + operationId: getAlbum + parameters: + - $ref: '#/components/parameters/include' + - name: albumId + in: path + description: The unique identifier of the album + required: true + schema: + type: string + responses: + '200': + description: An album object + content: + application/vnd.api+json: + schema: + type: object + required: [data] + properties: + data: + $ref: '#/components/schemas/Album' + '403': + $ref: '#/components/responses/NotAuthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalServerError' diff --git a/api/paths/albums.yml b/api/paths/albums.yml new file mode 100644 index 000000000..1df2835ff --- /dev/null +++ b/api/paths/albums.yml @@ -0,0 +1,39 @@ +get: + summary: Retrieve a list of albums + operationId: getAlbums + parameters: + - $ref: '#/components/parameters/pageLimit' + - $ref: '#/components/parameters/pageOffset' + - $ref: '#/components/parameters/filterEquals' + - $ref: '#/components/parameters/filterContains' + - $ref: '#/components/parameters/filterLessThan' + - $ref: '#/components/parameters/filterLessOrEqual' + - $ref: '#/components/parameters/filterGreaterThan' + - $ref: '#/components/parameters/filterGreaterOrEqual' + - $ref: '#/components/parameters/filterStartsWith' + - $ref: '#/components/parameters/filterEndsWith' + - $ref: '#/components/parameters/sort' + - $ref: '#/components/parameters/include' + responses: + '200': + description: A list of albums + content: + application/vnd.api+json: + schema: + type: object + required: [data, links] + properties: + data: + type: array + items: + $ref: '#/components/schemas/Album' + links: + $ref: '#/components/schemas/PaginationLinks' + meta: + $ref: '#/components/schemas/PaginationMeta' + '400': + $ref: '#/components/responses/BadRequest' + '403': + $ref: '#/components/responses/NotAuthorized' + '500': + $ref: '#/components/responses/InternalServerError' diff --git a/api/paths/artist.yml b/api/paths/artist.yml new file mode 100644 index 000000000..6bd34f11c --- /dev/null +++ b/api/paths/artist.yml @@ -0,0 +1,28 @@ +get: + summary: Retrieve an individual artist + operationId: getArtist + parameters: + - $ref: '#/components/parameters/include' + - name: artistId + in: path + description: The unique identifier of the artist + required: true + schema: + type: string + responses: + '200': + description: An artist object + content: + application/vnd.api+json: + schema: + type: object + required: [data] + properties: + data: + $ref: '#/components/schemas/Artist' + '403': + $ref: '#/components/responses/NotAuthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalServerError' diff --git a/api/paths/artists.yml b/api/paths/artists.yml new file mode 100644 index 000000000..9476ff20c --- /dev/null +++ b/api/paths/artists.yml @@ -0,0 +1,39 @@ +get: + summary: Retrieve a list of artists + operationId: getArtists + parameters: + - $ref: '#/components/parameters/pageLimit' + - $ref: '#/components/parameters/pageOffset' + - $ref: '#/components/parameters/filterEquals' + - $ref: '#/components/parameters/filterContains' + - $ref: '#/components/parameters/filterLessThan' + - $ref: '#/components/parameters/filterLessOrEqual' + - $ref: '#/components/parameters/filterGreaterThan' + - $ref: '#/components/parameters/filterGreaterOrEqual' + - $ref: '#/components/parameters/filterStartsWith' + - $ref: '#/components/parameters/filterEndsWith' + - $ref: '#/components/parameters/sort' + - $ref: '#/components/parameters/include' + responses: + '200': + description: A list of artists + content: + application/vnd.api+json: + schema: + type: object + required: [data, links] + properties: + data: + type: array + items: + $ref: '#/components/schemas/Artist' + links: + $ref: '#/components/schemas/PaginationLinks' + meta: + $ref: '#/components/schemas/PaginationMeta' + '400': + $ref: '#/components/responses/BadRequest' + '403': + $ref: '#/components/responses/NotAuthorized' + '500': + $ref: '#/components/responses/InternalServerError' diff --git a/api/paths/server.yml b/api/paths/server.yml new file mode 100644 index 000000000..05a292aa6 --- /dev/null +++ b/api/paths/server.yml @@ -0,0 +1,18 @@ +get: + summary: Get server's global info + operationId: getServerInfo + responses: + '200': + description: The response’s data key maps to a resource object dictionary representing the server. + content: + application/vnd.api+json: + schema: + type: object + required: [data] + properties: + data: + $ref: '#/components/schemas/ServerInfo' + '403': + $ref: '#/components/responses/NotAuthorized' + '500': + $ref: '#/components/responses/InternalServerError' diff --git a/api/paths/track.yml b/api/paths/track.yml new file mode 100644 index 000000000..1b1e8e20f --- /dev/null +++ b/api/paths/track.yml @@ -0,0 +1,28 @@ +get: + summary: Retrieve an individual track + operationId: getTrack + parameters: + - $ref: '#/components/parameters/include' + - name: trackId + in: path + description: The unique identifier of the track + required: true + schema: + type: string + responses: + '200': + description: A track object + content: + application/vnd.api+json: + schema: + type: object + required: [data] + properties: + data: + $ref: '#/components/schemas/Track' + '403': + $ref: '#/components/responses/NotAuthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalServerError' diff --git a/api/paths/tracks.yml b/api/paths/tracks.yml new file mode 100644 index 000000000..0dba01735 --- /dev/null +++ b/api/paths/tracks.yml @@ -0,0 +1,39 @@ +get: + summary: Get a list of tracks + operationId: getTracks + parameters: + - $ref: '#/components/parameters/pageLimit' + - $ref: '#/components/parameters/pageOffset' + - $ref: '#/components/parameters/filterEquals' + - $ref: '#/components/parameters/filterContains' + - $ref: '#/components/parameters/filterLessThan' + - $ref: '#/components/parameters/filterLessOrEqual' + - $ref: '#/components/parameters/filterGreaterThan' + - $ref: '#/components/parameters/filterGreaterOrEqual' + - $ref: '#/components/parameters/filterStartsWith' + - $ref: '#/components/parameters/filterEndsWith' + - $ref: '#/components/parameters/sort' + - $ref: '#/components/parameters/include' + responses: + '200': + description: A list of tracks + content: + application/vnd.api+json: + schema: + type: object + required: [data, links] + properties: + data: + type: array + items: + $ref: '#/components/schemas/Track' + links: + $ref: '#/components/schemas/PaginationLinks' + meta: + $ref: '#/components/schemas/PaginationMeta' + '400': + $ref: '#/components/responses/BadRequest' + '403': + $ref: '#/components/responses/NotAuthorized' + '500': + $ref: '#/components/responses/InternalServerError' diff --git a/api/spec.yml b/api/spec.yml index 842e358c0..10f5ee789 100644 --- a/api/spec.yml +++ b/api/spec.yml @@ -14,233 +14,22 @@ info: url: https://navidrome.org servers: - url: /api/v2 + paths: /server: - get: - summary: Get server's global info - operationId: getServerInfo - responses: - '200': - description: The response’s data key maps to a resource object dictionary representing the server. - content: - application/vnd.api+json: - schema: - type: object - required: [data] - properties: - data: - $ref: '#/components/schemas/ServerInfo' - '403': - $ref: '#/components/responses/NotAuthorized' - '500': - $ref: '#/components/responses/InternalServerError' + $ref: './paths/server.yml' /tracks: - get: - summary: Get a list of tracks - operationId: getTracks - parameters: - - $ref: '#/components/parameters/pageLimit' - - $ref: '#/components/parameters/pageOffset' - - $ref: '#/components/parameters/filterEquals' - - $ref: '#/components/parameters/filterContains' - - $ref: '#/components/parameters/filterLessThan' - - $ref: '#/components/parameters/filterLessOrEqual' - - $ref: '#/components/parameters/filterGreaterThan' - - $ref: '#/components/parameters/filterGreaterOrEqual' - - $ref: '#/components/parameters/filterStartsWith' - - $ref: '#/components/parameters/filterEndsWith' - - $ref: '#/components/parameters/sort' - - $ref: '#/components/parameters/include' - responses: - '200': - description: A list of tracks - content: - application/vnd.api+json: - schema: - type: object - required: [data, links] - properties: - data: - type: array - items: - $ref: '#/components/schemas/Track' - links: - $ref: '#/components/schemas/PaginationLinks' - meta: - $ref: '#/components/schemas/PaginationMeta' - '400': - $ref: '#/components/responses/BadRequest' - '403': - $ref: '#/components/responses/NotAuthorized' - '500': - $ref: '#/components/responses/InternalServerError' + $ref: './paths/tracks.yml' /tracks/{trackId}: - get: - summary: Retrieve an individual track - operationId: getTrack - parameters: - - $ref: '#/components/parameters/include' - - name: trackId - in: path - description: The unique identifier of the track - required: true - schema: - type: string - responses: - '200': - description: A track object - content: - application/vnd.api+json: - schema: - type: object - required: [data] - properties: - data: - $ref: '#/components/schemas/Track' - '403': - $ref: '#/components/responses/NotAuthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalServerError' + $ref: './paths/track.yml' /artists: - get: - summary: Retrieve a list of artists - operationId: getArtists - parameters: - - $ref: '#/components/parameters/pageLimit' - - $ref: '#/components/parameters/pageOffset' - - $ref: '#/components/parameters/filterEquals' - - $ref: '#/components/parameters/filterContains' - - $ref: '#/components/parameters/filterLessThan' - - $ref: '#/components/parameters/filterLessOrEqual' - - $ref: '#/components/parameters/filterGreaterThan' - - $ref: '#/components/parameters/filterGreaterOrEqual' - - $ref: '#/components/parameters/filterStartsWith' - - $ref: '#/components/parameters/filterEndsWith' - - $ref: '#/components/parameters/sort' - - $ref: '#/components/parameters/include' - responses: - '200': - description: A list of artists - content: - application/vnd.api+json: - schema: - type: object - required: [data, links] - properties: - data: - type: array - items: - $ref: '#/components/schemas/Artist' - links: - $ref: '#/components/schemas/PaginationLinks' - meta: - $ref: '#/components/schemas/PaginationMeta' - '400': - $ref: '#/components/responses/BadRequest' - '403': - $ref: '#/components/responses/NotAuthorized' - '500': - $ref: '#/components/responses/InternalServerError' + $ref: './paths/artists.yml' /artists/{artistId}: - get: - summary: Retrieve an individual artist - operationId: getArtist - parameters: - - $ref: '#/components/parameters/include' - - name: artistId - in: path - description: The unique identifier of the artist - required: true - schema: - type: string - responses: - '200': - description: An artist object - content: - application/vnd.api+json: - schema: - type: object - required: [data] - properties: - data: - $ref: '#/components/schemas/Artist' - '403': - $ref: '#/components/responses/NotAuthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalServerError' + $ref: './paths/artist.yml' /albums: - get: - summary: Retrieve a list of albums - operationId: getAlbums - parameters: - - $ref: '#/components/parameters/pageLimit' - - $ref: '#/components/parameters/pageOffset' - - $ref: '#/components/parameters/filterEquals' - - $ref: '#/components/parameters/filterContains' - - $ref: '#/components/parameters/filterLessThan' - - $ref: '#/components/parameters/filterLessOrEqual' - - $ref: '#/components/parameters/filterGreaterThan' - - $ref: '#/components/parameters/filterGreaterOrEqual' - - $ref: '#/components/parameters/filterStartsWith' - - $ref: '#/components/parameters/filterEndsWith' - - $ref: '#/components/parameters/sort' - - $ref: '#/components/parameters/include' - responses: - '200': - description: A list of albums - content: - application/vnd.api+json: - schema: - type: object - required: [data, links] - properties: - data: - type: array - items: - $ref: '#/components/schemas/Album' - links: - $ref: '#/components/schemas/PaginationLinks' - meta: - $ref: '#/components/schemas/PaginationMeta' - '400': - $ref: '#/components/responses/BadRequest' - '403': - $ref: '#/components/responses/NotAuthorized' - '500': - $ref: '#/components/responses/InternalServerError' + $ref: './paths/albums.yml' /albums/{albumId}: - get: - summary: Retrieve an individual album - operationId: getAlbum - parameters: - - $ref: '#/components/parameters/include' - - name: albumId - in: path - description: The unique identifier of the album - required: true - schema: - type: string - responses: - '200': - description: An album object - content: - application/vnd.api+json: - schema: - type: object - required: [data] - properties: - data: - $ref: '#/components/schemas/Album' - '403': - $ref: '#/components/responses/NotAuthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalServerError' + $ref: './paths/album.yml' components: parameters: diff --git a/go.mod b/go.mod index 164aa4343..749515511 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/ReneKroon/ttlcache/v2 v2.11.0 github.com/beego/beego/v2 v2.0.7 github.com/bradleyjkemp/cupaloy/v2 v2.8.0 - github.com/deepmap/oapi-codegen v1.12.4 + github.com/deepmap/oapi-codegen v1.12.5-0.20230403173426-fd06f5aed350 github.com/deluan/rest v0.0.0-20211101235434-380523c4bb47 github.com/deluan/sanitize v0.0.0-20230310221930-6e18967d9fc1 github.com/dhowden/tag v0.0.0-20220618230019-adf36e896086 diff --git a/go.sum b/go.sum index 2dd7778f8..21d227b49 100644 --- a/go.sum +++ b/go.sum @@ -82,8 +82,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= -github.com/deepmap/oapi-codegen v1.12.4 h1:pPmn6qI9MuOtCz82WY2Xaw46EQjgvxednXXrP7g5Q2s= -github.com/deepmap/oapi-codegen v1.12.4/go.mod h1:3lgHGMu6myQ2vqbbTXH2H1o4eXFTGnFiDaOaKKl5yas= +github.com/deepmap/oapi-codegen v1.12.5-0.20230403173426-fd06f5aed350 h1:L3ObbQ6GHi8NLNaVWGlyHto/riZZx32M8JNbIcJJqP4= +github.com/deepmap/oapi-codegen v1.12.5-0.20230403173426-fd06f5aed350/go.mod h1:WMhniMLAXaHHNYz+Nk+h35qYieaeUaASStrkdkHnBr8= github.com/deluan/rest v0.0.0-20211101235434-380523c4bb47 h1:IhGAYGDi212gspq0XkYAI+DN5e9lfAIm8Qgu1wj9yN4= github.com/deluan/rest v0.0.0-20211101235434-380523c4bb47/go.mod h1:tSgDythFsl0QgS/PFWfIZqcJKnkADWneY80jaVRlqK8= github.com/deluan/sanitize v0.0.0-20230310221930-6e18967d9fc1 h1:mGvOb3zxl4vCLv+dbf7JA6CAaM2UH/AGP1KX4DsJmTI= @@ -270,7 +270,7 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/labstack/echo/v4 v4.9.1 h1:GliPYSpzGKlyOhqIbG8nmHBo3i1saKWFOgh41AN3b+Y= +github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN2M= github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= @@ -429,8 +429,8 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU= github.com/unrolled/secure v1.13.0 h1:sdr3Phw2+f8Px8HE5sd1EHdj1aV3yUwed/uZXChLFsk= github.com/unrolled/secure v1.13.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= diff --git a/server/api/openapi_api.gen.go b/server/api/openapi_api.gen.go index 7cb3fa302..47fec91a1 100644 --- a/server/api/openapi_api.gen.go +++ b/server/api/openapi_api.gen.go @@ -1,6 +1,6 @@ // Package api provides primitives to interact with the openapi HTTP API. // -// Code generated by github.com/deepmap/oapi-codegen version v1.12.5-0.20230314231417-0cfaaa77a7d2 DO NOT EDIT. +// Code generated by github.com/deepmap/oapi-codegen version v1.12.5-0.20230403173426-fd06f5aed350 DO NOT EDIT. package api import ( diff --git a/server/api/openapi_types.gen.go b/server/api/openapi_types.gen.go index 07e035303..0f5ef82a8 100644 --- a/server/api/openapi_types.gen.go +++ b/server/api/openapi_types.gen.go @@ -1,6 +1,6 @@ // Package api provides primitives to interact with the openapi HTTP API. // -// Code generated by github.com/deepmap/oapi-codegen version v1.12.5-0.20230314231417-0cfaaa77a7d2 DO NOT EDIT. +// Code generated by github.com/deepmap/oapi-codegen version v1.12.5-0.20230403173426-fd06f5aed350 DO NOT EDIT. package api import (