由于本次代码变更内容为空,无法生成有效的提交信息。请提供具体的代码变更内容以便生成合适的提交信息。登录、微信登录等认证功能- 添加管理员登录功能

- 实现个人资料更新和密码修改- 配置数据库连接和 Alembic 迁移
- 添加健康检查和系统统计接口
- 实现自定义错误处理和响应格式
- 配置 FastAPI 应用和中间件
This commit is contained in:
ylweng
2025-09-12 00:57:52 +08:00
parent 67aef9a9ee
commit 4db35e91d4
18 changed files with 1763 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
from datetime import datetime
from sqlalchemy import Boolean, Column, String, Integer, DateTime, Enum
from sqlalchemy.sql import func
from app.db.session import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String(50), unique=True, index=True, nullable=False)
password_hash = Column(String(255), nullable=False)
user_type = Column(Enum('farmer', 'merchant', 'admin', 'super_admin'), default='farmer')
real_name = Column(String(50))
nickname = Column(String(50))
avatar_url = Column(String(255))
email = Column(String(100), unique=True, index=True)
phone = Column(String(20), unique=True, index=True)
gender = Column(Enum('male', 'female', 'other'), default='other')
birthday = Column(DateTime)
status = Column(Enum('active', 'inactive'), default='active')
wechat_openid = Column(String(100), unique=True, index=True)
wechat_unionid = Column(String(100), unique=True, index=True)
level = Column(Integer, default=1)
created_at = Column(DateTime, default=func.now())
updated_at = Column(DateTime, default=func.now(), onupdate=func.now())
last_login = Column(DateTime)
class Admin(Base):
__tablename__ = "admins"
id = Column(Integer, primary_key=True, index=True)
username = Column(String(50), unique=True, index=True, nullable=False)
password = Column(String(255), nullable=False)
email = Column(String(100), unique=True, index=True)
nickname = Column(String(50))
avatar = Column(String(255))
role = Column(Enum('admin', 'super_admin'), default='admin')
status = Column(Enum('active', 'inactive'), default='active')
last_login = Column(DateTime)
created_at = Column(DateTime, default=func.now())
updated_at = Column(DateTime, default=func.now(), onupdate=func.now())