diff --git a/StockSeeker/models.py b/StockSeeker/models.py index 0469769..7651e35 100644 --- a/StockSeeker/models.py +++ b/StockSeeker/models.py @@ -2,6 +2,16 @@ from django.db import models from django.contrib.auth.models import User +class Warehouse(models.Model): + name = models.CharField(null=False, max_length=30, blank=False) + location = models.CharField(null=False, max_length=30, blank=False) + max_capacity = models.IntegerField(null=False, default=0, blank=False) + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="warehouses", null=False, blank=False) + + + def __str__(self): + return self.name + class Product(models.Model): name = models.CharField(null=False, max_length=30, blank=False) description = models.CharField(default=None, null=True, blank=True, max_length=120) @@ -12,6 +22,7 @@ class Product(models.Model): stock_limit = models.IntegerField(null=True, blank=True) alert_enabled = models.BooleanField(default=False) image = models.CharField(null=True, blank=True) + warehouse = models.ManyToManyField(Warehouse, related_name="products") @property def is_stock_low(self): return self.alert_enabled and self.stock_limit is not None and self.quantity < self.stock_limit diff --git a/StockSeeker/serializers.py b/StockSeeker/serializers.py index 05a8509..c701d45 100644 --- a/StockSeeker/serializers.py +++ b/StockSeeker/serializers.py @@ -34,7 +34,10 @@ class UserSerializer(serializers.ModelSerializer): class ProductSerializer(serializers.ModelSerializer): user = serializers.PrimaryKeyRelatedField(read_only=True) is_stock_low = serializers.SerializerMethodField() - + warehouse = serializers.PrimaryKeyRelatedField( + queryset=Warehouse.objects.all(), + many=True + ) def validate(self, data): if data.get('alert_enabled') and data.get('stock_limit') is None: raise serializers.ValidationError({ @@ -44,8 +47,13 @@ class ProductSerializer(serializers.ModelSerializer): class Meta: model = Product - fields = ["id", "name", "description", "quantity", "creation_date", "modification_date", "user","stock_limit","alert_enabled","is_stock_low","image"] + fields = ["id", "name", "description", "quantity", "creation_date", "modification_date", "user","stock_limit","alert_enabled","is_stock_low","image","warehouse"] + def validate_warehouse(self, value): + if not value: + raise serializers.ValidationError("Un produit doit être associé à au moins un entrepôt.") + return value + def validate_quantity(self, value): if value < 0: raise serializers.ValidationError("La quantité ne peut pas être négative.") @@ -54,4 +62,16 @@ class ProductSerializer(serializers.ModelSerializer): def get_is_stock_low(self, obj): if not isinstance(obj, Product): return None - return obj.is_stock_low \ No newline at end of file + return obj.is_stock_low + +class WarehouseSerializer(serializers.ModelSerializer): + user = serializers.PrimaryKeyRelatedField(read_only=True) + + class Meta: + model = Warehouse + fields = ["id", "name", "location", "max_capacity","user"] + + def validate_max_capacity(self, value): + if value < 0: + raise serializers.ValidationError("La capacité maximale ne peut pas être négative.") + return value \ No newline at end of file diff --git a/StockSeeker/urls.py b/StockSeeker/urls.py index 1859ade..817a3e1 100644 --- a/StockSeeker/urls.py +++ b/StockSeeker/urls.py @@ -4,12 +4,13 @@ from rest_framework import routers from .views import * from . import views from rest_framework_simplejwt.views import * -from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView +from drf_spectacular.views import SpectacularAPIView ##juge pas les noms d'acces OK ?## router = routers.DefaultRouter() router.register(r'products', ProductView, basename='product') +router.register(r'warehouses', WarehouseView, basename='warehouse') urlpatterns = [ path('api/', include(router.urls)), diff --git a/StockSeeker/views.py b/StockSeeker/views.py index 68e7700..786f134 100644 --- a/StockSeeker/views.py +++ b/StockSeeker/views.py @@ -53,3 +53,15 @@ class ProductView(viewsets.ModelViewSet): def get_queryset(self): return Product.objects.filter(user_id=self.request.user) +class WarehouseView(viewsets.ModelViewSet): + permission_classes = [IsAuthenticated] + throttle_classes = [UserRateThrottle] + serializer_class = WarehouseSerializer + queryset = Warehouse.objects.all() + + def perform_create(self, serializer): + serializer.save(user=self.request.user) + + def get_queryset(self): + return Warehouse.objects.filter(user_id=self.request.user) +