From a3e8c03c54995a3c5561626b85d66a3f8bf345ed Mon Sep 17 00:00:00 2001 From: fellipepcs Date: Fri, 1 Dec 2023 15:06:41 -0300 Subject: [PATCH] feat: adicionado padrao observer para adicionar promocao de produtos --- backend/americanas/models/Produto.py | 23 +++++++++++++++++++++-- backend/americanas/views/ProdutoView.py | 16 +++++++++++++--- backend/observer/ProdutoObserver.py | 8 ++++---- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/backend/americanas/models/Produto.py b/backend/americanas/models/Produto.py index a032d84..c725902 100644 --- a/backend/americanas/models/Produto.py +++ b/backend/americanas/models/Produto.py @@ -1,12 +1,31 @@ from django.db import models from abstract_factory import Base - class Produto(Base): categoria = models.CharField(max_length=255) nome = models.CharField(max_length=255) tipo = models.CharField(max_length=255) preco = models.DecimalField(max_digits=10, decimal_places=2) desconto = models.FloatField() + + def adicionar_observer(self, observer): + if not hasattr(self, '_observers'): + self._observers = [] + self._observers.append(observer) + + def remover_observer(self, observer): + if hasattr(self, '_observers'): + self._observers.remove(observer) + + def notificar_observers(self, **kwargs): + if hasattr(self, '_observers'): + for observer in self._observers: + observer.update(self, **kwargs) + + def adicionar_promocao(self, nova_promocao): + # Lógica para adicionar uma nova promoção ao produto + print("Adicionar promoção chamado") + self.notificar_observers(nova_promocao=nova_promocao) + class Meta: - db_table = 'produto' \ No newline at end of file + db_table = 'produto' diff --git a/backend/americanas/views/ProdutoView.py b/backend/americanas/views/ProdutoView.py index feb748f..694d71a 100644 --- a/backend/americanas/views/ProdutoView.py +++ b/backend/americanas/views/ProdutoView.py @@ -1,8 +1,18 @@ -from rest_framework import viewsets +from rest_framework import viewsets, status +from rest_framework.response import Response from americanas.models import Produto from americanas.serializers import ProdutoSerializers - +from observer.ProdutoObserver import PromocaoObserver class ProdutoViewSets(viewsets.ModelViewSet): serializer_class = ProdutoSerializers - queryset = Produto.objects.all() \ No newline at end of file + queryset = Produto.objects.all() + + def perform_create(self, serializer): + print("Perform create chamado") + produto_instance = serializer.save() + promocao_observer = PromocaoObserver() + produto_instance.adicionar_promocao(nova_promocao=promocao_observer) + promocao_observer.notificar_promocao(produto_instance) + + return Response(serializer.data, status=status.HTTP_201_CREATED) \ No newline at end of file diff --git a/backend/observer/ProdutoObserver.py b/backend/observer/ProdutoObserver.py index ccef66c..73232cc 100644 --- a/backend/observer/ProdutoObserver.py +++ b/backend/observer/ProdutoObserver.py @@ -1,12 +1,12 @@ from observer import Observer + class PromocaoObserver(Observer): def update(self, subject, *args, **kwargs): - if "nova_promocao" in kwargs: - nova_promocao = kwargs["nova_promocao"] - self.notificar_promocao(nova_promocao) + print("Update chamado") + self.notificar_promocao(subject) def notificar_promocao(self, promocao): + print("Notificar promoção chamado") # Lógica para notificar sobre uma nova promoção print(f"Nova promoção! {promocao.nome} com desconto de {promocao.desconto}%") -x \ No newline at end of file