From 3615689704a817ce478dbb4c5318141b60d21510 Mon Sep 17 00:00:00 2001 From: Kaladaran Date: Sat, 28 Oct 2023 13:32:04 +0200 Subject: [PATCH] independant sde app --- api/migrations/0001_initial.py | 108 ------------------ api/models.py | 4 +- api/models_esi.py | 2 - api/templates/redoc.html | 21 ++++ api/templates/swagger-ui.html | 28 +++++ api/urls.py | 7 ++ docker-compose.dev.yml | 4 +- mabras/settings.py | 1 + mabras/urls.py | 37 +++--- requirements.txt | 2 + {api/management => sde}/__init__.py | 0 sde/apps.py | 6 + .../commands => sde/management}/__init__.py | 0 sde/management/commands/__init__.py | 0 .../management/commands/import_sde.py | 2 +- sde/migrations/__init__.py | 0 api/models_sde.py => sde/models.py | 0 api/serializers_sde.py => sde/serializers.py | 30 ++--- sde/urls.py | 12 ++ api/views_sde.py => sde/views.py | 17 ++- 20 files changed, 127 insertions(+), 154 deletions(-) delete mode 100644 api/migrations/0001_initial.py delete mode 100644 api/models_esi.py create mode 100644 api/templates/redoc.html create mode 100644 api/templates/swagger-ui.html create mode 100644 api/urls.py rename {api/management => sde}/__init__.py (100%) create mode 100644 sde/apps.py rename {api/management/commands => sde/management}/__init__.py (100%) create mode 100644 sde/management/commands/__init__.py rename {api => sde}/management/commands/import_sde.py (99%) create mode 100644 sde/migrations/__init__.py rename api/models_sde.py => sde/models.py (100%) rename api/serializers_sde.py => sde/serializers.py (66%) create mode 100644 sde/urls.py rename api/views_sde.py => sde/views.py (71%) diff --git a/api/migrations/0001_initial.py b/api/migrations/0001_initial.py deleted file mode 100644 index 4297bfd..0000000 --- a/api/migrations/0001_initial.py +++ /dev/null @@ -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'), - ), - ] diff --git a/api/models.py b/api/models.py index fa6a91e..d60611a 100644 --- a/api/models.py +++ b/api/models.py @@ -1,4 +1,2 @@ -from django.db import models -from .models_esi import * -from .models_sde import * +# models \ No newline at end of file diff --git a/api/models_esi.py b/api/models_esi.py deleted file mode 100644 index beeb308..0000000 --- a/api/models_esi.py +++ /dev/null @@ -1,2 +0,0 @@ -from django.db import models - diff --git a/api/templates/redoc.html b/api/templates/redoc.html new file mode 100644 index 0000000..c02bbf9 --- /dev/null +++ b/api/templates/redoc.html @@ -0,0 +1,21 @@ + + + + ReDoc + + + + + + + + + + + + \ No newline at end of file diff --git a/api/templates/swagger-ui.html b/api/templates/swagger-ui.html new file mode 100644 index 0000000..2977649 --- /dev/null +++ b/api/templates/swagger-ui.html @@ -0,0 +1,28 @@ + + + + Swagger + + + + + +
+ + + + \ No newline at end of file diff --git a/api/urls.py b/api/urls.py new file mode 100644 index 0000000..c8711f0 --- /dev/null +++ b/api/urls.py @@ -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) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 90c594f..54b52c5 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -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: diff --git a/mabras/settings.py b/mabras/settings.py index 81b72fd..4437214 100644 --- a/mabras/settings.py +++ b/mabras/settings.py @@ -44,6 +44,7 @@ REST_FRAMEWORK = { INSTALLED_APPS = [ 'api', + 'sde', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/mabras/urls.py b/mabras/urls.py index 38db0c3..e89d4e4 100644 --- a/mabras/urls.py +++ b/mabras/urls.py @@ -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')) -] \ No newline at end of file + 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'), +] diff --git a/requirements.txt b/requirements.txt index b87e5c7..97a7883 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,5 @@ uvicorn[standard] psycopg[binary] redis esy +pyyaml +uritemplate diff --git a/api/management/__init__.py b/sde/__init__.py similarity index 100% rename from api/management/__init__.py rename to sde/__init__.py diff --git a/sde/apps.py b/sde/apps.py new file mode 100644 index 0000000..7ab8d8d --- /dev/null +++ b/sde/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class SdeConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'sde' diff --git a/api/management/commands/__init__.py b/sde/management/__init__.py similarity index 100% rename from api/management/commands/__init__.py rename to sde/management/__init__.py diff --git a/sde/management/commands/__init__.py b/sde/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/management/commands/import_sde.py b/sde/management/commands/import_sde.py similarity index 99% rename from api/management/commands/import_sde.py rename to sde/management/commands/import_sde.py index 1fecf3b..1582bb2 100644 --- a/api/management/commands/import_sde.py +++ b/sde/management/commands/import_sde.py @@ -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): diff --git a/sde/migrations/__init__.py b/sde/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/models_sde.py b/sde/models.py similarity index 100% rename from api/models_sde.py rename to sde/models.py diff --git a/api/serializers_sde.py b/sde/serializers.py similarity index 66% rename from api/serializers_sde.py rename to sde/serializers.py index cef88e0..d0563b7 100644 --- a/api/serializers_sde.py +++ b/sde/serializers.py @@ -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__" - diff --git a/sde/urls.py b/sde/urls.py new file mode 100644 index 0000000..905d28b --- /dev/null +++ b/sde/urls.py @@ -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) diff --git a/api/views_sde.py b/sde/views.py similarity index 71% rename from api/views_sde.py rename to sde/views.py index 64654e7..e831353 100644 --- a/api/views_sde.py +++ b/sde/views.py @@ -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]