models.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. """
  2. 数据模型模块
  3. 定义应用中使用的数据模型
  4. """
  5. from dataclasses import dataclass
  6. from datetime import datetime
  7. from typing import Optional, List
  8. @dataclass
  9. class User:
  10. """用户模型"""
  11. id: int
  12. username: str
  13. email: str
  14. created_at: datetime
  15. is_active: bool = True
  16. def __str__(self) -> str:
  17. return f"User({self.username}, {self.email})"
  18. # TODO: 添加用户验证方法
  19. @dataclass
  20. class Product:
  21. """产品模型"""
  22. id: int
  23. name: str
  24. category: str
  25. price: float
  26. stock: int
  27. description: Optional[str] = None
  28. def is_in_stock(self) -> bool:
  29. """检查是否有库存"""
  30. return self.stock > 0
  31. def apply_discount(self, percentage: float) -> float:
  32. """
  33. 应用折扣
  34. Args:
  35. percentage: 折扣百分比
  36. Returns:
  37. 折后价格
  38. """
  39. # TODO: 添加折扣验证
  40. return self.price * (1 - percentage / 100)
  41. @dataclass
  42. class Order:
  43. """订单模型"""
  44. id: int
  45. user_id: int
  46. products: List[Product]
  47. total_amount: float
  48. status: str
  49. created_at: datetime
  50. def calculate_total(self) -> float:
  51. """计算订单总额"""
  52. # TODO: 考虑折扣和税费
  53. return sum(p.price for p in self.products)
  54. def is_completed(self) -> bool:
  55. """检查订单是否完成"""
  56. return self.status == "completed"
  57. @dataclass
  58. class Transaction:
  59. """交易模型"""
  60. id: int
  61. order_id: int
  62. amount: float
  63. payment_method: str
  64. timestamp: datetime
  65. status: str
  66. # TODO: 添加退款功能