Skip to content

Commit

Permalink
refactor(mangas): update schemas and managers for magazine and manga …
Browse files Browse the repository at this point in the history
…viewsets
  • Loading branch information
tyronejosee committed Jun 28, 2024
1 parent 83e5fa9 commit cf4c81e
Show file tree
Hide file tree
Showing 3 changed files with 357 additions and 29 deletions.
191 changes: 182 additions & 9 deletions apps/mangas/schemas.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,204 @@
"""Schemas for Mangas App."""

from drf_spectacular.utils import extend_schema
from drf_spectacular.utils import extend_schema, OpenApiResponse

from apps.utils.serializers import PictureReadSerializer
from apps.characters.serializers import CharacterMinimalSerializer
from apps.news.serializers import NewsMinimalSerializer
from .serializers import (
MagazineReadSerializer,
MagazineWriteSerializer,
MangaReadSerializer,
MangaWriteSerializer,
MangaMinimalSerializer,
MangaStatsReadSerializer,
)


magazine_schemas = {
"list": extend_schema(
summary="Get Several Magazines",
description="Get a list of available magazines.",
responses={
200: OpenApiResponse(MagazineReadSerializer(many=True), description="OK"),
400: OpenApiResponse(description="Bad request"),
404: OpenApiResponse(description="Not found")
},
auth=[]
),
"create": extend_schema(
summary="Create Magazine",
description="Create a new magazine, only for `IsContributor` or `IsAdministrator` users.",
responses={
201: OpenApiResponse(MagazineWriteSerializer, description="Created"),
400: OpenApiResponse(description="Bad request"),
401: OpenApiResponse(description="Unauthorized"),
403: OpenApiResponse(description="Forbidden"),
},
),
"retrieve": extend_schema(
summary="Get Magazine",
description="Get detailed information about a specific magazine.",
responses={
200: OpenApiResponse(MagazineReadSerializer, description="OK"),
400: OpenApiResponse(description="Bad request"),
404: OpenApiResponse(description="Not found")
},
auth=[]

),
"update": extend_schema(
summary="Update Magazine",
description="Update all fields of a specific magazine, only for `IsContributor` or `IsAdministrator` users.",
responses={
200: OpenApiResponse(MagazineWriteSerializer, description="OK"),
400: OpenApiResponse(description="Bad request"),
401: OpenApiResponse(description="Unauthorized"),
403: OpenApiResponse(description="Forbidden"),
404: OpenApiResponse(description="Not Found"),
},
),
"partial_update": extend_schema(
summary="Partial Update Magazine",
description="Update some fields of a specific magazine, only for `IsContributor` or `IsAdministrator` users.",
responses={
200: OpenApiResponse(MagazineWriteSerializer, description="OK"),
400: OpenApiResponse(description="Bad request"),
401: OpenApiResponse(description="Unauthorized"),
403: OpenApiResponse(description="Forbidden"),
404: OpenApiResponse(description="Not Found"),
},
),
"destroy": extend_schema(
summary="Remove Magazine",
description="Remove a specific magazine, only for `IsContributor` or `IsAdministrator` users.",
responses={
204: OpenApiResponse(description="No Content"),
400: OpenApiResponse(description="Bad request"),
401: OpenApiResponse(description="Unauthorized"),
403: OpenApiResponse(description="Forbidden"),
404: OpenApiResponse(description="Not Found"),
},
)
}


manga_schemas = {
"list": extend_schema(
summary="Get Several Mangas",
description="Retrieve a list of all manga entries.",
description="Get a list of available mangas.",
responses={
200: OpenApiResponse(MangaMinimalSerializer(many=True), description="OK"),
400: OpenApiResponse(description="Bad request"),
404: OpenApiResponse(description="Not found")
},
auth=[]
),
"create": extend_schema(
summary="Create Manga",
description="Create a new manga entry.",
description="Create a new manga, only for `IsContributor` or `IsAdministrator` users.",
responses={
201: OpenApiResponse(MangaWriteSerializer, description="Created"),
400: OpenApiResponse(description="Bad request"),
401: OpenApiResponse(description="Unauthorized"),
403: OpenApiResponse(description="Forbidden"),
},
),
"retrieve": extend_schema(
summary="Get Manga",
description="Get detailed information about a specific manga entry.",
description="Get detailed information about a specific manga.",
responses={
200: OpenApiResponse(MangaReadSerializer, description="OK"),
400: OpenApiResponse(description="Bad request"),
404: OpenApiResponse(description="Not found")
},
auth=[]

),
"update": extend_schema(
summary="Change Manga",
description="Change all fields of a specific manga entry.",
summary="Update Manga",
description="Update all fields of a specific manga, only for `IsContributor` or `IsAdministrator` users.",
responses={
200: OpenApiResponse(MangaWriteSerializer, description="OK"),
400: OpenApiResponse(description="Bad request"),
401: OpenApiResponse(description="Unauthorized"),
403: OpenApiResponse(description="Forbidden"),
404: OpenApiResponse(description="Not Found"),
},
),
"partial_update": extend_schema(
summary="Update Manga",
description="Update some fields of a specific manga entry.",
summary="Partial Update Manga",
description="Update some fields of a specific manga, only for `IsContributor` or `IsAdministrator` users.",
responses={
200: OpenApiResponse(MangaWriteSerializer, description="OK"),
400: OpenApiResponse(description="Bad request"),
401: OpenApiResponse(description="Unauthorized"),
403: OpenApiResponse(description="Forbidden"),
404: OpenApiResponse(description="Not Found"),
},
),
"destroy": extend_schema(
summary="Remove Manga",
description="Remove a specific manga entry.",
description="Remove a specific manga, only for `IsContributor` or `IsAdministrator` users.",
responses={
204: OpenApiResponse(description="No Content"),
400: OpenApiResponse(description="Bad request"),
401: OpenApiResponse(description="Unauthorized"),
403: OpenApiResponse(description="Forbidden"),
404: OpenApiResponse(description="Not Found"),
},
),
"get_characters": extend_schema(
summary="Get Manga Characters",
description="Get all characters of an manga passed as param (`uuid`).",
responses={
200: OpenApiResponse(CharacterMinimalSerializer(many=True), description="OK"),
400: OpenApiResponse(description="Bad request"),
404: OpenApiResponse(description="Not found")
},
auth=[]
),
"get_stats": extend_schema(
summary="Get Manga Stats",
description="Get all stats of an manga passed as param (`uuid`).",
responses={
200: OpenApiResponse(MangaStatsReadSerializer(many=True), description="OK"),
400: OpenApiResponse(description="Bad request"),
404: OpenApiResponse(description="Not found")
},
auth=[]
),
# TODO: Add schema for review_list, pending refactor
# TODO: Add schema for review_detail and review_id param, pending refactor
"get_recommendations": extend_schema(
summary="Get Manga Recommendations",
description="Get all recommendations of an manga passed as param (`uuid`).",
responses={
200: OpenApiResponse(MangaMinimalSerializer(many=True), description="OK"),
400: OpenApiResponse(description="Bad request"),
404: OpenApiResponse(description="Not found")
},
auth=[]
),
"get_news": extend_schema(
summary="Get Manga News",
description="Get all news of an manga passed as param (`uuid`).",
responses={
200: OpenApiResponse(NewsMinimalSerializer(many=True), description="OK"),
400: OpenApiResponse(description="Bad request"),
404: OpenApiResponse(description="Not found")
},
auth=[]
),
# "get_forum": extend_schema(),
"get_pictures": extend_schema(
summary="Get Manga Pictures",
description="Get all pictures of an manga passed as param (`uuid`).",
responses={
200: OpenApiResponse(PictureReadSerializer(many=True), description="OK"),
400: OpenApiResponse(description="Bad request"),
404: OpenApiResponse(description="Not found")
},
auth=[]
)
}
24 changes: 4 additions & 20 deletions apps/mangas/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@
MangaStatsReadSerializer,
)
from .filters import MagazineFilter
from .schemas import manga_schemas
from .schemas import magazine_schemas, manga_schemas


@extend_schema_view(**magazine_schemas)
class MagazineViewSet(ListCacheMixin, LogicalDeleteMixin, ModelViewSet):
"""
ViewSet for managing Magazine instances.
Expand Down Expand Up @@ -87,7 +88,8 @@ class MangaViewSet(ListCacheMixin, LogicalDeleteMixin, ModelViewSet):
permission_classes = [IsContributor]
serializer_class = MangaWriteSerializer
search_fields = ["name"]
ordering_fields = ["name"]
# filterset_class = MangaFilter
# TODO: Add filter

def get_queryset(self):
return Manga.objects.get_available()
Expand Down Expand Up @@ -160,24 +162,6 @@ def get_stats(self, request, *args, **kwargs):
status=status.HTTP_404_NOT_FOUND,
)

# @extend_schema(
# summary="Get all review for a manga",
# description="Pending description.",
# responses={
# 200: ReviewReadSerializer(many=True),
# 404: None
# },
# methods=["GET"],
# )
# @extend_schema(
# summary="Create review for a manga",
# description="Pending description.",
# responses={
# 201: ReviewReadSerializer(),
# 404: None
# },
# methods=["POST"],
# )
@action(
detail=True,
methods=["GET", "POST"],
Expand Down
Loading

0 comments on commit cf4c81e

Please sign in to comment.