From 767cfc33e021aa9b9eebe32be2d0c3a75a6b00da Mon Sep 17 00:00:00 2001 From: Pavel Lashkov Date: Wed, 4 Oct 2023 20:23:13 +0300 Subject: [PATCH 1/2] installed corsheaders --- backend/api/migrations/__init__.py | 0 backend/categories/migrations/0001_initial.py | 71 ------------------- backend/categories/migrations/__init__.py | 0 backend/forecast/settings.py | 9 +++ backend/requirements.txt | 4 +- backend/sales/migrations/0001_initial.py | 35 --------- backend/sales/migrations/__init__.py | 0 .../migrations/0001_initial.py | 54 -------------- ...y_options_alter_forecast_store_and_more.py | 40 ----------- .../sales_forecasts/migrations/__init__.py | 0 backend/stores/migrations/0001_initial.py | 57 --------------- backend/stores/migrations/__init__.py | 0 backend/users/migrations/__init__.py | 0 13 files changed, 12 insertions(+), 258 deletions(-) delete mode 100644 backend/api/migrations/__init__.py delete mode 100644 backend/categories/migrations/0001_initial.py delete mode 100644 backend/categories/migrations/__init__.py delete mode 100644 backend/sales/migrations/0001_initial.py delete mode 100644 backend/sales/migrations/__init__.py delete mode 100644 backend/sales_forecasts/migrations/0001_initial.py delete mode 100644 backend/sales_forecasts/migrations/0002_alter_forecastdaily_options_alter_forecast_store_and_more.py delete mode 100644 backend/sales_forecasts/migrations/__init__.py delete mode 100644 backend/stores/migrations/0001_initial.py delete mode 100644 backend/stores/migrations/__init__.py delete mode 100644 backend/users/migrations/__init__.py diff --git a/backend/api/migrations/__init__.py b/backend/api/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/categories/migrations/0001_initial.py b/backend/categories/migrations/0001_initial.py deleted file mode 100644 index 27d38d3..0000000 --- a/backend/categories/migrations/0001_initial.py +++ /dev/null @@ -1,71 +0,0 @@ -# Generated by Django 4.2.5 on 2023-10-01 15:07 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Category', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=75, unique=True, verbose_name='Название категории')), - ], - options={ - 'verbose_name': 'Категория', - 'verbose_name_plural': 'Категории', - 'ordering': ['title'], - }, - ), - migrations.CreateModel( - name='Group', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=75, unique=True, verbose_name='Название группы')), - ], - options={ - 'verbose_name': 'Группа', - 'verbose_name_plural': 'Группы', - 'ordering': ['title'], - }, - ), - migrations.CreateModel( - name='Subcategory', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=75, unique=True, verbose_name='Название подкатегории')), - ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subcategories', to='categories.category', to_field='title', verbose_name='Категория')), - ], - options={ - 'verbose_name': 'Подкатегория', - 'verbose_name_plural': 'Подкатегории', - 'ordering': ['title'], - }, - ), - migrations.CreateModel( - name='Product', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('sku', models.CharField(max_length=75, unique=True, verbose_name='Название продукта')), - ('uom', models.SmallIntegerField(default=1, verbose_name='Маркер единицы измерения')), - ('subcategory', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='products', to='categories.subcategory', to_field='title', verbose_name='Подкатегория')), - ], - options={ - 'verbose_name': 'Продукт', - 'verbose_name_plural': 'Продукты', - 'ordering': ['sku'], - }, - ), - migrations.AddField( - model_name='category', - name='group', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='categories', to='categories.group', to_field='title', verbose_name='Группа'), - ), - ] diff --git a/backend/categories/migrations/__init__.py b/backend/categories/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/forecast/settings.py b/backend/forecast/settings.py index 699f5cf..65472e9 100644 --- a/backend/forecast/settings.py +++ b/backend/forecast/settings.py @@ -27,6 +27,7 @@ 'rest_framework.authtoken', 'djoser', 'drf_yasg', + 'corsheaders', 'api.apps.ApiConfig', 'categories.apps.CategoriesConfig', 'sales_forecasts.apps.SalesForecastsConfig', @@ -43,6 +44,8 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'corsheaders.middleware.CorsMiddleware', + 'django.middleware.common.CommonMiddleware', ] ROOT_URLCONF = 'forecast.urls' @@ -144,3 +147,9 @@ MEDIA_ROOT = '/media' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + + +CORS_ORIGIN_WHITELIST = [ + 'http://localhost:8000', + 'http://127.0.0.1:8000', + ] diff --git a/backend/requirements.txt b/backend/requirements.txt index 833363f..79a18ef 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -6,6 +6,7 @@ cryptography==41.0.4 defusedxml==0.7.1 Django==4.2.5 django-bulk-update==2.2.0 +django-cors-headers==4.2.0 django-filter==23.3 django-templated-mail==1.1.1 djangorestframework==3.14.0 @@ -26,4 +27,5 @@ social-auth-core==4.4.2 sqlparse==0.4.4 tzdata==2023.3 urllib3==2.0.5 -drf-yasg==1.21.7 \ No newline at end of file +drf-yasg==1.21.7 +gunicorn==21.2.0 \ No newline at end of file diff --git a/backend/sales/migrations/0001_initial.py b/backend/sales/migrations/0001_initial.py deleted file mode 100644 index c4f5ac7..0000000 --- a/backend/sales/migrations/0001_initial.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 4.2.5 on 2023-10-01 15:07 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('stores', '0001_initial'), - ('categories', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Sale', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateField(verbose_name='Дата')), - ('sales_type', models.BooleanField(verbose_name='Флаг наличия промо')), - ('sales_units', models.DecimalField(decimal_places=3, max_digits=12, verbose_name='Число проданных продуктов без промо')), - ('sales_units_promo', models.DecimalField(decimal_places=3, max_digits=12, verbose_name='Число проданных продуктов с промо')), - ('sales_rub', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Продажи в рублях')), - ('sales_rub_promo', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Промо продажи в рублях')), - ('sku', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sales', to='categories.product', to_field='sku', verbose_name='Продукт')), - ('store', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sales', to='stores.store', to_field='store', verbose_name='Магазин')), - ], - options={ - 'verbose_name': 'Продажа продукта', - 'verbose_name_plural': 'Продажи продуктов', - }, - ), - ] diff --git a/backend/sales/migrations/__init__.py b/backend/sales/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/sales_forecasts/migrations/0001_initial.py b/backend/sales_forecasts/migrations/0001_initial.py deleted file mode 100644 index ab166d5..0000000 --- a/backend/sales_forecasts/migrations/0001_initial.py +++ /dev/null @@ -1,54 +0,0 @@ -# Generated by Django 4.2.5 on 2023-10-01 15:07 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('stores', '0001_initial'), - ('categories', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Forecast', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('forecast_date', models.DateField(verbose_name='Дата прогноза')), - ('store', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='stores.store')), - ], - options={ - 'verbose_name': 'Прогноз магазина', - 'verbose_name_plural': 'Прогнозы магазинов', - }, - ), - migrations.CreateModel( - name='ForecastSku', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('forecast', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sales_forecasts.forecast')), - ('sku', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='categories.category')), - ], - options={ - 'verbose_name': 'Прогноз товара', - 'verbose_name_plural': 'Прогнозы товара', - }, - ), - migrations.CreateModel( - name='ForecastDaily', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateField(verbose_name='Дата')), - ('target', models.PositiveIntegerField(verbose_name='Спрос(шт)')), - ('sales_units', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sales_forecasts.forecastsku')), - ], - options={ - 'verbose_name': 'Ежедневный прогноз', - 'verbose_name_plural': 'Ежедневные прогнозы', - }, - ), - ] diff --git a/backend/sales_forecasts/migrations/0002_alter_forecastdaily_options_alter_forecast_store_and_more.py b/backend/sales_forecasts/migrations/0002_alter_forecastdaily_options_alter_forecast_store_and_more.py deleted file mode 100644 index 0e18d58..0000000 --- a/backend/sales_forecasts/migrations/0002_alter_forecastdaily_options_alter_forecast_store_and_more.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 4.2.5 on 2023-10-02 12:21 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('stores', '0001_initial'), - ('categories', '0001_initial'), - ('sales_forecasts', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='forecastdaily', - options={'verbose_name': 'Ежедневный прогноз на товар в ТЦ', 'verbose_name_plural': 'Ежедневные прогнозы на товары в ТЦ'}, - ), - migrations.AlterField( - model_name='forecast', - name='store', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='forecasts', to='stores.store', to_field='store', verbose_name='Магазин'), - ), - migrations.AlterField( - model_name='forecastdaily', - name='sales_units', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='forecasts_daily', to='sales_forecasts.forecastsku', verbose_name='Продукт'), - ), - migrations.AlterField( - model_name='forecastsku', - name='forecast', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='forecasts_sku', to='sales_forecasts.forecast', verbose_name='Прогноз магазина'), - ), - migrations.AlterField( - model_name='forecastsku', - name='sku', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='forecasts_sku', to='categories.product', to_field='sku', verbose_name='Продукт'), - ), - ] diff --git a/backend/sales_forecasts/migrations/__init__.py b/backend/sales_forecasts/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/stores/migrations/0001_initial.py b/backend/stores/migrations/0001_initial.py deleted file mode 100644 index 60dabc2..0000000 --- a/backend/stores/migrations/0001_initial.py +++ /dev/null @@ -1,57 +0,0 @@ -# Generated by Django 4.2.5 on 2023-10-01 15:07 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='City', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('city', models.CharField(max_length=50, unique=True)), - ], - options={ - 'verbose_name': 'Город', - 'verbose_name_plural': 'Города', - 'ordering': ('city',), - }, - ), - migrations.CreateModel( - name='Division', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('division', models.CharField(max_length=50, unique=True)), - ], - options={ - 'verbose_name': 'Отдел', - 'verbose_name_plural': 'Отделы', - 'ordering': ('division',), - }, - ), - migrations.CreateModel( - name='Store', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('store', models.CharField(max_length=50, unique=True)), - ('type_format', models.SmallIntegerField()), - ('loc', models.SmallIntegerField()), - ('size', models.SmallIntegerField(null=True)), - ('is_active', models.BooleanField()), - ('city', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='stores', to='stores.city', to_field='city')), - ('division', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='stores', to='stores.division', to_field='division')), - ], - options={ - 'verbose_name': 'Магазин', - 'verbose_name_plural': 'Магазины', - 'ordering': ('store',), - }, - ), - ] diff --git a/backend/stores/migrations/__init__.py b/backend/stores/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/users/migrations/__init__.py b/backend/users/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 From e22f2eacc37b2814df7b1af3fdb1ef1d319362b3 Mon Sep 17 00:00:00 2001 From: Pavel Lashkov Date: Wed, 4 Oct 2023 21:55:14 +0300 Subject: [PATCH 2/2] cors&swag --- gateway/Dockerfile | 2 +- gateway/nginx.conf | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/gateway/Dockerfile b/gateway/Dockerfile index 0ef02fb..f0808a1 100644 --- a/gateway/Dockerfile +++ b/gateway/Dockerfile @@ -1,2 +1,2 @@ FROM nginx:1.22.1 -COPY nginx.conf /etc/nginx/templates/default.conf.template \ No newline at end of file +COPY nginx.conf /etc/nginx/templates/default.conf.template diff --git a/gateway/nginx.conf b/gateway/nginx.conf index 10e9511..2fa16d7 100644 --- a/gateway/nginx.conf +++ b/gateway/nginx.conf @@ -7,11 +7,17 @@ server { proxy_set_header Host $http_host; proxy_pass http://backend:8000/api/v1/; } + location /admin/ { proxy_set_header Host $http_host; proxy_pass http://backend:8000/admin/; } + location /swagger/ { + proxy_set_header Host $http_host; + proxy_pass http://backend:8000/swagger/; + } + location /media/ { proxy_set_header Host $http_host; alias /media/;