Esempio n. 1
0
def route_register_user():
    uid = request.headers.get("uid", None)
    phone = request.form.get("phone", None)
    sms_code = request.form.get("sms_code", None)
    sms_token = request.form.get("sms_token", None)

    proof = verify_sms_token(sms_token, phone, sms_code)
    if not proof:
        abort(401)

    if not phone:
        raise ValueError("phone is required value to create an user.")

    user = User.objects(uid=uid).first()

    if not user:
        user = User(uid=uid,
                    phone=phone,
                    status=User.Status.OPENED,
                    available=False,
                    last_login_at=pendulum.now().int_timestamp)
        user.save()
        alarm = Alarm(owner=user, records=[])
        alarm.save()

    response = encode(user.to_mongo())
    return Response(response, mimetype="application/json")
Esempio n. 2
0
def list_alarms():
    uid = request.headers.get("uid", None)

    user = User.objects.get_or_404(uid=uid)

    alarm = Alarm.objects(owner=user).first()
    if not alarm:
        alarm = Alarm(owner=user, records=[]).save()

    records = alarm.records

    result = []
    for push in records:
        try:
            push_dict: dict = push.as_dict()
            result.append(push_dict)
        except mongoengine.DoesNotExist:
            nickname = user.nickname
            user_id = str(user.id)
            not_found_user_id = push.user_id
            message = "Not found a user({not_found_user_id}) in alarm of {nickname}({user_id}) ".format(
                not_found_user_id=not_found_user_id,
                nickname=nickname,
                user_id=user_id)
            app.logger.error(message)

    return Response(json.dumps(result), mimetype='application/json')
Esempio n. 3
0
def route_unregister_user(user_id: str):
    user = User.objects.get_or_404(id=user_id)
    user.identify(request)

    if user.available:
        abort(500)
    if user.status != User.Status.PENDING:
        abort(500)
    if user.user_images:
        abort(500)

    Alarm.objects(owner=user).delete()
    user.delete()

    return Response("", mimetype="application/json")
Esempio n. 4
0
def route_create_thumb_up(post_id, comment_id):
    uid = request.headers.get("uid", None)
    if not uid:
        abort(401)

    user = User.objects.get_or_404(uid=uid)
    post = Post.objects.get_or_404(id=post_id)
    comment = next(
        (comment
         for comment in post.comments if str(comment.id) == comment_id), None)

    if not comment:
        abort(404)

    comment.update(add_to_set__thumb_up_user_ids=user.id,
                   pull__thumb_down_user_ids=user.id)
    comment = Comment.objects.get_or_404(id=comment_id)

    if user.id == post.author.id:
        user_from = user
        user_to = User.get(id=comment.user_id)

        alarm = Alarm.create_alarm(
            user_from=user_from,
            user_to=user_to,
            event=Alarm.Event.COMMENT_THUMB_UP,
            post=post,
            comment=comment,
            message="{nickname} 님이 당신의 댓글을 좋아합니다.".format(
                nickname=user_from.nickname))
        alarm_record = alarm.records[-1]
        data = alarm_record.as_dict()
        message_service.push(data, user_to)

    return Response("", mimetype="application/json")
Esempio n. 5
0
 def getAlarm(self, id, user):
     alarm = None
     try:
         alarm = Alarm.get_by_id(int(id))
         if alarm.user.id <> user.id:
             alarm = None
     except:
         alarm = None
     return alarm
Esempio n. 6
0
 def getAlarm(self, id, user):
     alarm = None
     try:
         alarm = Alarm.get_by_id(int(id))
         if alarm.user.id <> user.id:
             alarm = None
     except:
         alarm = None
     return alarm
Esempio n. 7
0
 def getAlarmCount(self, filter_dict, user):
     alarm_list = Alarm.all()        
     
     if filter_dict:
         for filter_key in filter_dict.keys():
             alarm_list = alarm_list.filter(filter_key, filter_dict[filter_key])
     
     if user:
         alarm_list = alarm_list.filter('user', user)
        
     return alarm_list.count()
Esempio n. 8
0
 def checkAlarmNameExist(self, name, id, user):
     alarm_list = Alarm.all().filter('name', name).filter('user', user)
     if alarm_list.count() == 0:
         return False
     elif alarm_list.count() == 1:
         if id and alarm_list[0].id == id:
             return False
         else:
             return True
     else:
         return True
Esempio n. 9
0
 def checkAlarmNameExist(self, name, id, user):
     alarm_list = Alarm.all().filter('name', name).filter('user', user)
     if alarm_list.count() == 0:
         return False
     elif alarm_list.count() == 1:
         if id and alarm_list[0].id == id:
             return False
         else:
             return True
     else:
         return True    
Esempio n. 10
0
 def post(self):
     params = request.json['alarm']
     alarm = Alarm(name=params['name'], description=params['description'], life_second=params['life_second'],alarm_type=AlarmType.query.get(params['alarm_type_id']))
     db.session.add(alarm)
     db.session.commit()
     for condition in request.json['conditions']:
         print(condition)
         output = AlarmOutput(channel_output=ChannelOutput.query.get(condition['channel_output_id']), condition=Condition.query.get(condition['condition_id']), value=condition['value'], alarm=alarm)
         db.session.add(output)
         db.session.commit()
     return True
Esempio n. 11
0
    def getAlarmCount(self, filter_dict, user):
        alarm_list = Alarm.all()

        if filter_dict:
            for filter_key in filter_dict.keys():
                alarm_list = alarm_list.filter(filter_key,
                                               filter_dict[filter_key])

        if user:
            alarm_list = alarm_list.filter('user', user)

        return alarm_list.count()
Esempio n. 12
0
def route_push_poke(user_id):
    uid = request.headers.get("uid", None)
    user_from = User.get(uid=uid)
    user_to = User.get(id=user_id)

    alarm = Alarm.create_alarm(
        event=Alarm.Event.POKE,
        user_from=user_from,
        user_to=user_to,
        message="{nickname} 님이 당신을 찔렀습니다.".format(nickname=user_from.nickname)
    )
    alarm_record = alarm.records[-1]
    data: dict = alarm_record.as_dict()
    message_service.push(data, user_to)

    return Response("", mimetype="application/json")
Esempio n. 13
0
def route_update_response_of_request(request_id: str, result: int):
    """Updates a received like request. ACCEPT: 1 DECLINE: 0 """

    uid = request.headers.get("uid", None)
    me = User.objects.get_or_404(uid=uid)

    _request = Request.objects.get_or_404(id=request_id)

    if _request.user_to.id != me.id:
        abort(400)

    # update request table.
    _request.response = result
    _request.responded_at = pendulum.now().int_timestamp
    _request.save()
    _request.reload()

    if int(result) == 1:
        _request.user_to.remove_user_from_recommendation(_request.user_from)

        # create chat room
        conversation = Conversation(
            title=None,
            participants=[_request.user_from, _request.user_to],
            references=[_request.user_from, _request.user_to],
            created_at=pendulum.now().int_timestamp)
        conversation.save()
        conversation.reload()

        # alarm by push below
        user_alarm_from = _request.user_to
        user_alarm_to = _request.user_from

        alarm = Alarm.create_alarm(user_from=user_alarm_from,
                                   user_to=user_alarm_to,
                                   event=Alarm.Event.MATCHED,
                                   request=_request,
                                   conversation=conversation,
                                   message="{nickname} 님과 연결 되었습니다.".format(
                                       nickname=_request.user_to.nickname))
        alarm_record = alarm.records[-1]
        data = alarm_record.as_dict()
        message_service.push(data, user_alarm_to)

    response = encode(Request.get(id=_request.id))
    return Response(response, mimetype="application/json")
Esempio n. 14
0
    def getAlarmList(self, filter_dict, orderby, pagesize, pagecount, user):
        alarm_list = Alarm.all()

        if filter_dict:
            for filter_key in filter_dict.keys():
                alarm_list = alarm_list.filter(filter_key,
                                               filter_dict[filter_key])

        if user:
            alarm_list = alarm_list.filter('user', user)

        total_records = alarm_list.count()

        if orderby:
            alarm_list = alarm_list.order(orderby)
        '''pagesize = 0 mean all records'''
        if pagesize > 0:
            alarm_list = alarm_list.fetch(pagesize, pagesize * (pagecount - 1))

        return alarm_list, total_records
Esempio n. 15
0
 def getAlarmList(self, filter_dict, orderby, pagesize, pagecount, user):
     alarm_list = Alarm.all()        
     
     if filter_dict:
         for filter_key in filter_dict.keys():
             alarm_list = alarm_list.filter(filter_key, filter_dict[filter_key])
     
     if user:
         alarm_list = alarm_list.filter('user', user)
         
     total_records = alarm_list.count()
     
     if orderby:
         alarm_list = alarm_list.order(orderby)
     
     '''pagesize = 0 mean all records'''
     if pagesize > 0:
         alarm_list = alarm_list.fetch(pagesize, pagesize * (pagecount-1))
        
     return alarm_list, total_records
Esempio n. 16
0
def route_create_comment(post_id: str):
    uid = request.headers.get("uid", None)
    if not uid:
        abort(401)

    # if exists, create a comment as a sub comment
    comment_id = request.form.get("comment_id", None)  # parent_comment_id
    comment = request.form.get("comment", "")

    post = Post.objects.get_or_404(id=post_id)
    user = User.objects.get_or_404(uid=uid)

    comment_to_create = Comment(
        post_id=post_id,
        user_id=user.id,
        comment=comment,
        comments=[],  # child comments
        created_at=pendulum.now().int_timestamp,
        is_deleted=False).save()

    post.add_comment(comment_to_create, parent_id=comment_id)

    alarm = Alarm.create_alarm(
        user_from=user,
        user_to=post.author,
        event=Alarm.Event.COMMENT,
        post=post,
        comment=comment_to_create,
        message="{nickname} 님이 당신의 게시물에 댓글을 남겼습니다.".format(
            nickname=user.nickname))

    alarm_record = alarm.records[-1]
    data = alarm_record.as_dict()
    message_service.push(data, post.author)

    comment = comment_to_create.to_mongo()
    comment["commenter"] = User.get(id=user.id).to_mongo()

    response = encode(comment)
    return Response(response, mimetype="application/json")
Esempio n. 17
0
def route_update_star_rating(user_id: str, score: int):
    """Endpoint for getting users."""
    uid = request.headers.get("uid", None)

    user_from = User.get(uid=uid)
    user_to = User.get(id=user_id)

    is_already_rated = StarRating.objects(user_from=user_from, user_to=user_to).first()

    if not is_already_rated:
        StarRating(
            user_from=user_from,
            user_to=user_to,
            rated_at=pendulum.now().int_timestamp,
            score=score
        ).save()

        if score > 3:
            alarm = Alarm.create_alarm(
                user_from=user_from,
                user_to=user_to,
                event=Alarm.Event.STAR_RATING,
                message="{nickname} 님이 당신을 높게 평가 하였습니다.".format(nickname=user_from.nickname))
            alarm_record = alarm.records[-1]
            data = alarm_record.as_dict()
            message_service.push(data, user_to)

        star_ratings = StarRating.objects(user_to=user_to).all()

        star_rating_sum = 0
        for rating in star_ratings:
            star_rating_sum += rating.score
        star_rating_avg = star_rating_sum / len(star_ratings)

        user_to.update(star_rating_avg=star_rating_avg)

    return Response("", mimetype="application/json")
Esempio n. 18
0
def route_create_favorite(post_id: str):
    uid = request.headers.get("uid", None)
    if not uid:
        abort(401)

    user = User.objects.get_or_404(uid=uid)
    post = Post.objects.get_or_404(id=post_id)
    post.update(add_to_set__favorite_user_ids=user.id)

    user_from = user
    user_to = post.author

    alarm = Alarm.create_alarm(user_from=user_from,
                               user_to=user_to,
                               event=Alarm.Event.POST_FAVORITE,
                               post=post,
                               message="{nickname} 님이 당신의 게시물을 좋아합니다.".format(
                                   nickname=user_from.nickname))

    alarm_record: AlarmRecord = alarm.records[-1]
    data: dict = alarm_record.as_dict()
    message_service.push(data, user_to)

    return Response("", mimetype="application/json")
Esempio n. 19
0
def route_create_request(user_id: str, r_type: int):
    """Endpoint to request like."""

    uid = request.headers.get("uid", None)  # already verified uid.
    user = User.objects.get_or_404(uid=uid)

    user_from = user  # me
    user_to = User.objects.get_or_404(id=user_id)  # target

    # checks if there is a one I have already sent
    request_i_sent = Request.objects(user_to=user_to,
                                     user_from=user_from).first()

    if request_i_sent:
        raise ValueError("a duplicate request already exists.")

    # checks if there is a one I have already received.
    request_i_received = Request.objects(user_to=user_from,
                                         user_from=user_to).first()

    if request_i_received:
        if request_i_received.response is None:
            return route_update_response_of_request(request_i_received.id, 1)
        else:
            raise ValueError("a duplicate request already exists.")

    is_available_for_free = user_from.is_available_for_free_pass_token()
    amount_remaining = user_from.get_current_amount_of_point()

    if not is_available_for_free and amount_remaining <= 0:
        raise Exception("Unavailable for the request.")

    _request = Request(user_from=user_from,
                       user_to=user_to,
                       request_type_id=r_type,
                       requested_at=pendulum.now().int_timestamp,
                       response=None,
                       responded_at=None)
    _request.save()
    _request.reload()

    # if the target exists in recommendation, remove them.
    user_from.remove_user_from_recommendation(user_to)

    if is_available_for_free:
        user_from.consume_free_pass_token()
    else:
        user_from.consume(5)

    alarm = Alarm.create_alarm(
        user_from=user_from,
        user_to=user_to,
        event=Alarm.Event.REQUEST,
        request=_request,
        message="{nickname} 님이 당신에게 친구 신청을 보냈습니다.".format(
            nickname=user_from.nickname))
    alarm_record = alarm.records[-1]
    data = alarm_record.as_dict()
    message_service.push(data, user_to)

    response = encode(Request.get(id=_request.id))
    return Response(response, mimetype="application/json")
Esempio n. 20
0
    def addAlarm(self, name, account, begindate, enddate, cycletype,
                 cyclevalue, isautogenmoneyio, moneyiousertype, money,
                 currency, description, user):
        alarm = Alarm(name=name)
        alarm.account = account
        alarm.begindate = begindate
        alarm.enddate = enddate
        alarm.cycletype = cycletype
        alarm.cyclevalue = cyclevalue
        alarm.isautogenmoneyio = isautogenmoneyio
        alarm.moneyiousertype = moneyiousertype
        alarm.money = money
        alarm.currency = currency
        alarm.description = description
        if user:
            alarm.user = user
        alarm.put()

        MoneyService().createMoneyIOTemplate(alarm)
Esempio n. 21
0
 def addAlarm(self, name, account, begindate, enddate, cycletype, cyclevalue, isautogenmoneyio, moneyiousertype, money, currency, description, user):
     alarm = Alarm(name=name)
     alarm.account = account
     alarm.begindate = begindate
     alarm.enddate = enddate
     alarm.cycletype = cycletype
     alarm.cyclevalue = cyclevalue
     alarm.isautogenmoneyio = isautogenmoneyio
     alarm.moneyiousertype = moneyiousertype
     alarm.money = money
     alarm.currency = currency
     alarm.description = description
     if user:
         alarm.user = user        
     alarm.put()
     
     MoneyService().createMoneyIOTemplate(alarm)