重构后端服务架构并优化前端错误处理

This commit is contained in:
ylweng
2025-09-12 01:21:43 +08:00
parent d550a8ed51
commit 3a48a67757
53 changed files with 3925 additions and 0 deletions

View File

View File

@@ -0,0 +1,33 @@
from sqlalchemy import Column, Integer, String, Float, Enum, DateTime, Text, func, ForeignKey
from app.db.database import Base
from enum import Enum as PyEnum
class OrderStatus(str, PyEnum):
PENDING = "pending"
CONFIRMED = "confirmed"
PROCESSING = "processing"
SHIPPED = "shipped"
DELIVERED = "delivered"
CANCELLED = "cancelled"
COMPLETED = "completed"
class Order(Base):
__tablename__ = "orders"
id = Column(Integer, primary_key=True, index=True)
order_no = Column(String(32), unique=True, index=True, nullable=False)
buyer_id = Column(Integer, ForeignKey("users.id"), nullable=False)
seller_id = Column(Integer, ForeignKey("users.id"), nullable=False)
variety_type = Column(String(50), nullable=False)
weight_range = Column(String(50), nullable=False)
weight_actual = Column(Float, nullable=True)
price_per_unit = Column(Float, nullable=False)
total_price = Column(Float, nullable=False)
advance_payment = Column(Float, nullable=False, default=0.0)
final_payment = Column(Float, nullable=False, default=0.0)
status = Column(Enum(OrderStatus), default=OrderStatus.PENDING, nullable=False)
delivery_address = Column(Text, nullable=True)
delivery_time = Column(DateTime, nullable=True)
remark = Column(Text, nullable=True)
created_at = Column(DateTime, default=func.now(), nullable=False)
updated_at = Column(DateTime, default=func.now(), onupdate=func.now(), nullable=False)

View File

@@ -0,0 +1,33 @@
from sqlalchemy import Column, Integer, String, Float, Enum, DateTime, ForeignKey, func
from app.db.database import Base
from enum import Enum as PyEnum
class PaymentType(str, PyEnum):
ADVANCE = "advance"
FINAL = "final"
class PaymentMethod(str, PyEnum):
WECHAT = "wechat"
ALIPAY = "alipay"
BANK = "bank"
class PaymentStatus(str, PyEnum):
PENDING = "pending"
SUCCESS = "success"
FAILED = "failed"
REFUNDED = "refunded"
class Payment(Base):
__tablename__ = "payments"
id = Column(Integer, primary_key=True, index=True)
order_id = Column(Integer, ForeignKey("orders.id"), nullable=False)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
payment_no = Column(String(32), unique=True, index=True, nullable=False)
amount = Column(Float, nullable=False)
payment_type = Column(Enum(PaymentType), nullable=False)
payment_method = Column(Enum(PaymentMethod), nullable=False)
status = Column(Enum(PaymentStatus), default=PaymentStatus.PENDING, nullable=False)
transaction_id = Column(String(128), nullable=True)
created_at = Column(DateTime, default=func.now(), nullable=False)
updated_at = Column(DateTime, default=func.now(), onupdate=func.now(), nullable=False)

View File

@@ -0,0 +1,36 @@
from sqlalchemy import Column, Integer, String, Enum, DateTime, func
from app.db.database import Base
from passlib.context import CryptContext
from enum import Enum as PyEnum
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
class UserType(str, PyEnum):
CLIENT = "client"
SUPPLIER = "supplier"
DRIVER = "driver"
STAFF = "staff"
ADMIN = "admin"
class UserStatus(str, PyEnum):
ACTIVE = "active"
INACTIVE = "inactive"
LOCKED = "locked"
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
uuid = Column(String(36), unique=True, index=True, nullable=False)
username = Column(String(50), unique=True, index=True, nullable=False)
password_hash = Column(String(128), nullable=False)
user_type = Column(Enum(UserType), default=UserType.CLIENT, nullable=False)
status = Column(Enum(UserStatus), default=UserStatus.ACTIVE, nullable=False)
created_at = Column(DateTime, default=func.now(), nullable=False)
updated_at = Column(DateTime, default=func.now(), onupdate=func.now(), nullable=False)
def verify_password(self, plain_password):
return pwd_context.verify(plain_password, self.password_hash)
def set_password(self, plain_password):
self.password_hash = pwd_context.hash(plain_password)