feat: Semaine 8

This commit is contained in:
gauvainboiche
2026-05-11 09:25:19 +02:00
parent 606e43e53f
commit 3315cb2336
123 changed files with 5748 additions and 0 deletions
@@ -0,0 +1,15 @@
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Customer:
id: int
name: str
email: str
address: str
order_count: int
is_premium: Optional[bool] = field(default=None)
def __post_init__(self):
if self.is_premium is None:
self.is_premium = self.order_count > 10
@@ -0,0 +1,20 @@
from dataclasses import dataclass
@dataclass
class Dish:
id: int
name: str
price: float
description: str = ""
is_available: bool = True
def with_new_price(self, new_price: float) -> 'Dish':
return Dish(
id=self.id,
name=self.name,
price=new_price,
description=self.description,
is_available=self.is_available
)
plat_01 = Dish(id=1, name="Spaghetti Carbonara", price=12.99, description="Classic Italian pasta dish with eggs, cheese, pancetta, and pepper.")
@@ -0,0 +1,55 @@
from dataclasses import dataclass
from datetime import datetime
from typing import Optional
from domain.entities.dish import Dish
@dataclass
class Order:
id: int
customer_id: int
restaurant_id: int
restaurant_name: str
dishes: list[Dish]
delivery_address: str
created_at: Optional[datetime] = datetime.now()
delivery_at: Optional[datetime] = None
def amount(self):
return sum(dish.price for dish in self.dishes)
def is_late(self):
if self.delivery_at is None:
return False
deadline = order.created_at + timedelta(minutes= self.DELIVERY_DELAY_MINUTES) #type: ignore
return datetime.now() > deadline
def status(self):
if self.delivery_at:
return "Delivered"
elif self.is_late():
return "Late"
else:
return "In delivery progress..."
def urgency_level(self, delivery_delay, warning_threshold):
if self.delivery_at:
return "Delivered"
minutes = (datetime.now() - order.created_at).total_seconds() / 60 #type: ignore
if minutes > delivery_delay:
return "severe_delay"
elif minutes > warning_threshold:
return "light_delay"
return "normal"
@dataclass
class OrderWithStatus:
order_id: int
restaurant_name: str
total_amount: float
is_late: bool
free_delivery: bool
is_premium_customer: bool
status: str
urgency_level: str # normal, light_delay, severe_delay, delivered