From 73335f3a56348c2a1ec93ccb9cc2c5a97b3b2f6e Mon Sep 17 00:00:00 2001 From: Ridhwana Date: Thu, 22 Dec 2022 13:26:31 +0200 Subject: [PATCH] [API V1 docs] Reading List (#18888) * feat: add the docs spec file fro readinglist * feat: add the api_v1.json file --- spec/requests/api/v1/docs/readinglist_spec.rb | 49 ++++++++ swagger/v1/api_v1.json | 119 ++++++++++++------ 2 files changed, 130 insertions(+), 38 deletions(-) create mode 100644 spec/requests/api/v1/docs/readinglist_spec.rb diff --git a/spec/requests/api/v1/docs/readinglist_spec.rb b/spec/requests/api/v1/docs/readinglist_spec.rb new file mode 100644 index 000000000..4a4d671d5 --- /dev/null +++ b/spec/requests/api/v1/docs/readinglist_spec.rb @@ -0,0 +1,49 @@ +require "rails_helper" +require "swagger_helper" + +# rubocop:disable RSpec/EmptyExampleGroup +# rubocop:disable RSpec/VariableName + +RSpec.describe "Api::V1::Docs::Readinglist" do + let(:api_secret) { create(:api_secret) } + let(:user) { api_secret.user } + let(:readinglist) { create_list(:reading_reaction, 3, user: user) } + let(:Accept) { "application/vnd.forem.api-v1+json" } + + before { user.add_role(:admin) } + + describe "GET /readinglist" do + path "/api/readinglist" do + get "Readinglist" do + tags "readinglist" + description(<<-DESCRIBE.strip) + This endpoint allows the client to retrieve a list of articles that were saved to a Users readinglist. + It supports pagination, each page will contain `30` articles by default + DESCRIBE + operationId "getReadinglist" + produces "application/json" + parameter "$ref": "#/components/parameters/pageParam" + parameter "$ref": "#/components/parameters/perPageParam30to1000" + + response "401", "Unauthorized" do + let(:"api-key") { nil } + add_examples + + run_test! + end + + response "200", "A list of articles in the users readinglist" do + let(:"api-key") { api_secret.secret } + schema type: :array, + items: { "$ref": "#/components/schemas/ArticleIndex" } + + add_examples + + run_test! + end + end + end + end +end +# rubocop:enable RSpec/VariableName +# rubocop:enable RSpec/EmptyExampleGroup diff --git a/swagger/v1/api_v1.json b/swagger/v1/api_v1.json index 9ee9fef8b..3dc8a3ed2 100644 --- a/swagger/v1/api_v1.json +++ b/swagger/v1/api_v1.json @@ -103,45 +103,45 @@ "example": [ { "type_of": "article", - "id": 191, - "title": "Those Barren Leaves, Thrones, Dominations172", - "description": "Farm-to-table muggle magic wolf swag. Cronut intelligentsia dreamcatcher. Cleanse craft beer franzen...", - "readable_publish_date": "Dec 5", - "slug": "those-barren-leaves-thrones-dominations172-163k", - "path": "/username382/those-barren-leaves-thrones-dominations172-163k", - "url": "http://localhost:3000/username382/those-barren-leaves-thrones-dominations172-163k", + "id": 1316, + "title": "Number the Stars172", + "description": "Swag marfa wes anderson mumblecore cornhole. Listicle xoxo polaroid vegan. Fashion axe echo blue...", + "readable_publish_date": "Dec 21", + "slug": "number-the-stars172-4g8l", + "path": "/username382/number-the-stars172-4g8l", + "url": "http://localhost:3000/username382/number-the-stars172-4g8l", "comments_count": 0, "public_reactions_count": 0, "collection_id": null, - "published_timestamp": "2022-12-06T00:47:14Z", + "published_timestamp": "2022-12-21T09:35:16Z", "positive_reactions_count": 0, - "cover_image": "http://localhost:3000/assets/32-543e7c7f0a939e829c37aab48d705350b855c887dc16dfab30fd9a0825c09291.png", - "social_image": "http://localhost:3000/assets/32-543e7c7f0a939e829c37aab48d705350b855c887dc16dfab30fd9a0825c09291.png", - "canonical_url": "http://localhost:3000/username382/those-barren-leaves-thrones-dominations172-163k", - "created_at": "2022-12-06T00:47:14Z", + "cover_image": "http://localhost:3000/assets/14-5e64731cc7cd63e3b689647d9d3c3e4e1d907690c716d3dd1e356466726a2c2d.png", + "social_image": "http://localhost:3000/assets/14-5e64731cc7cd63e3b689647d9d3c3e4e1d907690c716d3dd1e356466726a2c2d.png", + "canonical_url": "http://localhost:3000/username382/number-the-stars172-4g8l", + "created_at": "2022-12-21T09:35:16Z", "edited_at": null, "crossposted_at": null, - "published_at": "2022-12-06T00:47:14Z", - "last_comment_at": "2022-12-06T00:47:14Z", + "published_at": "2022-12-21T09:35:16Z", + "last_comment_at": "2022-12-21T09:35:16Z", "reading_time_minutes": 1, "tag_list": ["discuss"], "tags": "discuss", "user": { - "name": "Scottie \"Tony\" \\:/ Gibson", + "name": "Elisha \"Dorene\" \\:/ Jacobs", "username": "username382", "twitter_username": "twitter382", "github_username": "github382", - "user_id": 383, + "user_id": 3033, "website_url": null, - "profile_image": "/uploads/user/profile_image/383/67e51ab1-9623-4860-a91d-746b7a0a1334.jpeg", - "profile_image_90": "/uploads/user/profile_image/383/67e51ab1-9623-4860-a91d-746b7a0a1334.jpeg" + "profile_image": "/uploads/user/profile_image/3033/08ec2a9c-544e-4e53-8440-b31ee28677ab.jpeg", + "profile_image_90": "/uploads/user/profile_image/3033/08ec2a9c-544e-4e53-8440-b31ee28677ab.jpeg" }, "organization": { - "name": "O'Hara and Sons", + "name": "O'Hara-Kerluke", "username": "org67", "slug": "org67", - "profile_image": "/uploads/organization/profile_image/67/b31df2fa-bc7e-4652-b10c-5777614d6194.png", - "profile_image_90": "/uploads/organization/profile_image/67/b31df2fa-bc7e-4652-b10c-5777614d6194.png" + "profile_image": "/uploads/organization/profile_image/553/67755f9f-2b3f-4af6-85ce-e06837211465.png", + "profile_image_90": "/uploads/organization/profile_image/553/67755f9f-2b3f-4af6-85ce-e06837211465.png" }, "flare_tag": { "name": "discuss", @@ -431,12 +431,12 @@ "content": { "application/json": { "example": { - "id": 10, + "id": 82, "approved": true, "body_markdown": "# Hi, this is ad\nYep, it's an ad", "cached_tag_list": "", "clicks_count": 0, - "created_at": "2022-12-05T18:47:15.209-06:00", + "created_at": "2022-12-21T05:35:17.206-04:00", "display_to": "all", "impressions_count": 0, "name": "Example Ad", @@ -446,7 +446,7 @@ "published": true, "success_rate": 0.0, "type_of": "in_house", - "updated_at": "2022-12-05T18:47:15.209-06:00", + "updated_at": "2022-12-21T05:35:17.206-04:00", "tag_list": [] } } @@ -570,22 +570,22 @@ "content": { "application/json": { "example": { - "id": 11, + "id": 83, "approved": false, "body_markdown": "Hello _hey_ Hey hey 9", "cached_tag_list": "", "clicks_count": 0, - "created_at": "2022-12-05T18:47:15.335-06:00", + "created_at": "2022-12-21T05:35:17.381-04:00", "display_to": "all", "impressions_count": 0, - "name": "Display Ad 11", - "organization_id": 68, + "name": "Display Ad 83", + "organization_id": 554, "placement_area": "sidebar_left", "processed_html": "

Hello hey Hey hey 9

", "published": false, "success_rate": 0.0, "type_of": "in_house", - "updated_at": "2022-12-05T18:47:15.337-06:00", + "updated_at": "2022-12-21T05:35:17.384-04:00", "tag_list": [] } } @@ -642,19 +642,19 @@ "approved": false, "body_markdown": "Hello _hey_ Hey hey 10", "display_to": "all", - "name": "Display Ad 12", - "organization_id": 69, + "name": "Display Ad 84", + "organization_id": 555, "placement_area": "sidebar_left", "published": false, "processed_html": "

Hello hey Hey hey 10

", "cached_tag_list": "", - "id": 12, + "id": 84, "clicks_count": 0, - "created_at": "2022-12-05T18:47:15.490-06:00", + "created_at": "2022-12-21T05:35:17.606-04:00", "impressions_count": 0, "success_rate": 0.0, "type_of": "in_house", - "updated_at": "2022-12-05T18:47:15.493-06:00", + "updated_at": "2022-12-21T05:35:17.611-04:00", "tag_list": [] } } @@ -828,8 +828,8 @@ "example": { "result": "create", "category": "like", - "id": 1, - "reactable_id": 195, + "id": 78, + "reactable_id": 1320, "reactable_type": "Article" } } @@ -891,8 +891,8 @@ "example": { "result": "none", "category": "like", - "id": 3, - "reactable_id": 197, + "id": 80, + "reactable_id": 1322, "reactable_type": "Article" } } @@ -912,6 +912,49 @@ } } }, + "/api/readinglist": { + "get": { + "summary": "Readinglist", + "tags": ["readinglist"], + "description": "This endpoint allows the client to retrieve a list of articles that were saved to a Users readinglist.\n It supports pagination, each page will contain `30` articles by default", + "operationId": "getReadinglist", + "parameters": [ + { + "$ref": "#/components/parameters/pageParam" + }, + { + "$ref": "#/components/parameters/perPageParam30to1000" + } + ], + "responses": { + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "example": { + "error": "unauthorized", + "status": 401 + } + } + } + }, + "200": { + "description": "A list of articles in the users readinglist", + "content": { + "application/json": { + "example": [], + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ArticleIndex" + } + } + } + } + } + } + } + }, "/api/users/{id}": { "get": { "summary": "A User",