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:
- ./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:

View File

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

View File

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

View File

@@ -6,3 +6,5 @@ uvicorn[standard]
psycopg[binary]
redis
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 api.models import *
from sde.models import *
import yaml
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
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
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 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]