Skip to content

Commit

Permalink
generate types with typescript-fetch, split-request-response
Browse files Browse the repository at this point in the history
  • Loading branch information
acrantel committed Aug 24, 2023
1 parent 0de1bc1 commit 3f45116
Show file tree
Hide file tree
Showing 159 changed files with 11,255 additions and 6,679 deletions.
3 changes: 3 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ repos:
hooks:
- id: check-merge-conflict
- id: end-of-file-fixer
exclude: ^frontend2/src/utils/types
- id: mixed-line-ending
args: ["--fix=lf"]
exclude: ^frontend2/src/utils/types
- id: trailing-whitespace
exclude: ^frontend2/src/utils/types

- repo: https://github.com/dnephin/pre-commit-golang
rev: v0.5.1
Expand Down
4 changes: 4 additions & 0 deletions backend/siarnaq/api/compete/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -467,3 +467,7 @@ def save(self, *args, **kwargs):
class HistoricalRatingSerializer(serializers.Serializer):
rating = RatingField()
timestamp = serializers.DateTimeField()


class EmptySerializer(serializers.Serializer):
pass
15 changes: 12 additions & 3 deletions backend/siarnaq/api/compete/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
)
from siarnaq.api.compete.permissions import HasTeamSubmission
from siarnaq.api.compete.serializers import (
EmptySerializer,
HistoricalRatingSerializer,
MatchReportSerializer,
MatchSerializer,
Expand Down Expand Up @@ -149,8 +150,16 @@ def create(self, request, *, episode_id):
headers=headers,
)

@extend_schema(
# https://drf-spectacular.readthedocs.io/en/latest/faq.html#i-m-using-action-detail-false-but-the-response-schema-is-not-a-list
responses=TournamentSubmissionSerializer(many=True)
)
@action(
detail=False, methods=["get"], serializer_class=TournamentSubmissionSerializer
detail=False,
methods=["get"],
serializer_class=TournamentSubmissionSerializer,
# needed so that the generated schema is not paginated
pagination_class=None,
)
def tournament(self, request, *, episode_id):
"""Retrieve the submissions used in tournaments by the current team.."""
Expand Down Expand Up @@ -409,7 +418,7 @@ def report(self, request, pk=None, *, episode_id):
detail=True,
methods=["post"],
permission_classes=(IsAdminUser,),
serializer_class=None,
serializer_class=EmptySerializer,
throttle_classes=(),
)
def rating_update(self, request, pk=None, *, episode_id):
Expand All @@ -424,7 +433,7 @@ def rating_update(self, request, pk=None, *, episode_id):
detail=True,
methods=["post"],
permission_classes=(IsAdminUser,),
serializer_class=None,
serializer_class=EmptySerializer,
throttle_classes=(),
)
def publish_public_bracket(self, request, pk=None, *, episode_id):
Expand Down
6 changes: 5 additions & 1 deletion backend/siarnaq/api/episodes/serializers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import extend_schema_field
from drf_spectacular.utils import extend_schema_field, extend_schema_serializer
from rest_framework import serializers

from siarnaq.api.episodes.models import (
Expand Down Expand Up @@ -48,6 +48,10 @@ def get_frozen(self, obj):
return obj.frozen()


@extend_schema_serializer(
# workaround for https://github.com/OpenAPITools/openapi-generator/issues/9289
component_name="GameMap"
)
class MapSerializer(serializers.ModelSerializer):
class Meta:
model = Map
Expand Down
4 changes: 4 additions & 0 deletions backend/siarnaq/api/teams/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,3 +186,7 @@ class UserPassedSerializer(serializers.Serializer):

class TeamReportSerializer(serializers.Serializer):
report = serializers.FileField(write_only=True)


class TeamLeaveSerializer(serializers.Serializer):
pass
3 changes: 2 additions & 1 deletion backend/siarnaq/api/teams/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
TeamAvatarSerializer,
TeamCreateSerializer,
TeamJoinSerializer,
TeamLeaveSerializer,
TeamPrivateSerializer,
TeamPublicSerializer,
TeamReportSerializer,
Expand Down Expand Up @@ -114,7 +115,7 @@ def me(self, request, *, episode_id):
@action(
detail=False,
methods=["post"],
serializer_class=None,
serializer_class=TeamLeaveSerializer,
permission_classes=(IsAuthenticated, IsEpisodeAvailable),
)
def leave(self, request, *, episode_id):
Expand Down
15 changes: 15 additions & 0 deletions backend/siarnaq/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -510,3 +510,18 @@ def dropper(logger, method_name, event_dict):
raise structlog.DropEvent

structlog.configure(processors=[dropper])

SPECTACULAR_SETTINGS = {
# Split components into request and response parts where appropriate
# This setting is highly recommended to achieve the most accurate API
# description, however it comes at the cost of having more components.
"COMPONENT_SPLIT_REQUEST": True,
# Controls which authentication methods are exposed in the schema. If not None,
# will hide authentication classes that are not contained in the whitelist.
# Use full import paths like
# ['rest_framework.authentication.TokenAuthentication', ...].
# Empty list ([]) will hide all authentication methods. The default None shows all.
"AUTHENTICATION_WHITELIST": [
"rest_framework_simplejwt.authentication.JWTAuthentication"
],
}
1 change: 0 additions & 1 deletion frontend2/.prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
/node_modules
/.pnp
.pnp.js
/types

# production
/build
Expand Down
7 changes: 5 additions & 2 deletions frontend2/generate_types.bat
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@ call conda activate galaxy
echo "navigate to galaxy folder"
cd ..
echo "Generate OpenAPI 3.0 backend schema from siarnaq"
python backend/manage.py spectacular --file schema.yml
python backend/manage.py spectacular --file schema.yml --validate

:: TODO: delete the types folder before regenerating it.

:: echo "Download openapitools"
:: npm install @openapitools/openapi-generator-cli -g
:: if you have a java error, just install java 8 and reload terminal
echo "Generate typescript types from schema"
npx @openapitools/openapi-generator-cli generate -i schema.yml -o frontend2/src/utils/types -g typescript-jquery --additional-properties=modelPropertyNaming=camelCase --additional-properties=disallowAdditionalPropertiesIfNotPresent=false
npx @openapitools/openapi-generator-cli generate -i schema.yml -o frontend2/src/utils/types -g typescript-fetch --additional-properties=modelPropertyNaming=original --additional-properties=disallowAdditionalPropertiesIfNotPresent=false --additional-properties=stringEnums=true
148 changes: 84 additions & 64 deletions frontend2/src/utils/types/.openapi-generator/FILES
Original file line number Diff line number Diff line change
@@ -1,65 +1,85 @@
api/ApiApi.ts
api/api.ts
configuration.ts
git_push.sh
.openapi-generator-ignore
apis/CompeteApi.ts
apis/EpisodeApi.ts
apis/SpecsApi.ts
apis/TeamApi.ts
apis/TokenApi.ts
apis/UserApi.ts
apis/index.ts
index.ts
model/Autoscrim.ts
model/ClassRequirement.ts
model/CountryEnum.ts
model/EligibilityCriterion.ts
model/Email.ts
model/Episode.ts
model/GenderEnum.ts
model/HistoricalRating.ts
model/LanguageEnum.ts
model/Match.ts
model/MatchParticipant.ts
model/MatchReport.ts
model/ModelMap.ts
model/PaginatedClassRequirementList.ts
model/PaginatedEpisodeList.ts
model/PaginatedMatchList.ts
model/PaginatedScrimmageRequestList.ts
model/PaginatedSubmissionList.ts
model/PaginatedTeamPublicList.ts
model/PaginatedTournamentList.ts
model/PaginatedTournamentRoundList.ts
model/PasswordToken.ts
model/PatchedTeamPrivate.ts
model/PatchedUserPrivate.ts
model/PlayerOrderEnum.ts
model/ReleaseStatusEnum.ts
model/ResetToken.ts
model/SaturnInvocation.ts
model/ScrimmageRequest.ts
model/ScrimmageRequestStatusEnum.ts
model/Status526Enum.ts
model/StatusBccEnum.ts
model/StyleEnum.ts
model/Submission.ts
model/SubmissionDownload.ts
model/SubmissionReport.ts
model/TeamAvatar.ts
model/TeamCreate.ts
model/TeamJoin.ts
model/TeamPrivate.ts
model/TeamProfilePrivate.ts
model/TeamProfilePublic.ts
model/TeamPublic.ts
model/TeamReport.ts
model/TokenObtainPair.ts
model/TokenRefresh.ts
model/TokenVerify.ts
model/Tournament.ts
model/TournamentRound.ts
model/TournamentSubmission.ts
model/UserAvatar.ts
model/UserCreate.ts
model/UserPassed.ts
model/UserPrivate.ts
model/UserProfilePrivate.ts
model/UserProfilePublic.ts
model/UserPublic.ts
model/UserResume.ts
model/models.ts
variables.ts
models/AutoscrimRequest.ts
models/ClassRequirement.ts
models/CountryEnum.ts
models/EligibilityCriterion.ts
models/Email.ts
models/EmailRequest.ts
models/Episode.ts
models/GameMap.ts
models/GenderEnum.ts
models/HistoricalRating.ts
models/LanguageEnum.ts
models/Match.ts
models/MatchParticipant.ts
models/MatchReportRequest.ts
models/PaginatedClassRequirementList.ts
models/PaginatedEpisodeList.ts
models/PaginatedMatchList.ts
models/PaginatedScrimmageRequestList.ts
models/PaginatedSubmissionList.ts
models/PaginatedTeamPublicList.ts
models/PaginatedTournamentList.ts
models/PaginatedTournamentRoundList.ts
models/PasswordToken.ts
models/PasswordTokenRequest.ts
models/PatchedTeamPrivateRequest.ts
models/PatchedUserPrivateRequest.ts
models/PlayerOrderEnum.ts
models/ReleaseStatusEnum.ts
models/ResetToken.ts
models/ResetTokenRequest.ts
models/SaturnInvocationRequest.ts
models/ScrimmageRequest.ts
models/ScrimmageRequestRequest.ts
models/ScrimmageStatusEnum.ts
models/Status526Enum.ts
models/StatusBccEnum.ts
models/StyleEnum.ts
models/Submission.ts
models/SubmissionDownload.ts
models/SubmissionReportRequest.ts
models/SubmissionRequest.ts
models/TeamAvatarRequest.ts
models/TeamCreate.ts
models/TeamCreateRequest.ts
models/TeamJoinRequest.ts
models/TeamPrivate.ts
models/TeamPrivateRequest.ts
models/TeamProfilePrivate.ts
models/TeamProfilePrivateRequest.ts
models/TeamProfilePublic.ts
models/TeamPublic.ts
models/TeamReportRequest.ts
models/TokenObtainPair.ts
models/TokenObtainPairRequest.ts
models/TokenRefresh.ts
models/TokenRefreshRequest.ts
models/TokenVerifyRequest.ts
models/Tournament.ts
models/TournamentRound.ts
models/TournamentSubmission.ts
models/UserAvatarRequest.ts
models/UserCreate.ts
models/UserCreateRequest.ts
models/UserPassed.ts
models/UserPrivate.ts
models/UserPrivateRequest.ts
models/UserProfilePrivate.ts
models/UserProfilePrivateRequest.ts
models/UserProfilePublic.ts
models/UserProfilePublicRequest.ts
models/UserPublic.ts
models/UserPublicRequest.ts
models/UserResume.ts
models/UserResumeRequest.ts
models/index.ts
runtime.ts
2 changes: 1 addition & 1 deletion frontend2/src/utils/types/.openapi-generator/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6.6.0
6.6.0
Loading

0 comments on commit 3f45116

Please sign in to comment.