character
This commit is contained in:
parent
854a0c6177
commit
6186a3717b
0
freekake_api/character/__init__.py
Normal file
0
freekake_api/character/__init__.py
Normal file
3
freekake_api/character/admin.py
Normal file
3
freekake_api/character/admin.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
||||||
6
freekake_api/character/apps.py
Normal file
6
freekake_api/character/apps.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class CharacterConfig(AppConfig):
|
||||||
|
default_auto_field = 'django.db.models.BigAutoField'
|
||||||
|
name = 'character'
|
||||||
53
freekake_api/character/models.py
Normal file
53
freekake_api/character/models.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
from django.db import models
|
||||||
|
from django_softdelete.models import SoftDeleteModel
|
||||||
|
|
||||||
|
class Character(SoftDeleteModel):
|
||||||
|
|
||||||
|
class CharacterType(models.TextChoices):
|
||||||
|
HUMAN = 'HUMAN', 'Manusia'
|
||||||
|
ANIMAL = 'ANIMAL', 'Hewan'
|
||||||
|
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
description = models.TextField(blank=True, null=True)
|
||||||
|
sex = models.BooleanField(blank=False, null=False)
|
||||||
|
type = models.CharField(max_length=25, choices=CharacterType.choices, default=CharacterType.HUMAN)
|
||||||
|
|
||||||
|
featured_image = models.CharField(max_length=1000)
|
||||||
|
featured_icon = models.CharField(max_length=1000)
|
||||||
|
|
||||||
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class CharacterSkin(models.Model):
|
||||||
|
character = models.ForeignKey(Character, on_delete=models.CASCADE, related_name='skins')
|
||||||
|
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
description = models.TextField(blank=True, null=True)
|
||||||
|
|
||||||
|
featured_image = models.CharField(max_length=1000)
|
||||||
|
featured_icon = models.CharField(max_length=1000)
|
||||||
|
|
||||||
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class CharacterFragment(models.Model):
|
||||||
|
skin = models.ForeignKey(CharacterSkin, on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
description = models.TextField(blank=True, null=True)
|
||||||
|
|
||||||
|
fragment_number = models.PositiveSmallIntegerField()
|
||||||
|
|
||||||
|
featured_icon = models.CharField(max_length=1000)
|
||||||
|
|
||||||
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
31
freekake_api/character/serializers.py
Normal file
31
freekake_api/character/serializers.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
from rest_framework import serializers
|
||||||
|
from character import models
|
||||||
|
|
||||||
|
class CharacterSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = models.Character
|
||||||
|
fields = ['id', 'name', 'description', 'sex', 'type', 'featured_image', 'featured_icon']
|
||||||
|
|
||||||
|
class CharacterSkinSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = models.CharacterSkin
|
||||||
|
fields = ['id', 'name', 'description', 'featured_image', 'featured_icon', 'character']
|
||||||
|
|
||||||
|
class CharacterSkinDetailSerializer(serializers.ModelSerializer):
|
||||||
|
character = CharacterSerializer(read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.CharacterSkin
|
||||||
|
fields = ['id', 'name', 'description', 'featured_image', 'featured_icon', 'character']
|
||||||
|
|
||||||
|
class CharacterFragmentSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = models.CharacterFragment
|
||||||
|
fields = ['id', 'name', 'description', 'fragment_number', 'featured_icon', 'skin']
|
||||||
|
|
||||||
|
class CharacterFragmentDetailSerializer(serializers.ModelSerializer):
|
||||||
|
skin = CharacterSkinSerializer(read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.CharacterFragment
|
||||||
|
fields = ['id', 'name', 'description', 'fragment_number', 'featured_icon', 'skin']
|
||||||
3
freekake_api/character/tests.py
Normal file
3
freekake_api/character/tests.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
13
freekake_api/character/urls.py
Normal file
13
freekake_api/character/urls.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from django.urls import path
|
||||||
|
from character import views
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('characters/', views.CharacterList.as_view()),
|
||||||
|
path('characters/<int:pk>/', views.CharacterDetail.as_view()),
|
||||||
|
|
||||||
|
path('character-fragments/', views.CharacterFragmentList.as_view()),
|
||||||
|
path('character-fragments/<int:pk>/', views.CharacterFragmentDetail.as_view()),
|
||||||
|
|
||||||
|
path('character-skins/', views.CharacterSkinList.as_view()),
|
||||||
|
path('character-skins/<int:pk>/', views.CharacterSkinDetail.as_view()),
|
||||||
|
]
|
||||||
41
freekake_api/character/views.py
Normal file
41
freekake_api/character/views.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
from rest_framework import generics, filters
|
||||||
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
|
|
||||||
|
from character import models, serializers
|
||||||
|
|
||||||
|
class CharacterList(generics.ListCreateAPIView):
|
||||||
|
queryset = models.Character.objects.all()
|
||||||
|
serializer_class = serializers.CharacterSerializer
|
||||||
|
filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend]
|
||||||
|
search_fields = ['name']
|
||||||
|
filterset_fields = ['type']
|
||||||
|
ordering_fields = '__all__'
|
||||||
|
|
||||||
|
class CharacterDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
|
queryset = models.Character.objects.all()
|
||||||
|
serializer_class = serializers.CharacterSerializer
|
||||||
|
|
||||||
|
class CharacterSkinList(generics.ListCreateAPIView):
|
||||||
|
queryset = models.CharacterSkin.objects.all()
|
||||||
|
serializer_class = serializers.CharacterSkinSerializer
|
||||||
|
filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend]
|
||||||
|
search_fields = ['name']
|
||||||
|
filterset_fields = ['character']
|
||||||
|
ordering_fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class CharacterSkinDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
|
queryset = models.CharacterSkin.objects.all()
|
||||||
|
serializer_class = serializers.CharacterSkinSerializer
|
||||||
|
|
||||||
|
class CharacterFragmentList(generics.ListCreateAPIView):
|
||||||
|
queryset = models.CharacterFragment.objects.all()
|
||||||
|
serializer_class = serializers.CharacterFragmentSerializer
|
||||||
|
filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend]
|
||||||
|
search_fields = ['name']
|
||||||
|
filterset_fields = ['skin']
|
||||||
|
ordering_fields = '__all__'
|
||||||
|
|
||||||
|
class CharacterFragmentDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
|
queryset = models.CharacterFragment.objects.all()
|
||||||
|
serializer_class = serializers.CharacterFragmentSerializer
|
||||||
Loading…
Reference in New Issue
Block a user