mirror of
https://github.com/evgen-app/chess_rpg_backend.git
synced 2025-02-07 07:00:44 +03:00
added character control endpoint
This commit is contained in:
parent
92d42888bb
commit
9a0e84ede9
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,3 +1,7 @@
|
||||||
|
.idea
|
||||||
|
static/
|
||||||
|
media/
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
|
|
|
@ -9,7 +9,7 @@ https://docs.djangoproject.com/en/4.0/topics/settings/
|
||||||
For the full list of settings and their values, see
|
For the full list of settings and their values, see
|
||||||
https://docs.djangoproject.com/en/4.0/ref/settings/
|
https://docs.djangoproject.com/en/4.0/ref/settings/
|
||||||
"""
|
"""
|
||||||
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||||
|
@ -37,6 +37,11 @@ INSTALLED_APPS = [
|
||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
|
|
||||||
|
# Packages
|
||||||
|
"rest_framework",
|
||||||
|
|
||||||
|
# Apps
|
||||||
"game"
|
"game"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -113,11 +118,15 @@ USE_I18N = True
|
||||||
|
|
||||||
USE_TZ = True
|
USE_TZ = True
|
||||||
|
|
||||||
|
MEDIA_URL = "/media/"
|
||||||
|
STATIC_URL = "/static/"
|
||||||
|
|
||||||
# Static files (CSS, JavaScript, Images)
|
if DEBUG:
|
||||||
# https://docs.djangoproject.com/en/4.0/howto/static-files/
|
MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
|
||||||
|
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
|
||||||
STATIC_URL = 'static/'
|
else:
|
||||||
|
MEDIA_ROOT = "/var/www/media/"
|
||||||
|
STATIC_ROOT = "/var/www/static/"
|
||||||
|
|
||||||
# Default primary key field type
|
# Default primary key field type
|
||||||
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
|
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
|
||||||
|
|
|
@ -13,9 +13,13 @@ Including another URLconf
|
||||||
1. Import the include() function: from django.urls import include, path
|
1. Import the include() function: from django.urls import include, path
|
||||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||||
"""
|
"""
|
||||||
|
from django.conf import settings
|
||||||
|
from django.conf.urls.static import static
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.urls import path
|
from django.urls import path, include
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = (
|
||||||
path('admin/', admin.site.urls),
|
[path("admin/", admin.site.urls), path("api/", include("game.urls"))]
|
||||||
]
|
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||||
|
+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
||||||
|
)
|
||||||
|
|
|
@ -28,15 +28,15 @@ class Hero(models.Model):
|
||||||
"""Model to store heroes and their stats, connected to player"""
|
"""Model to store heroes and their stats, connected to player"""
|
||||||
|
|
||||||
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
|
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
|
||||||
player = models.ForeignKey(
|
# player = models.ForeignKey(
|
||||||
Player,
|
# Player,
|
||||||
on_delete=models.CASCADE,
|
# on_delete=models.CASCADE,
|
||||||
related_name="heroes",
|
# related_name="heroes",
|
||||||
related_query_name="hero",
|
# related_query_name="hero",
|
||||||
)
|
# )
|
||||||
added = models.DateTimeField(auto_now_add=True)
|
added = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
type = models.CharField(blank=False, choices=HER0_TYPES, max_length=1)
|
type = models.CharField(blank=False, choices=HER0_TYPES, max_length=7)
|
||||||
idle_img = models.ImageField(upload_to="uploads/idle", blank=False)
|
idle_img = models.ImageField(upload_to="uploads/idle", blank=False)
|
||||||
attack_img = models.ImageField(upload_to="uploads/attack", blank=False)
|
attack_img = models.ImageField(upload_to="uploads/attack", blank=False)
|
||||||
die_img = models.ImageField(upload_to="uploads/die", blank=False)
|
die_img = models.ImageField(upload_to="uploads/die", blank=False)
|
||||||
|
|
0
game/permissions.py
Normal file
0
game/permissions.py
Normal file
23
game/serializers.py
Normal file
23
game/serializers.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from game.models import Hero
|
||||||
|
|
||||||
|
|
||||||
|
class CreateHeroSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Hero
|
||||||
|
fields = ("type", "idle_img", "attack_img", "die_img", "health", "speed")
|
||||||
|
|
||||||
|
|
||||||
|
class GetHeroSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Hero
|
||||||
|
fields = (
|
||||||
|
"added",
|
||||||
|
"type",
|
||||||
|
"idle_img",
|
||||||
|
"attack_img",
|
||||||
|
"die_img",
|
||||||
|
"health",
|
||||||
|
"speed",
|
||||||
|
)
|
8
game/urls.py
Normal file
8
game/urls.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
from django.urls import path
|
||||||
|
|
||||||
|
from game.views import CreateHeroView, RetrieveHeroView
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path("hero/", CreateHeroView.as_view(), name="hero_api_create"),
|
||||||
|
path("hero/<uuid:uuid>", RetrieveHeroView.as_view(), name="hero_api_retrieve"),
|
||||||
|
]
|
|
@ -1,3 +1,36 @@
|
||||||
from django.shortcuts import render
|
from rest_framework import status
|
||||||
|
|
||||||
# Create your views here.
|
from rest_framework.generics import GenericAPIView, UpdateAPIView
|
||||||
|
from rest_framework.mixins import CreateModelMixin, RetrieveModelMixin
|
||||||
|
from rest_framework.response import Response
|
||||||
|
|
||||||
|
from game.models import Hero
|
||||||
|
from game.serializers import CreateHeroSerializer, GetHeroSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class CreateHeroView(GenericAPIView, CreateModelMixin):
|
||||||
|
serializer_class = CreateHeroSerializer
|
||||||
|
|
||||||
|
def perform_create(self, serializer):
|
||||||
|
return serializer.save()
|
||||||
|
|
||||||
|
def post(self, request, *args, **kwargs):
|
||||||
|
serializer = self.get_serializer(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
instance = self.perform_create(serializer)
|
||||||
|
return Response({"uuid": instance.uuid}, status=status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
|
||||||
|
class RetrieveHeroView(RetrieveModelMixin, UpdateAPIView, GenericAPIView):
|
||||||
|
serializer_class = GetHeroSerializer
|
||||||
|
lookup_field = "uuid"
|
||||||
|
queryset = Hero.objects.all()
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
return self.retrieve(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def put(self, request, *args, **kwargs):
|
||||||
|
return self.update(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def patch(self, request, *args, **kwargs):
|
||||||
|
return self.partial_update(request, *args, **kwargs)
|
||||||
|
|
6
requirements.txt
Normal file
6
requirements.txt
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
asgiref==3.5.2
|
||||||
|
Django==4.0.5
|
||||||
|
djangorestframework==3.13.1
|
||||||
|
Pillow==9.1.1
|
||||||
|
pytz==2022.1
|
||||||
|
sqlparse==0.4.2
|
Loading…
Reference in New Issue
Block a user