hidoc/server/user.py
2025-07-09 16:05:50 +08:00

96 lines
2.5 KiB
Python

import utils.jwtauth
from flask import request, jsonify, Blueprint, make_response
from models import db, Doctor, DoctorHospital, Hospital
user_bp = Blueprint('user', __name__)
@user_bp.route('/api/user/info', methods=['GET'])
@utils.jwtauth.jwt_required
def get_user_info():
user_id = request.user_id
doctor = Doctor.query.filter_by(id=user_id).first()
return make_response(jsonify({
'code': 200,
'message': '获取用户信息成功',
'data': doctor.to_dict()
}))
# 获取医生的医院列表。用于医生登录后选择自己的一个医院
@user_bp.route('/api/user/hospitals', methods=['GET'])
@utils.jwtauth.jwt_required
def get_user_hospitals():
user_id = request.user_id
# 查询医生关联的所有未删除的医院
hospitals = Hospital.query.join(
DoctorHospital, Hospital.id == DoctorHospital.hosp_id
).filter(
DoctorHospital.doc_id == user_id,
Hospital.deleted == False
).all()
# 转换为字典列表
hospital_list = [hospital.to_dict() for hospital in hospitals]
return make_response(jsonify({
'code': 200,
'message': '获取医生医院列表成功',
'data': hospital_list
}))
# 修改医生个人信息
@user_bp.route('/api/user/update', methods=['PUT'])
@utils.jwtauth.jwt_required
def update_user_info():
user_id = request.user_id
data = request.json
if not data:
return jsonify({
'code': 400,
'message': '请求体不能为空'
}), 400
doctor = Doctor.query.filter_by(id=user_id).first()
if not doctor:
return jsonify({
'code': 404,
'message': '用户不存在'
}), 404
# 只允许修改姓名和性别
if 'name' in data:
doctor.name = data['name']
if 'gender' in data:
if data['gender'] not in ['', '', '未知']:
return jsonify({
'code': 400,
'message': '性别必须是: 男, 女, 未知'
}), 400
doctor.gender = data['gender']
try:
db.session.commit()
return make_response(jsonify({
'code': 200,
'message': '更新用户信息成功',
'data': doctor.to_dict()
}))
except Exception as e:
db.session.rollback()
return jsonify({
'code': 500,
'message': f'更新用户信息失败: {str(e)}'
}), 500