Skip to content

Commit

Permalink
Merge pull request #64 from dev-lymar/tony_makedoc
Browse files Browse the repository at this point in the history
Tony makedoc
  • Loading branch information
dev-lymar committed Jun 15, 2024
2 parents 8a68345 + b2ca1c9 commit e03cd0e
Show file tree
Hide file tree
Showing 19 changed files with 329 additions and 196 deletions.
7 changes: 6 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,17 @@ DATABASE_PASSWORD = db_password
DATABASE_HOST = db
DATABASE_PORT = 5432

# Redis

REDIS_HOST = localhost
REDIS_PORT = 6379

# Django secret key
SECRET_KEY = django-insecure-your_secret_key

# Mail secret key
EMAIL_HOST = smtp.mail
EMAIL_PORT = port.mail
EMAIL_USE_SSL = True
EMAIL_HOST_USER = example@mail.com
EMAIL_HOST_PASSWORD = email_password
EMAIL_USE_SSL = True
3 changes: 3 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ services:
hostname: redis
ports:
- "6379:6379"
volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- melnichanka

Expand Down
19 changes: 19 additions & 0 deletions docs/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,16 @@ paths:
schema:
$ref: '#/components/schemas/DataDoc'
description: ''
/api/v1/doc/filemake/:
get:
operationId: v1_doc_filemake_retrieve
tags:
- v1
security:
- jwtAuth: []
responses:
'200':
description: No response body
/api/v1/goods/:
get:
operationId: v1_goods_list
Expand Down Expand Up @@ -1385,6 +1395,9 @@ components:
DataDoc:
type: object
properties:
delivery_type:
type: array
items: {}
client_id:
type: integer
items:
Expand All @@ -1395,8 +1408,13 @@ components:
type: integer
destination:
type: string
delivery_cost:
type: integer
minimum: 0
required:
- client_id
- delivery_cost
- delivery_type
- destination
- factory_id
- items
Expand Down Expand Up @@ -1551,6 +1569,7 @@ components:
type: integer
discount:
type: integer
maximum: 100
default: 0
required:
- product_id
Expand Down
2 changes: 1 addition & 1 deletion goods/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,4 @@ class Meta:
unique_together = [("package", "factory", "pallet_weight")]

def __str__(self) -> str:
return f"{self.package} кг, {self.factory}"
return f"{self.package}"
2 changes: 1 addition & 1 deletion goods/tests/test_models_goods.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def test__brand__return_valid_str(brand_object):

@pytest.mark.django_db
def test__package__return_valid_str(package_object, factory_object):
assert str(package_object) == f"{package_object.package} кг, {factory_object.full_name}"
assert str(package_object) == f"{package_object.package}"


@pytest.mark.django_db
Expand Down
4 changes: 2 additions & 2 deletions goods/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ def get_queryset(self):
if cached_goods:
return cached_goods
else:
goods = super().get_queryset()
cache.set("goods_list", goods, 60 * 15)
goods = list(super().get_queryset())
cache.set("goods_list", goods, 1800)
return goods
4 changes: 2 additions & 2 deletions logistics/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,6 @@ def get_queryset(self):
if cached_factories:
return cached_factories
else:
factories = super().get_queryset()
cache.set("factories_list", factories, 60 * 30)
factories = list(super().get_queryset())
cache.set("factories_list", factories, 3600)
return factories
1 change: 0 additions & 1 deletion makedoc/admin.py

This file was deleted.

87 changes: 87 additions & 0 deletions makedoc/data_service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
from django.core.cache import cache

from clients.models import Client
from goods.models import Product
from logistics.models import Factory


class DataService:
@staticmethod
def get_delivery_type(validated_data):
delivery_type = validated_data.get("delivery_type")
if delivery_type is None:
raise Exception("Delivery type not found")
return delivery_type

@staticmethod
def get_client(validated_data):
try:
client_id = validated_data.get("client_id")
client = Client.objects.get(id=client_id)
return client
except Client.DoesNotExist:
raise Exception("Client not found")

@staticmethod
def get_products(validated_data):
products_data = validated_data.get("items")
results = []
cached_goods = cache.get("goods_list")
if cached_goods is None:
try:
cached_goods = list(Product.objects.all())
cache.set("goods_list", cached_goods, 1800)
except Exception:
cached_goods = list(Product.objects.all())
for item in products_data:
product_id = item.get("product_id")
product_quantity = item.get("quantity")
product_discount = item.get("discount")
for product in cached_goods:
if product.id == product_id:
results.append(
{
"product": product,
"quantity": product_quantity,
"discount": product_discount,
"price": product.price,
}
)
break
return results

@staticmethod
def get_factory(validated_data):
try:
factory_id = validated_data.get("factory_id")
cached_factories = cache.get("factories_list")
if cached_factories:
for factory in cached_factories:
if factory.id == factory_id:
return factory
factory = Factory.objects.get(id=factory_id)
return factory
except Factory.DoesNotExist:
raise Exception("Factory not found")

@staticmethod
def get_delivery_cost(validated_data):
delivery_cost = validated_data.get("delivery_cost")
if delivery_cost is None:
raise Exception("Delivery cost not found")
return delivery_cost

@staticmethod
def get_destination(validated_data):
destination = validated_data.get("destination")
if destination is None:
raise Exception("City not found")
return destination

@staticmethod
def get_user(request):
user = request.user
if user:
return user
else:
raise Exception("User is not authenticated")
1 change: 0 additions & 1 deletion makedoc/models.py

This file was deleted.

10 changes: 8 additions & 2 deletions makedoc/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@
from rest_framework import serializers


class DocumentsSimpleSerializer(serializers.Serializer[Any]):
pass


class OrderItemSerializer(serializers.Serializer[Any]):
product_id = serializers.IntegerField()
quantity = serializers.IntegerField()
discount = serializers.IntegerField(required=False, default=0)
quantity = serializers.FloatField(min_value=0.001)
discount = serializers.IntegerField(required=False, default=0, max_value=100)


class DataDocSerializer(serializers.Serializer[Any]):
delivery_type = serializers.CharField()
client_id = serializers.IntegerField()
items = serializers.ListField(child=OrderItemSerializer())
factory_id = serializers.IntegerField()
destination = serializers.CharField()
delivery_cost = serializers.IntegerField(min_value=0)
Loading

0 comments on commit e03cd0e

Please sign in to comment.