def get_followeds(id): '''返回用户已关注的人的列表''' user = User.query.get_or_404(id) page = request.args.get('page', 1, type=int) per_page = min( request.args.get('per_page', current_app.config['USERS_PER_PAGE'], type=int), 100) data = User.to_collection_dict(user.followeds, page, per_page, 'api.get_followeds', id=id) # 为每个 followed 添加 is_following 标志位 for item in data['items']: item['is_following'] = g.current_user.is_following( User.query.get(item['id'])) # 获取用户开始关注 followed 的时间 res = db.engine.execute( "select * from followers where follower_id={} and followed_id={}". format(user.id, item['id'])) item['timestamp'] = datetime.strptime( list(res)[0][2], '%Y-%m-%d %H:%M:%S.%f') # 按 timestamp 排序一个字典列表(倒序,最新关注的人在最前面) data['items'] = sorted(data['items'], key=itemgetter('timestamp'), reverse=True) return jsonify(data)
def get_department_members(id): """ 返回部门内用户具体信息 --- tags: - 部门相关接口 description: 部门信息接口 parameters: - name: id in: path type: integer description: 部门id responses: 200: description: """ department = Department.query.get_or_404(id) page = request.args.get('page', 1, type=int) per_page = min( request.args.get('per_page', current_app.config['USERS_PER_PAGE'], type=int), 100) data = User.to_collection_dict(department.members.order_by(User.id.desc()), page, per_page, 'api.get_department_members', id=id) return ResMsg(data=data).data
def get_followers(id): '''返回用户的粉丝列表''' user = User.query.get_or_404(id) page = request.args.get('page', 1, type=int) per_page = min( request.args.get('per_page', current_app.config['USERS_PER_PAGE'], type=int), 100) data = User.to_collection_dict(user.followers, page, per_page, 'api.get_followers', id=id) # 为每个 follower 添加 is_following 标志位 for item in data['items']: item['is_following'] = g.current_user.is_following( User.query.get(item['id'])) # 获取 follower 开始关注该用户的时间 res = db.engine.execute( "select * from followers where follower_id={} and followed_id={}". format(item['id'], user.id)) item['timestamp'] = datetime.strptime( list(res)[0][2], '%Y-%m-%d %H:%M:%S.%f') # 按 timestamp 排序一个字典列表(倒序,最新的粉丝在最前面) data['items'] = sorted(data['items'], key=itemgetter('timestamp'), reverse=True) # 标记哪些粉丝是新的 last_read_time = user.last_follows_read_time or datetime(1900, 1, 1) for item in data['items']: if item['timestamp'] > last_read_time: item['is_new'] = True # 更新 last_follows_read_time 属性值 user.last_follows_read_time = datetime.utcnow() # 将新粉丝通知的计数归零 user.add_notification('unread_follows_count', 0) db.session.commit() return jsonify(data)
def get_users(): """ 返回用户合集,分页显示 --- tags: - 用户相关接口 description: 用户信息接口 parameters: - name: page in: path type: integer description: 第几页 - name: per_page in: path type: integer description: 每页多少个 - name: username in: path type: string description: 用户账号 模糊匹配 - name: name in: path type: string description: 用户名字 模糊匹配 - name: department_id in: path type: integer description: 部门id - name: member_since in: path type: string description: 用户创建时间升序(不写) 降序descending responses: 200: description: """ page = request.args.get('page', 1, type=int) per_page = min( request.args.get('per_page', current_app.config['USERS_PER_PAGE'], type=int), 100) username = request.args.get('username') name = request.args.get('name') department_id = request.args.get('department_id') member_since = request.args.get('member_since') query = User.query if username and name: query = query.filter(User.username.like("%" + username + "%"),\ User.name.like("%" + name + "%")) elif not username and name: query = query.filter(User.name.like("%" + name + "%")) elif username and not name: query = query.filter(User.username.like("%" + username + "%")) if department_id: query = query.filter(User.department_id == department_id) if member_since == 'descending': query = query.order_by(User.member_since.desc()) data = User.to_collection_dict(query, page, per_page, \ 'api.get_users', username=username, name=name, \ department_id=department_id, member_since=member_since) return ResMsg(data=data).data