def create_space(session_token, name, is_public, avatar, group_id): """ 创建组,并创建一条关联记录 todo check user belong group :param group_id: :param avatar: :param is_public: :param name: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss userk'}}), 200 space = Space(name=name, avatar=avatar, belongGroupId=group_id, belongUserId=user_id, isPublic=is_public) space.createdAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) space.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.add(space) db.session.commit() return jsonify({"objectId": str(space.id)})
def read_news(session_token, news_id, is_mark): """ 标记/已读 :param session_token: :param news_id: :param is_mark: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 news = News.query.filter_by(id=news_id).first() if news is None: return jsonify({"result": {"error_code": 1, "msg": 'miss news'}}), 200 reads = Reads(belongUserId=user_id, newsId=news_id) reads.createdAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) reads.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.add(reads) db.session.commit() if is_mark == 1: create_marks(session_token=session_token, is_public=True, position_id=news.positionId, goods_id=news.goodsId) return jsonify({"result": {"data": {}, "error_code": 0, "msg": "项目修改成功"}})
def query_group(session_token, skip, limit, params): """ 查询有权限对组, TODO 关联查询 :param params: :param limit: :param skip: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss userk'}}), 200 query = db.session.query( Group, User).filter(GroupUser.userId == user_id).filter( GroupUser.groupId == Group.id).filter(Group.belongUserId == User.id).filter( GroupUser.isDisable == 0).filter( GroupUser.isAudit == 1).limit(limit).offset(skip).all() results = [] for group, user in query: results.append({ "objectId": group.id, "name": group.name, "avatar": group.avatar, "desc": group.desc, "belongUserId": group.belongUserId, "belongUserName": user.lastName + user.firstName, "isPublic": group.isPublic, "createdAt": util.get_iso8601_from_dt(group.createdAt), "updatedAt": util.get_iso8601_from_dt(group.updatedAt), }) return jsonify({"results": results})
def update_space(session_token, todo_id, name, is_public, avatar, is_disable): """ 更新一条项目记录 todo check user belong group :param is_disable: :param session_token: :param todo_id: :param name: :param is_public: :param avatar: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 space = Space.query.filter_by(id=todo_id, belongUserId=user_id).first() if space is None: return jsonify({"result": {"error_code": 1, "msg": 'miss space'}}), 200 if name != "": space.name = name if is_public is not None: space.isPublic = is_public if avatar != "": space.avatar = avatar if is_disable is not None: space.isDisable = is_disable space.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.commit() return jsonify({"result": {"data": {}, "error_code": 0, "msg": "空间修改成功"}})
def modify_user_info(session_token="", first_name="", last_name="", email="", password="", avatar="", default_group_id=-1): """ 修改用户信息接口 """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({'code': 1, 'msg': 'miss user'}) if first_name != "": user.firstName = first_name if last_name != "": user.lastName = last_name if email != "": user.email = email if avatar != "": user.avatar = avatar if password != "": user.password = util.get_md5(password) if default_group_id != -1: user.defaultGroupId = default_group_id user.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.commit() return jsonify({"result": {"data": {}, "error_code": 0, "msg": "信息修改成功"}})
def update_notes(session_token, todo_id, note, is_public, is_disable): """ 更新一条项目记录 :param is_disable: :param session_token: :param todo_id: :param is_public: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 obj = Notes.query.filter_by(id=todo_id, belongUserId=user_id).first() if obj is None: return jsonify({"result": {"error_code": 1, "msg": 'miss group'}}), 200 if note != "": obj.note = note if is_public is not None: obj.isPublic = is_public if is_disable is not None: obj.isDisable = is_disable obj.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.commit() return jsonify({"result": {"data": {}, "error_code": 0, "msg": "项目修改成功"}})
def update_group(session_token, todo_id, name, is_public, avatar, desc, is_disable, belong_user_id): """ 更新一条项目记录 :param session_token: :param todo_id: :param name: :param is_public: :param avatar: :param desc: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 group = Group.query.filter_by(id=todo_id, belongUserId=user_id).first() if group is None: return jsonify({"result": {"error_code": 1, "msg": 'miss group'}}), 200 if name != "": group.name = name if is_public is not None: group.isPublic = is_public if avatar != "": group.avatar = avatar if desc != "": group.desc = desc if is_disable is not None: group.isDisable = is_disable if belong_user_id != -1: group.belongUserId = belong_user_id group.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.commit() return jsonify({"result": {"data": {}, "error_code": 0, "msg": "项目修改成功"}})
def create_invite_code(session_token, group_id): """ 创建邀请码 todo 时效性 唯一性 :param session_token: :param group_id: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 group = Group.query.filter_by(id=group_id, belongUserId=user_id).first() if group is None: return jsonify({"result": {"error_code": 1, "msg": 'miss group'}}), 200 group.checkCode = str(random.randint(1000, 9999)) group.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.commit() return jsonify({ "result": { "data": { "checkCode": group.checkCode }, "error_code": 0, "msg": "邀请码创建成功" } })
def update_goods(session_token, todo_id, name, is_public, avatar, desc, is_disable, coordinate): """ 更新一条项目记录 :param session_token: :param todo_id: :param name: :param is_public: :param avatar: :param desc: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 goods = Goods.query.filter_by(id=todo_id).first() if goods is None: return jsonify({"result": {"error_code": 1, "msg": 'miss goods'}}), 200 if name != "": goods.name = name if is_public is not None: goods.isPublic = is_public if desc != "": goods.desc = desc if avatar != "": goods.avatar = avatar if coordinate != "": goods.coordinate = coordinate if is_disable is not None: goods.isDisable = is_disable goods.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.commit() return jsonify({"result": {"data": {}, "error_code": 0, "msg": "项目修改成功"}})
def query_goods(session_token, skip, limit, params): """ 查询有权限对组, TODO 关联查询 :param params: :param limit: :param skip: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 query = db.session.query(Goods, Space, User, Position).filter(Goods.spaceId == Space.id) \ .filter(Goods.belongUserId == User.id) \ .filter(Goods.positionId == Position.id) if params is None: params = {} if "belongGroupId" in params: query = query.filter(Goods.belongGroupId == params["belongGroupId"]) if "spaceId" in params: query = query.filter(Goods.spaceId == params["spaceId"]) if "positionId" in params: query = query.filter(Goods.positionId == params["positionId"]) if "type" in params: query = query.filter(Goods.type == params["type"]) if "objectId" in params: query = query.filter(Goods.id == params["objectId"]) if "isDisable" in params: query = query.filter(Goods.isDisable == params["isDisable"]) else: query = query.filter(Goods.isDisable == 0) # 私密性 query = query.filter( or_(Goods.isPublic == 1, and_(Goods.isPublic == 0, Goods.belongUserId == user_id))) query = query.order_by(desc(Goods.id)).limit(limit).offset(skip).all() results = [] for data, space, user, position in query: results.append({ "objectId": data.id, "name": data.name, "avatar": data.avatar, "coordinate": data.coordinate, "belongUserId": data.belongUserId, "belongUserName": user.lastName + user.firstName, "belongGroupId": data.belongGroupId, "spaceId": data.spaceId, "spaceName": space.name, "positionId": data.positionId, "positionName": position.name, "type": data.type, "isPublic": data.isPublic, "note": get_latest_note_in_goods(data.id), "marksNum": get_marks_num_in_goods(data.id), "newsNum": get_news_num_in_goods(data.id), "createdAt": util.get_iso8601_from_dt(data.createdAt), "updatedAt": util.get_iso8601_from_dt(data.updatedAt), }) return jsonify({"results": results})
def users_me(session_token): """ a.通过sessionToken判断user表是否存在该用户,无则新建有则修改 b.调用莱卡接口鉴权token /auth/user/token/validate :return: jsonify object """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({'code': 1, 'msg': 'miss user'}) return pack_users_me(user)
def create_goods(session_token, name, is_public, avatar, coordinate, position_id, type, internal_id=""): """ 创建组,并创建一条关联记录 :param internal_id: :param type: :param position_id: :param coordinate: :param avatar: :param is_public: :param name: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss userk'}}), 200 position = Position.query.filter_by(id=position_id).first() if position is None: return jsonify({"result": { "error_code": 1, "msg": 'miss position' }}), 200 goods = Goods(name=name, avatar=avatar, coordinate=coordinate, belongUserId=user_id, belongGroupId=position.belongGroupId, isPublic=is_public, spaceId=position.spaceId, positionId=position_id, type=type) goods.createdAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) goods.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.add(goods) db.session.commit() save_news(user, title="", content="", type=1, space_id=goods.spaceId, position_id=goods.positionId, goods_id=goods.id) return jsonify({"objectId": str(goods.id), "__internalId": internal_id})
def query_position(session_token, skip, limit, params): """ 查询有权限对组, :param params: :param limit: :param skip: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 query = db.session.query(Position, User, Space) \ .filter(Position.spaceId == Space.id).filter(Position.belongUserId == User.id) if params is None: params = {} if "belongGroupId" in params: query = query.filter(Position.belongGroupId == params["belongGroupId"]) if "spaceId" in params: query = query.filter(Position.spaceId == params["spaceId"]) if "objectId" in params: query = query.filter(Position.id == params["objectId"]) # 私密性 query = query.filter( or_(Position.isPublic == 1, and_(Position.isPublic == 0, Position.belongUserId == user_id))) query = query.filter( Position.isDisable == 0).limit(limit).offset(skip).all() results = [] for data, user, space in query: results.append({ "objectId": data.id, "name": data.name, "avatar": data.avatar, "coordinate": data.coordinate, "belongUserId": data.belongUserId, "belongGroupId": data.belongGroupId, "spaceId": data.spaceId, "belongUserName": user.lastName, "spaceName": space.name, "goodsNum": get_goods_num_in_position(data.spaceId), "membersNum": get_members_num_in_position(data.spaceId), "isPublic": data.isPublic, "createdAt": util.get_iso8601_from_dt(data.createdAt), "updatedAt": util.get_iso8601_from_dt(data.updatedAt), }) return jsonify({"results": results})
def create_group(session_token, name, is_public, avatar, desc, return_type="jsonify"): """ 创建组,并创建一条关联记录 :param return_type: :param desc: :param avatar: :param is_public: :param name: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss userk'}}), 200 group = Group(name=name, avatar=avatar, desc=desc, belongUserId=user_id, isPublic=is_public) group.createdAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) group.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.add(group) db.session.commit() group_user = GroupUser(userId=user_id, groupId=group.id) group_user.isAudit = 1 group_user.createdAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) group_user.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.add(group_user) db.session.commit() if return_type == "jsonify": return jsonify({"objectId": str(group.id)}) else: return { "result": { "data": { "groupId": group.id }, "error_code": 0, "msg": "项目创建成功" } }
def query_marks(session_token, skip, limit, params): """ 查询有权限对组, TODO 关联查询 :param params: :param limit: :param skip: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 query = db.session.query(Marks, User).filter( Marks.belongUserId == User.id).filter(Marks.isDisable == 0) if params is None: params = {} if "belongGroupId" in params: query = query.filter(Marks.belongGroupId == params["belongGroupId"]) if "spaceId" in params: query = query.filter(Marks.spaceId == params["spaceId"]) if "positionId" in params: query = query.filter(Marks.positionId == params["positionId"]) if "goodsId" in params: query = query.filter(Marks.goodsId == params["goodsId"]) if "objectId" in params: query = query.filter(Marks.id == params["objectId"]) query = query.order_by(desc(Marks.id)).limit(limit).offset(skip).all() results = [] for data, user in query: results.append({ "objectId": data.id, "belongUserId": data.belongUserId, "belongUserName": user.lastName + user.firstName, "avatar": user.avatar, "belongGroupId": data.belongGroupId, "spaceId": data.spaceId, "positionId": data.positionId, "goodsId": data.goodsId, "isPublic": data.isPublic, "createdAt": util.get_iso8601_from_dt(data.createdAt), "updatedAt": util.get_iso8601_from_dt(data.updatedAt), }) return jsonify({"results": results})
def create_marks(session_token, is_public, position_id, goods_id): """ 创建组,并创建一条关联记录 :param position_id: :param goods_id: :param is_public: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss userk'}}), 200 position = Position.query.filter_by(id=position_id).first() if position is None: return jsonify({"result": { "error_code": 1, "msg": 'miss position' }}), 200 marks = Marks.query.filter_by(belongUserId=user_id, goodsId=goods_id).first() if marks is not None: return jsonify({"result": {"error_code": 1, "msg": '已经标注过了呢'}}), 200 marks = Marks(belongUserId=user_id, belongGroupId=user.defaultGroupId, spaceId=position.spaceId, positionId=position_id, goodsId=goods_id, isPublic=is_public) marks.createdAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) marks.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.add(marks) db.session.commit() if goods_id != -1 and goods_id is not None: save_news(user, title="", content="", type=2, space_id=position.spaceId, position_id=position_id, goods_id=goods_id) return jsonify({"objectId": str(marks.id)})
def update_group_user(session_token, todo_id, is_disable, is_audit): user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 group_user = GroupUser.query.filter_by(id=todo_id).first() if group_user is None: return jsonify({"result": { "error_code": 1, "msg": 'miss group_user' }}), 200 if is_disable is not None: group_user.isDisable = is_disable if is_audit is not None: print(is_audit) print(group_user.isAudit) group_user.isAudit = is_audit print(group_user.isAudit) group_user.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.commit() return jsonify({"result": {"data": {}, "error_code": 0, "msg": "项目修改成功"}})
def query_group_user(session_token, skip, limit, params): """ 查询分组用户 :param session_token: :param skip: :param limit: :param params: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss userk'}}), 200 query = db.session.query( User, GroupUser).filter(GroupUser.groupId == params["groupId"]).filter( GroupUser.userId == User.id).filter(GroupUser.isDisable == 0) if "isAudit" in params: query = query.filter(GroupUser.isAudit == params["isAudit"]) query = query.limit(limit).offset(skip).all() results = [] for user, group_user in query: results.append({ "objectId": group_user.id, "name": user.lastName + user.firstName, "avatar": user.avatar, "userId": group_user.userId, "groupId": group_user.groupId, "isAudit": group_user.isAudit, "createdAt": util.get_iso8601_from_dt(group_user.createdAt), "updatedAt": util.get_iso8601_from_dt(group_user.updatedAt), }) return jsonify({"results": results})
def join_group(session_token, check_code): """ 加入组 :param session_token: :param check_code: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 group = Group.query.filter_by(checkCode=check_code).first() if group is None: return jsonify({"result": {"error_code": 1, "msg": 'miss group'}}), 200 group_user = GroupUser.query.filter_by( userId=user_id, groupId=group.id).filter(GroupUser.isDisable == 0).first() if group_user: return jsonify( {"result": { "error_code": 1, "msg": 'you have been joined' }}), 200 else: group_user = GroupUser(userId=user_id, groupId=group.id) group_user.createdAt = util.get_mysql_datetime_from_iso( util.get_iso8601()) group_user.updatedAt = util.get_mysql_datetime_from_iso( util.get_iso8601()) group_user.isAudit = 0 db.session.add(group_user) group.checkCode = "" db.session.commit() return jsonify( {"result": { "data": {}, "error_code": 0, "msg": "项目加入成功" }})
def create_notes(session_token, note, is_public, goods_id): """ 创建组,并创建一条关联记录 :param goods_id: :param note: :param is_public: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss userk'}}), 200 goods = Goods.query.filter_by(id=goods_id).first() if goods is None: return jsonify({"result": { "error_code": 1, "msg": 'miss position' }}), 200 notes = Notes(note=note, belongUserId=user_id, belongGroupId=user.defaultGroupId, spaceId=goods.spaceId, positionId=goods.positionId, goodsId=goods_id, isPublic=is_public) notes.createdAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) notes.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.add(notes) db.session.commit() save_news(user, title="", content=note, type=3, space_id=goods.spaceId, position_id=goods.positionId, goods_id=goods_id) return jsonify({"objectId": str(notes.id)})
def create_position(session_token, name, is_public, avatar, space_id, coordinate): """ 创建组,并创建一条关联记录 :param desc: :param avatar: :param is_public: :param name: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss userk'}}), 200 space = Space.query.filter_by(id=space_id).first() if space is None: return jsonify({"result": {"error_code": 1, "msg": 'miss space'}}), 200 position = Position(name=name, avatar=avatar, coordinate=coordinate, belongUserId=user_id, belongGroupId=space.belongGroupId, isPublic=is_public, spaceId=space_id) position.createdAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) position.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.add(position) db.session.commit() save_news(user, title="", content="", type=4, space_id=position.spaceId, position_id=position.id, goods_id=-1) return jsonify({"objectId": str(position.id)})
def update_position(session_token, todo_id, name, is_public, avatar, coordinate, is_disable): """ 更新一条项目记录 :param is_disable: :param session_token: :param todo_id: :param name: :param is_public: :param avatar: :param coordinate: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 position = Position.query.filter_by(id=todo_id, belongUserId=user_id).first() if position is None: return jsonify({"result": { "error_code": 1, "msg": 'miss position' }}), 200 if name != "": position.name = name if is_public is not None: position.isPublic = is_public if avatar != "": position.avatar = avatar if coordinate != "": position.coordinate = coordinate if is_disable is not None: position.isDisable = is_disable position.updatedAt = util.get_mysql_datetime_from_iso(util.get_iso8601()) db.session.commit() return jsonify({"result": {"data": {}, "error_code": 0, "msg": "项目修改成功"}})
def fix_search(session_token, keyword, belong_group_id): """ 混合查询, :param belong_group_id: :param keyword: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 # 查询空间数据 query = db.session.query(Space, User).filter(Space.belongUserId == User.id).filter( Space.belongGroupId == user.defaultGroupId) \ .filter(Space.isDisable == 0) query = query.filter(Space.belongGroupId == belong_group_id).filter( Space.name.like(f"%{keyword}%")) # 私密性 query = query.filter( or_(Space.isPublic == 1, and_(Space.isPublic == 0, Space.belongUserId == user_id))) query = query.all() space_results = [] for data, user in query: space_results.append({ "objectId": data.id, "name": data.name, "avatar": data.avatar, "belongUserId": data.belongUserId, "belongUserName": user.lastName, "belongGroupId": data.belongGroupId, "positionNum": get_position_num_in_space(data.id), "goodsNum": get_goods_num_in_space(data.id), "membersNum": get_members_num_in_space(data.id), "isPublic": data.isPublic, "createdAt": util.get_iso8601_from_dt(data.createdAt), "updatedAt": util.get_iso8601_from_dt(data.updatedAt), }) # 查询位置数据 query = db.session.query(Position, User, Space) \ .filter(Position.spaceId == Space.id).filter(Position.belongUserId == User.id) query = query.filter(Space.belongGroupId == belong_group_id).filter( Position.name.like(f"%{keyword}%")) # 私密性 query = query.filter( or_(Position.isPublic == 1, and_(Position.isPublic == 0, Position.belongUserId == user_id))) query = query.filter(Position.isDisable == 0).all() position_results = [] for data, user, space in query: position_results.append({ "objectId": data.id, "name": data.name, "avatar": data.avatar, "coordinate": data.coordinate, "belongUserId": data.belongUserId, "belongGroupId": data.belongGroupId, "spaceId": data.spaceId, "belongUserName": user.lastName, "spaceName": space.name, "goodsNum": get_goods_num_in_position(data.spaceId), "membersNum": get_members_num_in_position(data.spaceId), "isPublic": data.isPublic, "createdAt": util.get_iso8601_from_dt(data.createdAt), "updatedAt": util.get_iso8601_from_dt(data.updatedAt), }) query = db.session.query(Goods, Space, User, Position).filter(Goods.spaceId == Space.id) \ .filter(Goods.belongUserId == User.id) \ .filter(Goods.positionId == Position.id) query = query.filter(Space.belongGroupId == belong_group_id).filter( Goods.name.like(f"%{keyword}%")) query = query.filter(Goods.isDisable == 0) # 私密性 query = query.filter( or_(Goods.isPublic == 1, and_(Goods.isPublic == 0, Goods.belongUserId == user_id))) query = query.order_by(desc(Goods.id)).all() goods_results = [] for data, space, user, position in query: goods_results.append({ "objectId": data.id, "name": data.name, "avatar": data.avatar, "coordinate": data.coordinate, "belongUserId": data.belongUserId, "belongUserName": user.lastName + user.firstName, "belongGroupId": data.belongGroupId, "spaceId": data.spaceId, "spaceName": space.name, "positionId": data.positionId, "positionName": position.name, "type": data.type, "isPublic": data.isPublic, "note": get_latest_note_in_goods(data.id), "marksNum": get_marks_num_in_goods(data.id), "newsNum": get_news_num_in_goods(data.id), "createdAt": util.get_iso8601_from_dt(data.createdAt), "updatedAt": util.get_iso8601_from_dt(data.updatedAt), }) return jsonify({ "result": { "data": { "space_results": space_results, "position_results": position_results, "goods_results": goods_results }, "error_code": 0, "msg": "查询成功" } })
def query_news(session_token, skip, limit, params): """ 查询有权限对组, belongGroupId, spaceId, positionId, goodsId, :param params: :param limit: :param skip: :param session_token: :return: """ user_id = util.review_auth_token(APP_SECRET, session_token) user = User.query.filter_by(id=user_id).first() if user is None: return jsonify({"result": {"error_code": 1, "msg": 'miss user'}}), 200 # sub_qry = db.session.query(func.count(Reads.id).label("read_flag")).filter( # Reads.newsId == News.id).filter(Reads.belongUserId == user_id).correlate(News).as_scalar() query = db.session.query(News, User, Space, Position).filter(News.isDisable == 0) \ .filter(News.belongUserId == User.id) \ .filter(News.spaceId == Space.id) \ .filter(News.positionId == Position.id) \ .filter(News.goodsId == Goods.id) \ .filter(Goods.isDisable == 0) \ .filter(not_(exists().where(and_(News.id == Reads.newsId, Reads.belongUserId == user_id)))) if params is None: params = {} if "belongGroupId" in params: query = query.filter(News.belongGroupId == params["belongGroupId"]) if "spaceId" in params: query = query.filter(News.spaceId == params["spaceId"]) if "positionId" in params: query = query.filter(News.positionId == params["positionId"]) if "goodsId" in params: query = query.filter(News.goodsId == params["goodsId"]) if "type" in params: query = query.filter(News.type == params["type"]) if "objectId" in params: query = query.filter(News.id == params["objectId"]) query = query.order_by(desc(News.id)).limit(limit).offset(skip).all() results = [] for data, user, space, position in query: if data.type == 4: content = "# 共{}个物品 #".format( get_goods_num_in_position(data.positionId)) else: content = data.content results.append({ "objectId": data.id, "title": data.title, "content": content, "type": data.type, "avatar": data.avatar, "belongUserId": data.belongGroupId, "belongUserName": user.lastName + user.firstName, "belongGroupId": data.belongGroupId, "spaceId": data.spaceId, "spaceName": space.name, "positionId": data.positionId, "positionName": position.name, "goodsId": data.goodsId, "isPublic": data.isPublic, "createdAt": util.get_iso8601_from_dt(data.createdAt), "updatedAt": util.get_iso8601_from_dt(data.updatedAt), }) return jsonify({"results": results})