示例#1
0
async def submit_reply(event, ctx, user, *args, **kwargs):
    data = event.body
    replier_uid = str(user['_id'])
    rid = 'r' + str(uuid.uuid4())[:13]
    qid = data.qid
    q_m = QuestionModel.get_maybe(qid)
    if q_m == Nothing:
        raise LambdaError(404, 'question not found')
    body = data.body
    if not (0 < len(body) <= 4000):
        raise Exception("Your question is too large!")
    ts = datetime.datetime.now()
    parent_rid = data.get('parent_rid', None)
    child_rids = list()
    is_staff = await has_role('qanda_staff', user['_id'])
    r = Reply(rid=rid,
              qid=qid,
              uid=replier_uid,
              body=body,
              ts=ts,
              parent_rid=parent_rid,
              child_rids=child_rids,
              is_staff=is_staff,
              display_name=gen_display_name(user, data.display_choice))
    r.save()
    update_actions = [
        ReplyIdsByQid.rids.set(
            (ReplyIdsByQid.rids | []).prepend([GenericPointer(ts=ts, id=rid)]))
    ]
    ReplyIdsByQid(qid="global").update(actions=update_actions)
    ReplyIdsByQid(qid=qid).update(actions=update_actions)
    ReplyIdsByUid(uid=replier_uid).update(actions=update_actions)
    await email_notify_new_reply(replier_uid, r, q_m.getValue())
    return {'reply': r.to_python(), 'submitted': True, 'rid': rid}