rework-drf #4
@@ -1,108 +0,0 @@
|
||||
# Generated by Django 4.2.6 on 2023-10-26 18:34
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='SDECategory',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField()),
|
||||
('published', models.BooleanField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDEGroup',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField()),
|
||||
('published', models.BooleanField()),
|
||||
('useBasePrice', models.BooleanField()),
|
||||
('fittableNonSingleton', models.BooleanField()),
|
||||
('anchored', models.BooleanField()),
|
||||
('anchorable', models.BooleanField()),
|
||||
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='groups', to='api.sdecategory')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDEIcon',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('iconFile', models.CharField()),
|
||||
('description', models.CharField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDEMarektGroup',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField()),
|
||||
('description', models.CharField(default='')),
|
||||
('hasTypes', models.BooleanField()),
|
||||
('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='api.sdeicon')),
|
||||
('parent_marketgroup', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child_marketgroups', to='api.sdemarektgroup')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDEMetaGroup',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField()),
|
||||
('iconSuffix', models.CharField()),
|
||||
('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='metagroups', to='api.sdeicon')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDEType',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField()),
|
||||
('description', models.CharField()),
|
||||
('published', models.BooleanField()),
|
||||
('basePrice', models.FloatField()),
|
||||
('volume', models.FloatField()),
|
||||
('portionSize', models.IntegerField()),
|
||||
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='types', to='api.sdegroup')),
|
||||
('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='types', to='api.sdeicon')),
|
||||
('marketgroup', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='types', to='api.sdemarektgroup')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDETypeMaterial',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('quantity', models.IntegerField()),
|
||||
('material_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='typematerials_of', to='api.sdetype')),
|
||||
('type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='typematerials', to='api.sdetype')),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sdetype',
|
||||
name='materials',
|
||||
field=models.ManyToManyField(related_name='material_of', through='api.SDETypeMaterial', to='api.sdetype'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sdetype',
|
||||
name='metagroup',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='types', to='api.sdemetagroup'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sdegroup',
|
||||
name='icon',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='groups', to='api.sdeicon'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sdecategory',
|
||||
name='icon',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='categories', to='api.sdeicon'),
|
||||
),
|
||||
]
|
||||
@@ -1,4 +1,2 @@
|
||||
from django.db import models
|
||||
from .models_esi import *
|
||||
from .models_sde import *
|
||||
|
||||
# models
|
||||
@@ -1,2 +0,0 @@
|
||||
from django.db import models
|
||||
|
||||
21
api/templates/redoc.html
Normal file
21
api/templates/redoc.html
Normal file
@@ -0,0 +1,21 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>ReDoc</title>
|
||||
<!-- needed for adaptive design -->
|
||||
<meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
|
||||
<!-- ReDoc doesn't change outer page styles -->
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<redoc spec-url='{% url schema_url %}'></redoc>
|
||||
<script src="https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js"> </script>
|
||||
</body>
|
||||
</html>
|
||||
28
api/templates/swagger-ui.html
Normal file
28
api/templates/swagger-ui.html
Normal file
@@ -0,0 +1,28 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Swagger</title>
|
||||
<meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" type="text/css" href="//unpkg.com/swagger-ui-dist@3/swagger-ui.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="swagger-ui"></div>
|
||||
<script src="//unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
|
||||
<script>
|
||||
const ui = SwaggerUIBundle({
|
||||
url: "{% url schema_url %}",
|
||||
dom_id: '#swagger-ui',
|
||||
presets: [
|
||||
SwaggerUIBundle.presets.apis,
|
||||
SwaggerUIBundle.SwaggerUIStandalonePreset
|
||||
],
|
||||
layout: "BaseLayout",
|
||||
requestInterceptor: (request) => {
|
||||
request.headers['X-CSRFToken'] = "{{ csrf_token }}"
|
||||
return request;
|
||||
}
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
7
api/urls.py
Normal file
7
api/urls.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from . import views
|
||||
from django.urls import include, path
|
||||
from rest_framework import routers
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register(r'users', views.UserViewSet)
|
||||
router.register(r'groups', views.GroupViewSet)
|
||||
@@ -11,6 +11,7 @@ services:
|
||||
volumes:
|
||||
- ./mabras:/app/mabras
|
||||
- ./api:/app/api
|
||||
- ./sde:/app/sde
|
||||
- ./manage.py:/app/manage.py
|
||||
command: sh -c "python manage.py makemigrations && python manage.py migrate"
|
||||
depends_on:
|
||||
@@ -27,8 +28,9 @@ services:
|
||||
volumes:
|
||||
- ./mabras:/app/mabras
|
||||
- ./api:/app/api
|
||||
- ./sde:/app/sde
|
||||
- ./manage.py:/app/manage.py
|
||||
- ./static_eve:/app/static_eve
|
||||
# - ./static_eve:/app/static_eve
|
||||
command: ["uvicorn", "mabras.asgi:application", "--host", "0.0.0.0", "--port", "8000", "--reload"]
|
||||
depends_on:
|
||||
redis:
|
||||
|
||||
@@ -44,6 +44,7 @@ REST_FRAMEWORK = {
|
||||
|
||||
INSTALLED_APPS = [
|
||||
'api',
|
||||
'sde',
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
|
||||
@@ -14,25 +14,30 @@ Including another URLconf
|
||||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django.urls import include, path
|
||||
from rest_framework import routers
|
||||
from api import views, views_sde
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register(r'users', views.UserViewSet)
|
||||
router.register(r'groups', views.GroupViewSet)
|
||||
router.register(r'sde/icons', views_sde.SDEIconViewSet)
|
||||
router.register(r'sde/categories', views_sde.SDECategoryViewSet)
|
||||
router.register(r'sde/groups', views_sde.SDEGroupViewSet)
|
||||
router.register(r'sde/marketgroups', views_sde.SDEMarketGroupViewSet)
|
||||
router.register(r'sde/metagroups', views_sde.SDEMetaGroupViewSet)
|
||||
router.register(r'sde/types', views_sde.SDETypeViewSet)
|
||||
router.register(r'sde/typematerials', views_sde.SDETypeMaterialViewSet)
|
||||
from rest_framework.schemas import get_schema_view
|
||||
from django.views.generic import TemplateView
|
||||
from sde.urls import router as sde_router
|
||||
from api.urls import router as api_router
|
||||
|
||||
# Wire up our API using automatic URL routing.
|
||||
# Additionally, we include login URLs for the browsable API.
|
||||
urlpatterns = [
|
||||
path('', include(router.urls)),
|
||||
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
|
||||
]
|
||||
path('', include(api_router.urls)),
|
||||
path('sde/', include(sde_router.urls)),
|
||||
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
|
||||
path('openapi/', get_schema_view(
|
||||
title="Mabras",
|
||||
description="API for EvEal",
|
||||
version="0.0.9"
|
||||
), name='openapi-schema'),
|
||||
path('swagger-ui/', TemplateView.as_view(
|
||||
template_name='swagger-ui.html',
|
||||
extra_context={'schema_url': 'openapi-schema'}
|
||||
), name='swagger-ui'),
|
||||
path('redoc/', TemplateView.as_view(
|
||||
template_name='redoc.html',
|
||||
extra_context={'schema_url': 'openapi-schema'}
|
||||
), name='redoc'),
|
||||
]
|
||||
|
||||
@@ -6,3 +6,5 @@ uvicorn[standard]
|
||||
psycopg[binary]
|
||||
redis
|
||||
esy
|
||||
pyyaml
|
||||
uritemplate
|
||||
|
||||
6
sde/apps.py
Normal file
6
sde/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class SdeConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'sde'
|
||||
0
sde/management/commands/__init__.py
Normal file
0
sde/management/commands/__init__.py
Normal file
@@ -1,5 +1,5 @@
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
from api.models import *
|
||||
from sde.models import *
|
||||
import yaml
|
||||
|
||||
class Command(BaseCommand):
|
||||
0
sde/migrations/__init__.py
Normal file
0
sde/migrations/__init__.py
Normal file
@@ -1,52 +1,54 @@
|
||||
from api.models_sde import *
|
||||
from sde.models import *
|
||||
from rest_framework import serializers
|
||||
|
||||
|
||||
class SDEIconSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class SDEIconSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SDEIcon
|
||||
# fields = ['id', 'iconFile', 'description']
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class SDECategorySerializer(serializers.HyperlinkedModelSerializer):
|
||||
class SDECategorySerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SDECategory
|
||||
# fields = ['id', 'icon', 'name', 'published']
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class SDEGroupSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class SDEGroupSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SDEGroup
|
||||
# fields = ['id', 'category', 'name', 'published', 'useBasePrice', 'fittableNonSingleton', 'anchored', 'anchorable', 'icon']
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class SDEMarektGroupSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class SDEMarektGroupSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SDEMarektGroup
|
||||
# fields = ['id', 'icon', 'name', 'description', 'hasTypes', 'parent_marketgroup']
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class SDEMetaGroupSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class SDEMetaGroupSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SDEMetaGroup
|
||||
# fields = ['id', 'icon', 'name', 'iconSuffix']
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class SDETypeSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class SDETypeMaterialSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SDETypeMaterial
|
||||
# fields = ['type', 'material', 'quantity']
|
||||
# fields = "__all__"
|
||||
exclude = ['id', 'type']
|
||||
|
||||
|
||||
class SDETypeSerializer(serializers.ModelSerializer):
|
||||
typematerials = SDETypeMaterialSerializer(many=True, read_only=True)
|
||||
class Meta:
|
||||
model = SDEType
|
||||
# fields = ['id', 'group', 'marketgroup', 'metagroup', 'name', 'description', 'published', 'basePrice', 'icon', 'volume', 'portionSize', 'materials']
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class SDETypeMaterialSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = SDETypeMaterial
|
||||
# fields = ['type', 'material', 'quantity']
|
||||
fields = "__all__"
|
||||
|
||||
12
sde/urls.py
Normal file
12
sde/urls.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from . import views
|
||||
from django.urls import include, path
|
||||
from rest_framework import routers
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register(r'icons', views.SDEIconViewSet)
|
||||
router.register(r'categories', views.SDECategoryViewSet)
|
||||
router.register(r'groups', views.SDEGroupViewSet)
|
||||
router.register(r'marketgroups', views.SDEMarketGroupViewSet)
|
||||
router.register(r'metagroups', views.SDEMetaGroupViewSet)
|
||||
router.register(r'types', views.SDETypeViewSet)
|
||||
router.register(r'typematerials', views.SDETypeMaterialViewSet)
|
||||
@@ -1,45 +1,44 @@
|
||||
from api.models_sde import *
|
||||
from api.serializers_sde import *
|
||||
from sde.serializers import *
|
||||
from rest_framework import viewsets
|
||||
|
||||
|
||||
class SDEIconViewSet(viewsets.ModelViewSet):
|
||||
class SDEIconViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = SDEIcon.objects.all()
|
||||
serializer_class = SDEIconSerializer
|
||||
# permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
||||
class SDECategoryViewSet(viewsets.ModelViewSet):
|
||||
class SDECategoryViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = SDECategory.objects.all()
|
||||
serializer_class = SDECategorySerializer
|
||||
# permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
||||
class SDEGroupViewSet(viewsets.ModelViewSet):
|
||||
class SDEGroupViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = SDEGroup.objects.all()
|
||||
serializer_class = SDEGroupSerializer
|
||||
# permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
||||
class SDEMarketGroupViewSet(viewsets.ModelViewSet):
|
||||
class SDEMarketGroupViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = SDEMarektGroup.objects.all()
|
||||
serializer_class = SDEMarektGroupSerializer
|
||||
# permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
||||
class SDEMetaGroupViewSet(viewsets.ModelViewSet):
|
||||
class SDEMetaGroupViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = SDEMetaGroup.objects.all()
|
||||
serializer_class = SDEMetaGroupSerializer
|
||||
# permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
||||
class SDETypeViewSet(viewsets.ModelViewSet):
|
||||
class SDETypeViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = SDEType.objects.all()
|
||||
serializer_class = SDETypeSerializer
|
||||
# permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
||||
class SDETypeMaterialViewSet(viewsets.ModelViewSet):
|
||||
class SDETypeMaterialViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = SDETypeMaterial.objects.all()
|
||||
serializer_class = SDETypeMaterialSerializer
|
||||
# permission_classes = [permissions.IsAuthenticated]
|
||||
Reference in New Issue
Block a user