def admin_get_score(l_id): """ 指定された講師(l_id)のスコアを返す """ member = Member(redis_client) member_data = member.get_data(l_id) # 講義のスコアデータのキーはscore:講師のメンバーID:ワイルドカード(*)で取得 score_key_list = redis_client.keys("score:" + l_id + "*") result = [] total = 0 count = 0 average = 0 # メンバーが設定したスコアデータを取得 # for enum, score_key in enumerate(score_key_list): for score_key in score_key_list: data = {} # data["lid"] = redis_client.hget(score_key, "lid") data["mid"] = redis_client.hget(score_key, "mid") data["name"] = redis_client.hget(score_key, "name") data["score"] = redis_client.hget(score_key, "score") data["times"] = redis_client.hget(score_key, "times") data["create_at"] = redis_client.hget(score_key, "create_at") total += float(data["score"]) count += 1 result.append(data) if count > 0: average = round(total / count, 2) return render_template('admin/score.html', score=result, lecturer=member_data["name"], average=average)
def member_get_lecturer(): """ 現在の講師の情報を返す 設定されていない、またはメンバーにいない場合はFalse """ # 現在の講師のmidを取得 lecturer_data = redis_client.hgetall("lecturer") if not lecturer_data: return modify_response_http_header(jsonify({"lecturer": False})) else: # print(lecturer_mid) member = Member(redis_client) member_data = member.get_data(lecturer_data["lid"]) if not member_data: return modify_response_http_header(jsonify({"lecturer": False})) lecturer_data["name"] = member_data["name"] # print(member_data) # return jsonify({"lecturer": lecturer_mid}) return modify_response_http_header(jsonify({"lecturer": lecturer_data}))
def set_lecturer_score(times, m_id, l_id): """ 講師の講義についての点を登録 URL : /member/何回目の講義かの数字/採点者のメンバーID/講師のメンバーID/score.json POST: score """ # if not get_scoring_mode(): # return jsonify({"result": False, "reason": "scoring mode is false."}), 400 # 妥当性のチェック member = Member(redis_client) member_data = member.get_data(m_id) if not member_data: return modify_response_http_header( jsonify({"result": False, "reason": "m_id is invalid."})), 400 lecturer_data = redis_client.hgetall("lecturer") if not lecturer_data: return modify_response_http_header( jsonify({"result": False, "reason": "lecturer is invalid."})), 400 if not int(l_id) == int(lecturer_data['lid']): return modify_response_http_header( jsonify({"result": False, "reason": "l_id is invalid."})), 400 if int(l_id) == int(m_id): return modify_response_http_header( jsonify({"result": False, "reason": "l_id and m_id is same value."})), 400 if not int(times) == int(lecturer_data['times']): return modify_response_http_header( jsonify({"result": False, "reason": "times is invalid."})), 400 requested_score = request.form.get('score') if not requested_score: return modify_response_http_header( jsonify({"result": False, "reason": "score is empty."})), 400 if requested_score not in score: return modify_response_http_header( jsonify({"result": False, "reason": "score is invalid."})), 400 # 採点データは、hashで保存 # キーをscore:講師のID:何回目の講義:採点者のID とする # 値をscore: score value とする score_key = "score:%s:%s:%s" % (l_id, times, m_id) # print(score_key) create_at = datetime.now() create_at = create_at.strftime("%Y/%m/%d %H:%M:%S") # redisの使い方としてキーをどういう風にすれば色々な情報を横断して取ってこれるかを考えるが、 # とりあえずキーに設定した値もデータとして登録しておく data = { "score": requested_score, "lid": l_id, "mid": m_id, "name": member_data["name"], "times": times, "create_at": create_at } redis_client.hmset(score_key, data) return modify_response_http_header(jsonify({"result": True}))