63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
from flask import Blueprint, request
|
|
from flask_jwt_extended import jwt_required
|
|
|
|
from app.extensions import db
|
|
from app.models import User
|
|
from app.utils.auth import current_user
|
|
from app.utils.response import fail, ok
|
|
|
|
|
|
user_bp = Blueprint("user", __name__)
|
|
|
|
|
|
@user_bp.get("/profile")
|
|
@jwt_required()
|
|
def get_profile():
|
|
user = current_user()
|
|
if not user:
|
|
return fail("用户不存在", 404)
|
|
return ok(user.to_dict())
|
|
|
|
|
|
@user_bp.put("/profile")
|
|
@jwt_required()
|
|
def update_profile():
|
|
user = current_user()
|
|
if not user:
|
|
return fail("用户不存在", 404)
|
|
|
|
payload = request.get_json(silent=True) or {}
|
|
if "nickname" in payload:
|
|
user.nickname = (payload.get("nickname") or user.nickname).strip() or user.nickname
|
|
if "company" in payload:
|
|
user.company = (payload.get("company") or "").strip()
|
|
if "title" in payload:
|
|
user.title = (payload.get("title") or "").strip()
|
|
if "phone" in payload:
|
|
user.phone = (payload.get("phone") or "").strip()
|
|
|
|
new_password = payload.get("password")
|
|
if new_password:
|
|
if len(new_password) < 6:
|
|
return fail("新密码至少6位", 400)
|
|
user.set_password(new_password)
|
|
|
|
db.session.commit()
|
|
return ok(user.to_dict(), "个人信息更新成功")
|
|
|
|
|
|
@user_bp.get("/search")
|
|
@jwt_required()
|
|
def search_users():
|
|
keyword = (request.args.get("keyword") or "").strip()
|
|
if not keyword:
|
|
return ok([])
|
|
|
|
users = (
|
|
User.query.filter(User.username.like(f"%{keyword}%") | User.nickname.like(f"%{keyword}%"))
|
|
.order_by(User.id.desc())
|
|
.limit(20)
|
|
.all()
|
|
)
|
|
return ok([item.to_dict() for item in users])
|