def hello(data): """hello world""" with get_session() as s: s.add(HelloLog(name=data["name"])) s.commit() return succeed()
def logout(): # 更新 token,即让所有的终端下线 session.clear() s = g.mysql_session user = g.user user.reset_token(s) return succeed(msg="注销成功")
def user_info(): s = g.mysql_session user = g.user response = dict( nickname=user.nickname, email=user.email, is_admin=1 if user.admin else 0, ) return succeed(data=response)
def get_home_checklists(): """ 获取首页的清单列表 :return: """ s = g.mysql_session raw_scene_id = KvConfig.get_value_of_key( s, KvConfig.KEY_HOME_CHECKLIST_SCENE_ID) checklists_res = [] if raw_scene_id is None: return succeed(data=checklists_res) checklists = Checklist.get_list_by_scene(s, int(raw_scene_id)) checklist_ids = [x.id for x in checklists] # 检索自己是否打卡的相关信息 my_reviews_id_map = {} checklist_count_map = {} user = None if g.user: user = g.user my_reviews = ChecklistReview.get_today_list_of_user(s, user.id) my_reviews_id_map = {x.checklist_id: x for x in my_reviews} checklist_count_map = ChecklistReview.get_reviews_count_of_n_days_before( s, user.id, checklist_ids) for checklist in checklists: single_checklist_info = dict( id=checklist.id, description=checklist.description, checked_count=checklist_count_map.get(checklist.id, 0), checked=0, ) if my_reviews_id_map.get(checklist.id): single_checklist_info["checked"] = 1 review = my_reviews_id_map.get(checklist.id) last_review = dict(description=review.detail, ) last_review["author_nickname"] = user.nickname single_checklist_info["last_review"] = last_review checklists_res.append(single_checklist_info) return succeed(data=checklists_res)
def register(json_dict): email = json_dict["email"] password = json_dict["password"] with get_session() as s: user = User.get_by_email(s, email) if user: return failed(msg="用户已经存在") user = User.register(s, email, email, password) return succeed(msg="注册成功,请认证")
def get_all_of(): s = g.mysql_session user = g.user invitation_codes = UserInvitation.get_all_code_of_user(s, user.id) res = [] for invitation_code in invitation_codes: res.append(dict( code=invitation_code.code, is_used=(1 if invitation_code.is_used else 0), )) return succeed(data=res)
def add(): s = g.mysql_session user = g.user user_invitation_count = UserInvitation.count_of_user(s, user.id) if user_invitation_count >= 10: return failed(code=402, msg="邀请码个数已超上限") user_invitation_code = UserInvitation.add(s, user.id) return succeed(msg="已成功生成", data=dict( code=user_invitation_code.code, is_used=0, ))
def get_tabs_of_home(): with get_session() as s: tabs = Tab.get_by_location(s, Tab.LOCATION_HOME) res = [] for tab in tabs: res.append( dict( id=tab.id, display_name=tab.display_name, slug=tab.slug, )) return succeed(data=res)
def star(): json_dict = g.json_dict review_id = json_dict["review_id"] s = g.mysql_session user = g.user review = ChecklistReview.get_by_id(s, review_id) is_add_success = ChecklistReviewStar.add_star(s, user.id, review.id) if is_add_success: review = ChecklistReview.add_star_count(s, review.id, 1) return succeed(data=dict( review_id=review_id, star_count=review.star_count, has_stared=1, ))
def kindle(): sender = request.form["sender"] subject = request.form["subject"] recipient = request.form["recipient"] attachment = request.files["attachment-1"] logging.info("sender: {}, recipient: {}, subject: {}, files: {}".format( sender, recipient, subject, attachment)) with get_session() as s: item = Kindle(sender=sender, content=attachment.read()) s.add(item) s.commit() return succeed()
def login(json_dict): email = json_dict["email"] password = json_dict["password"] with get_session() as s: user = User.get_by_email(s, email) if not user: return failed(msg="邮箱或密码不对") user = User.login(s, email, password) if not user: return failed(msg="邮箱或密码不对") return succeed(msg="登录成功", data={"token": user.token})
def get_motto(): data = dict( details="今天可以做点什么有意义的事情?", source="见周边", ) with get_session() as s: motto_kv = KvConfig.get_value_of_key(session=s, key=KvConfig.KEY_MOTTO_ID) if motto_kv is None: motto = Motto.get_last(session=s) else: motto = Motto.get_by_id(s, int(motto_kv.value)) if motto: data["details"] = motto.details data["source"] = motto.source return succeed(data=data)
def login(): json_dict = g.json_dict email = json_dict["email"] password = json_dict["password"] with get_session() as s: user = User.get_by_email(s, email) if not user: return failed(msg="邮箱或密码不对=_=") user = User.login(s, email, password) if not user: return failed(msg="邮箱或密码不对。。") session["token"] = user.token return succeed(msg="登录成功", data={"token": user.token})
def get_all(): mysql_session = g.mysql_session page_no = request.args.get("page", 1) page_size = request.args.get("size", 10) page_size = min(page_size, 100) offset = (page_no - 1) * page_size users = User.get_list(mysql_session, offset=offset, limit=page_size) data = [] for user in users: data.append( dict( id=user.id, nickname=user.nickname, email=user.email, is_admin=(1 if user.admin else 0), )) return succeed(data=data)
def register(): json_dict = g.json_dict json_dict = signup_schema.load(json_dict) email = json_dict["email"] nickname = json_dict["nickname"] password = json_dict["password"] invitation_code = json_dict["invitation_code"] with get_session() as s: invitation = UserInvitation.get_by_code(s, invitation_code) if invitation is None or invitation.is_used: return failed(msg="邀请码无效") user = User.register(s, nickname, email, password) # 邀请码置位 invitation.used_by_user(user.id) return succeed(msg="注册成功")
def add_review(): json_dict = g.json_dict s = g.mysql_session user = g.user checklist = Checklist.get_by_id(s, json_dict["checklist_id"]) is_new, review = ChecklistReview.add_or_update(s, user.id, checklist.id, json_dict.get("mood", "打卡")) s.commit() if is_new: # 下面的更新存在并发问题 checklist.checked_count += 1 checklist.last_review_id = review.id return succeed(data=dict( checklist=dict( id=checklist.id, checked_count=checklist.checked_count, ), is_new=(1 if is_new else 0), review_id=review.id, mood=review.detail, ))
def fetch_all(): """ 根据传入的 last_review_id 进行抽取,固定每次抽取 fetch_size 个 :return: """ last_id = request.args.get("last_review_id", REVIEW_ID_LIMITATION) fetch_size = 10 s = g.mysql_session reviews = ChecklistReview.get_reviews_ref_last_review_id( s, last_id, fetch_size) has_more_reviews = fetch_size == len(reviews) # 发布阅评的用户信息 user_ids = [x.user_id for x in reviews] users = User.get_by_id_list(s, user_ids) users_id_map = {x.id: x for x in users} # 每个阅评对应的检查项 checklist_ids = [x.checklist_id for x in reviews] checklists = Checklist.get_by_id_list(s, checklist_ids) checklists_id_map = {x.id: x for x in checklists} # 点赞 review_star_map = {} if g.user: review_ids = [x.id for x in reviews] review_stars = ChecklistReviewStar.get_reviews_star_of_user( s, g.user.id, review_ids) review_star_map = {x.review_id: x for x in review_stars} reviews_json = [] for review in reviews: review_json = dict( review_id=review.id, review_mood=review.detail, star_count=review.star_count, created_at=review.created_at.strftime("%Y-%m-%d %H:%M:%S"), has_stared=0, ) # 组装用户信息,如果不存在用户信息,说明数据不完整,不做记录 review_author = users_id_map.get(review.user_id) if review_author is None: continue review_json["author"] = review_author.get_base_info() # 组装检查项信息 checklist = checklists_id_map.get(review.checklist_id) if checklist is None: continue review_json["checklist"] = dict( id=checklist.id, description=checklist.description, ) # 拼点赞信息 review_star = review_star_map.get(review.id) if review_star: review_json["has_stared"] = 1 reviews_json.append(review_json) last_review_id = reviews[-1].id if reviews else -1 return succeed(data=dict( reviews=reviews_json, last_review_id=last_review_id, has_more_reviews=(1 if has_more_reviews else 0), ))