independant sde app

This commit is contained in:
2023-10-28 13:32:04 +02:00
parent 24a1cd051a
commit 3615689704
20 changed files with 127 additions and 154 deletions

View File

@@ -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'),
),
]

View File

@@ -1,4 +1,2 @@
from django.db import models
from .models_esi import *
from .models_sde import *
# models

View File

@@ -1,2 +0,0 @@
from django.db import models

21
api/templates/redoc.html Normal file
View 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>

View 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
View 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)

View File

@@ -11,6 +11,7 @@ services:
volumes: volumes:
- ./mabras:/app/mabras - ./mabras:/app/mabras
- ./api:/app/api - ./api:/app/api
- ./sde:/app/sde
- ./manage.py:/app/manage.py - ./manage.py:/app/manage.py
command: sh -c "python manage.py makemigrations && python manage.py migrate" command: sh -c "python manage.py makemigrations && python manage.py migrate"
depends_on: depends_on:
@@ -27,8 +28,9 @@ services:
volumes: volumes:
- ./mabras:/app/mabras - ./mabras:/app/mabras
- ./api:/app/api - ./api:/app/api
- ./sde:/app/sde
- ./manage.py:/app/manage.py - ./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"] command: ["uvicorn", "mabras.asgi:application", "--host", "0.0.0.0", "--port", "8000", "--reload"]
depends_on: depends_on:
redis: redis:

View File

@@ -44,6 +44,7 @@ REST_FRAMEWORK = {
INSTALLED_APPS = [ INSTALLED_APPS = [
'api', 'api',
'sde',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.contenttypes',

View File

@@ -14,25 +14,30 @@ 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.contrib import admin
from django.urls import include, path from django.urls import include, path
from rest_framework import routers from rest_framework import routers
from api import views, views_sde from rest_framework.schemas import get_schema_view
from django.views.generic import TemplateView
router = routers.DefaultRouter() from sde.urls import router as sde_router
router.register(r'users', views.UserViewSet) from api.urls import router as api_router
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)
# Wire up our API using automatic URL routing. # Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API. # Additionally, we include login URLs for the browsable API.
urlpatterns = [ urlpatterns = [
path('', include(router.urls)), path('', include(api_router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')) 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'),
] ]

View File

@@ -6,3 +6,5 @@ uvicorn[standard]
psycopg[binary] psycopg[binary]
redis redis
esy esy
pyyaml
uritemplate

6
sde/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class SdeConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'sde'

View File

View File

@@ -1,5 +1,5 @@
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from api.models import * from sde.models import *
import yaml import yaml
class Command(BaseCommand): class Command(BaseCommand):

View File

View File

@@ -1,52 +1,54 @@
from api.models_sde import * from sde.models import *
from rest_framework import serializers from rest_framework import serializers
class SDEIconSerializer(serializers.HyperlinkedModelSerializer): class SDEIconSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = SDEIcon model = SDEIcon
# fields = ['id', 'iconFile', 'description'] # fields = ['id', 'iconFile', 'description']
fields = "__all__" fields = "__all__"
class SDECategorySerializer(serializers.HyperlinkedModelSerializer): class SDECategorySerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = SDECategory model = SDECategory
# fields = ['id', 'icon', 'name', 'published'] # fields = ['id', 'icon', 'name', 'published']
fields = "__all__" fields = "__all__"
class SDEGroupSerializer(serializers.HyperlinkedModelSerializer): class SDEGroupSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = SDEGroup model = SDEGroup
# fields = ['id', 'category', 'name', 'published', 'useBasePrice', 'fittableNonSingleton', 'anchored', 'anchorable', 'icon'] # fields = ['id', 'category', 'name', 'published', 'useBasePrice', 'fittableNonSingleton', 'anchored', 'anchorable', 'icon']
fields = "__all__" fields = "__all__"
class SDEMarektGroupSerializer(serializers.HyperlinkedModelSerializer): class SDEMarektGroupSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = SDEMarektGroup model = SDEMarektGroup
# fields = ['id', 'icon', 'name', 'description', 'hasTypes', 'parent_marketgroup'] # fields = ['id', 'icon', 'name', 'description', 'hasTypes', 'parent_marketgroup']
fields = "__all__" fields = "__all__"
class SDEMetaGroupSerializer(serializers.HyperlinkedModelSerializer): class SDEMetaGroupSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = SDEMetaGroup model = SDEMetaGroup
# fields = ['id', 'icon', 'name', 'iconSuffix'] # fields = ['id', 'icon', 'name', 'iconSuffix']
fields = "__all__" 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: class Meta:
model = SDEType model = SDEType
# fields = ['id', 'group', 'marketgroup', 'metagroup', 'name', 'description', 'published', 'basePrice', 'icon', 'volume', 'portionSize', 'materials'] # fields = ['id', 'group', 'marketgroup', 'metagroup', 'name', 'description', 'published', 'basePrice', 'icon', 'volume', 'portionSize', 'materials']
fields = "__all__" fields = "__all__"
class SDETypeMaterialSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = SDETypeMaterial
# fields = ['type', 'material', 'quantity']
fields = "__all__"

12
sde/urls.py Normal file
View 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)

View File

@@ -1,45 +1,44 @@
from api.models_sde import * from sde.serializers import *
from api.serializers_sde import *
from rest_framework import viewsets from rest_framework import viewsets
class SDEIconViewSet(viewsets.ModelViewSet): class SDEIconViewSet(viewsets.ReadOnlyModelViewSet):
queryset = SDEIcon.objects.all() queryset = SDEIcon.objects.all()
serializer_class = SDEIconSerializer serializer_class = SDEIconSerializer
# permission_classes = [permissions.IsAuthenticated] # permission_classes = [permissions.IsAuthenticated]
class SDECategoryViewSet(viewsets.ModelViewSet): class SDECategoryViewSet(viewsets.ReadOnlyModelViewSet):
queryset = SDECategory.objects.all() queryset = SDECategory.objects.all()
serializer_class = SDECategorySerializer serializer_class = SDECategorySerializer
# permission_classes = [permissions.IsAuthenticated] # permission_classes = [permissions.IsAuthenticated]
class SDEGroupViewSet(viewsets.ModelViewSet): class SDEGroupViewSet(viewsets.ReadOnlyModelViewSet):
queryset = SDEGroup.objects.all() queryset = SDEGroup.objects.all()
serializer_class = SDEGroupSerializer serializer_class = SDEGroupSerializer
# permission_classes = [permissions.IsAuthenticated] # permission_classes = [permissions.IsAuthenticated]
class SDEMarketGroupViewSet(viewsets.ModelViewSet): class SDEMarketGroupViewSet(viewsets.ReadOnlyModelViewSet):
queryset = SDEMarektGroup.objects.all() queryset = SDEMarektGroup.objects.all()
serializer_class = SDEMarektGroupSerializer serializer_class = SDEMarektGroupSerializer
# permission_classes = [permissions.IsAuthenticated] # permission_classes = [permissions.IsAuthenticated]
class SDEMetaGroupViewSet(viewsets.ModelViewSet): class SDEMetaGroupViewSet(viewsets.ReadOnlyModelViewSet):
queryset = SDEMetaGroup.objects.all() queryset = SDEMetaGroup.objects.all()
serializer_class = SDEMetaGroupSerializer serializer_class = SDEMetaGroupSerializer
# permission_classes = [permissions.IsAuthenticated] # permission_classes = [permissions.IsAuthenticated]
class SDETypeViewSet(viewsets.ModelViewSet): class SDETypeViewSet(viewsets.ReadOnlyModelViewSet):
queryset = SDEType.objects.all() queryset = SDEType.objects.all()
serializer_class = SDETypeSerializer serializer_class = SDETypeSerializer
# permission_classes = [permissions.IsAuthenticated] # permission_classes = [permissions.IsAuthenticated]
class SDETypeMaterialViewSet(viewsets.ModelViewSet): class SDETypeMaterialViewSet(viewsets.ReadOnlyModelViewSet):
queryset = SDETypeMaterial.objects.all() queryset = SDETypeMaterial.objects.all()
serializer_class = SDETypeMaterialSerializer serializer_class = SDETypeMaterialSerializer
# permission_classes = [permissions.IsAuthenticated] # permission_classes = [permissions.IsAuthenticated]