重构后端服务架构并优化前端错误处理
This commit is contained in:
0
fastapi-backend/app/models/__init__.py
Normal file
0
fastapi-backend/app/models/__init__.py
Normal file
33
fastapi-backend/app/models/order.py
Normal file
33
fastapi-backend/app/models/order.py
Normal 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)
|
||||
33
fastapi-backend/app/models/payment.py
Normal file
33
fastapi-backend/app/models/payment.py
Normal 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)
|
||||
36
fastapi-backend/app/models/user.py
Normal file
36
fastapi-backend/app/models/user.py
Normal 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)
|
||||
Reference in New Issue
Block a user