API: add tags

This commit is contained in:
Your Name 2024-01-28 07:57:39 -05:00 committed by Henri Dickson
parent da15881310
commit 06087ab8a8
4 changed files with 64 additions and 44 deletions

View file

@ -25,12 +25,12 @@ class SearchResult(Schema):
count: int
@api.api_operation(
["GET"],
@api.get(
"/catalog/search",
response={200: SearchResult, 400: Result},
summary="Search items in catalog",
auth=None,
tags=["catalog"],
)
def search_item(
request, query: str, category: AvailableItemCategory | None = None, page: int = 1
@ -55,12 +55,12 @@ def search_item(
return 200, {"data": items, "pages": num_pages, "count": count}
@api.api_operation(
["GET"],
@api.get(
"/catalog/fetch",
response={200: ItemSchema, 202: Result, 404: Result},
summary="Fetch item from URL of a supported site",
auth=None,
tags=["catalog"],
)
def fetch_item(request, url: str):
"""
@ -97,101 +97,101 @@ def _get_item(cls, uuid, response):
return item
@api.api_operation(
["GET"],
@api.get(
"/book/{uuid}",
response={200: EditionSchema, 302: RedirectedResult, 404: Result},
auth=None,
tags=["catalog"],
)
def get_book(request, uuid: str, response: HttpResponse):
return _get_item(Edition, uuid, response)
@api.api_operation(
["GET"],
@api.get(
"/movie/{uuid}",
response={200: MovieSchema, 302: RedirectedResult, 404: Result},
auth=None,
tags=["catalog"],
)
def get_movie(request, uuid: str, response: HttpResponse):
return _get_item(Movie, uuid, response)
@api.api_operation(
["GET"],
@api.get(
"/tv/{uuid}",
response={200: TVShowSchema, 302: RedirectedResult, 404: Result},
auth=None,
tags=["catalog"],
)
def get_tv_show(request, uuid: str, response: HttpResponse):
return _get_item(TVShow, uuid, response)
@api.api_operation(
["GET"],
@api.get(
"/tv/season/{uuid}",
response={200: TVSeasonSchema, 302: RedirectedResult, 404: Result},
auth=None,
tags=["catalog"],
)
def get_tv_season(request, uuid: str, response: HttpResponse):
return _get_item(TVSeason, uuid, response)
@api.api_operation(
["GET"],
@api.get(
"/tv/episode/{uuid}",
response={200: TVEpisodeSchema, 302: RedirectedResult, 404: Result},
auth=None,
tags=["catalog"],
)
def get_tv_episode(request, uuid: str, response: HttpResponse):
return _get_item(TVEpisode, uuid, response)
@api.api_operation(
["GET"],
@api.get(
"/podcast/{uuid}",
response={200: PodcastSchema, 302: RedirectedResult, 404: Result},
auth=None,
tags=["catalog"],
)
def get_podcast(request, uuid: str, response: HttpResponse):
return _get_item(Podcast, uuid, response)
@api.api_operation(
["GET"],
@api.get(
"/album/{uuid}",
response={200: AlbumSchema, 302: RedirectedResult, 404: Result},
auth=None,
tags=["catalog"],
)
def get_album(request, uuid: str, response: HttpResponse):
return _get_item(Album, uuid, response)
@api.api_operation(
["GET"],
@api.get(
"/game/{uuid}",
response={200: GameSchema, 302: RedirectedResult, 404: Result},
auth=None,
tags=["catalog"],
)
def get_game(request, uuid: str, response: HttpResponse):
return _get_item(Game, uuid, response)
@api.api_operation(
["GET"],
@api.get(
"/performance/{uuid}",
response={200: PerformanceSchema, 302: RedirectedResult, 404: Result},
auth=None,
tags=["catalog"],
)
def get_performance(request, uuid: str, response: HttpResponse):
return _get_item(Performance, uuid, response)
@api.api_operation(
["GET"],
@api.get(
"/performance/production/{uuid}",
response={200: PerformanceProductionSchema, 302: RedirectedResult, 404: Result},
auth=None,
tags=["catalog"],
)
def get_performance_production(request, uuid: str, response: HttpResponse):
return _get_item(PerformanceProduction, uuid, response)

View file

@ -3,7 +3,7 @@
<html lang="en">
<head>
<link rel="stylesheet"
href="https://unpkg.com/swagger-ui-dist@5.1.0/swagger-ui.css"
href="https://unpkg.com/swagger-ui-dist@5.11.1/swagger-ui.css"
crossorigin="anonymous"
referrerpolicy="no-referrer" />
<title>{{ api.title }} Developer Console</title>
@ -24,6 +24,12 @@
background-color: white;
padding: 0;
}
#swagger-ui>div>div>.wrapper button {
background-color: unset;
}
#swagger-ui>div>div>.wrapper button.btn.execute {
background-color: #4990e2;
}
</style>
</head>
<body>
@ -86,7 +92,7 @@
more endpoints can be found in API Documentation below.
</details>
<div id="swagger-ui" data-theme="light"></div>
<script src="https://unpkg.com/swagger-ui-dist@5.1.0/swagger-ui-bundle.js"
<script src="https://unpkg.com/swagger-ui-dist@5.11.1/swagger-ui-bundle.js"
crossorigin="anonymous"
referrerpolicy="no-referrer"></script>
<script>

View file

@ -1,14 +1,24 @@
from datetime import datetime
from typing import List
from django.http import Http404, HttpResponse
from django.http import HttpResponse
from ninja import Field, Schema
from ninja.pagination import paginate
from catalog.common.models import *
from common.api import *
from .models import Mark, Review, ShelfType, TagManager, q_item_in_category
from .models import (
Collection,
Mark,
Review,
ShelfType,
Tag,
TagManager,
q_item_in_category,
)
# Mark
class MarkSchema(Schema):
@ -31,10 +41,10 @@ class MarkInSchema(Schema):
post_to_fediverse: bool = False
@api.api_operation(
["GET"],
@api.get(
"/me/shelf/{type}",
response={200: List[MarkSchema], 401: Result, 403: Result},
tags=["mark"],
)
@paginate(PageNumberPagination)
def list_marks_on_shelf(
@ -52,10 +62,10 @@ def list_marks_on_shelf(
return queryset
@api.api_operation(
["GET"],
@api.get(
"/me/shelf/item/{item_uuid}",
response={200: MarkSchema, 302: Result, 401: Result, 403: Result, 404: Result},
tags=["mark"],
)
def get_mark_by_item(request, item_uuid: str, response: HttpResponse):
"""
@ -73,10 +83,10 @@ def get_mark_by_item(request, item_uuid: str, response: HttpResponse):
return shelfmember
@api.api_operation(
["POST"],
@api.post(
"/me/shelf/item/{item_uuid}",
response={200: Result, 401: Result, 403: Result, 404: Result},
tags=["mark"],
)
def mark_item(request, item_uuid: str, mark: MarkInSchema):
"""
@ -105,10 +115,10 @@ def mark_item(request, item_uuid: str, mark: MarkInSchema):
return 200, {"message": "OK"}
@api.api_operation(
["DELETE"],
@api.delete(
"/me/shelf/item/{item_uuid}",
response={200: Result, 401: Result, 403: Result, 404: Result},
tags=["mark"],
)
def delete_mark(request, item_uuid: str):
"""
@ -124,6 +134,9 @@ def delete_mark(request, item_uuid: str):
return 200, {"message": "OK"}
# Review
class ReviewSchema(Schema):
url: str
visibility: int = Field(ge=0, le=2)
@ -142,10 +155,10 @@ class ReviewInSchema(Schema):
post_to_fediverse: bool = False
@api.api_operation(
["GET"],
@api.get(
"/me/review/",
response={200: List[ReviewSchema], 401: Result, 403: Result},
tags=["review"],
)
@paginate(PageNumberPagination)
def list_reviews(request, category: AvailableItemCategory | None = None):
@ -160,10 +173,10 @@ def list_reviews(request, category: AvailableItemCategory | None = None):
return queryset.prefetch_related("item")
@api.api_operation(
["GET"],
@api.get(
"/me/review/item/{item_uuid}",
response={200: ReviewSchema, 401: Result, 403: Result, 404: Result},
tags=["review"],
)
def get_review_by_item(request, item_uuid: str):
"""
@ -181,6 +194,7 @@ def get_review_by_item(request, item_uuid: str):
@api.post(
"/me/review/item/{item_uuid}",
response={200: Result, 401: Result, 403: Result, 404: Result},
tags=["review"],
)
def review_item(request, item_uuid: str, review: ReviewInSchema):
"""
@ -207,10 +221,10 @@ def review_item(request, item_uuid: str, review: ReviewInSchema):
return 200, {"message": "OK"}
@api.api_operation(
["DELETE"],
@api.delete(
"/me/review/item/{item_uuid}",
response={200: Result, 401: Result, 403: Result, 404: Result},
tags=["review"],
)
def delete_review(request, item_uuid: str):
"""

View file

@ -13,11 +13,11 @@ class UserSchema(Schema):
username: str
@api.api_operation(
["GET"],
@api.get(
"/me",
response={200: UserSchema, 401: Result},
summary="Get current user's basic info",
tags=["user"],
)
def me(request):
return 200, {