Beispiel #1
0
def generate_signup_matches():
    '''
    TODO: 나중에 악용하는 넘 있으면 한 번만 호출 가능하도록 바꾸자 ^^ 2020-09-05
    '''
    gen_login_matches(g.user_session.user, Session(), 'gen_sy_query',
                      Match.TYPE_SOYEON)
    gen_login_matches(g.user_session.user, Session(), 'gen_preference_query',
                      Match.TYPE_PREFER)
    return {'okay': True}, Status.HTTP_200_OK
Beispiel #2
0
def get_type_group(type_group_id):
    try:
        type_group = Session().query(TypeGroup).filter(
            (TypeGroup.id == type_group_id)).one()
    except NoResultFound:
        raise ClientError(f'No Type group Found id #{type_group_id}',
                          status_code=Status.HTTP_404_NOT_FOUND)

    return {'type_group': type_group.json()}, Status.HTTP_200_OK
Beispiel #3
0
def get_picture_by_id(picture_id):
    try:
        picture = Session().query(Picture).filter_by(id=picture_id).one()
    except:
        raise ClientError(f'picture id #{picture_id} not found',
                          Status.HTTP_404_NOT_FOUND)
    if picture.user_id != g.user_session.user.id:
        raise ClientError('not your picture')

    return picture.json(), Status.HTTP_200_OK
Beispiel #4
0
def confirm_registration(user_id):
    try:
        user = Session().query(User).filter((User.id == user_id)).one()
    except NoResultFound:
        raise ClientError(f'user #{user_id} not found',
                          Status.HTTP_404_NOT_FOUND)
    user.registration_confirmed = True
    user.registration_confirmed_at = datetime.now()
    Session().commit()
    return {'okay': True}, Status.HTTP_200_OK
Beispiel #5
0
def redeem(code):
    try:
        coupon = Session().query(Coupon).filter((Coupon.code == code)).one()
    except NoResultFound:
        raise ClientError('not found', Status.HTTP_404_NOT_FOUND)
    if coupon.user_id is not None:
        if coupon.user_id != g.user_session.user.id:
            raise ClientError('not yours', Status.HTTP_470_NOT_YOURS)
    coupon.redeem(g.user_session.user.id)
    Session().commit()
    return {'okay': True, 'hp': coupon.hp, 'mp': coupon.mp}, Status.HTTP_200_OK
Beispiel #6
0
def delete_picture_by_id(picture_id):
    try:
        picture = Session().query(Picture).filter_by(id=picture_id).one()
    except:
        raise ClientError(f'picture id #{picture_id} not found',
                          Status.HTTP_404_NOT_FOUND)
    if picture.user_id != g.user_session.user.id:
        raise ClientError('not your picture')
    Session().delete(picture)
    Session().commit()
    return {'okay': True}, Status.HTTP_200_OK
Beispiel #7
0
def open_match():
    try:
        match = Session().query(Match).filter(
            (Match.to_user_id == g.user_session.user.id)
            & (Match.id == request.json.get('match_id'))).one()
    except:
        raise ClientError('match not found or not your match',
                          status_code=Status.HTTP_404_NOT_FOUND)
    match.opened = True
    Session().commit()
    return {'okay': True}, Status.HTTP_200_OK
Beispiel #8
0
 def manner_point(cls, user_id, mp):
     '''
     mp 는 음수일 수 있습니다. 음수라면 mp 가 감소합니다.
     '''
     from libs.database.engine import Session, afr
     tx = afr(UserPointTx(user_id=user_id, mp=mp))
     point = Session().query(UserPoint).filter(
         (UserPoint.user_id == user_id)).with_for_update().one()
     point.mp += mp
     Session().flush()
     return point
Beispiel #9
0
 def heart_point(cls, user_id, hp):
     '''
     hp 는 음수일 수 있습니다. 음수라면 hp 가 감소합니다.
     '''
     from libs.database.engine import Session, afr
     tx = afr(UserPointTx(user_id=user_id, hp=hp))
     point = Session().query(UserPoint).filter(
         (UserPoint.user_id == user_id)).with_for_update().one()
     point.hp += hp
     Session().flush()
     return point
Beispiel #10
0
def get_or_create_admin_session(admin):
    user_session = Session().query(UserSession).filter(
        (UserSession.admin == True)
        & (UserSession.expiry >= datetime.now())
        & (UserSession.user_id == admin.user_id)).first()

    if user_session is None:
        user_session = UserSession(admin.user, admin=True)
        Session().add(user_session)
        Session().flush()

    return user_session
    def on_create(self):
        question = question_helper.must_one(Session().query(Question).filter(
            (Question.id == request.json.get('question_id'))))

        answer = answer_helper.must_one(Session().query(Answer).filter(
            (Answer.id == request.json.get('answer_id'))))

        if answer.question_id != question.id:
            raise ClientError('Irrelevant q & a')

        self.result['question'] = question
        self.result['answer'] = answer
Beispiel #12
0
def generate_random_matches():
    user = Session().query(User).filter(
        (User.sex != g.user_session.user.sex)
        & (User.id.notin_(
            Match.matched_user_ids(g.user_session.user.id, Session())))
    ).order_by(func.random()).limit(1).one()
    match = afr(
        Match(from_user_id=user.id,
              to_user_id=g.user_session.user.id,
              type_=Match.TYPE_RANDOM))
    Session().commit()
    return {'match': match.json()}, Status.HTTP_200_OK
Beispiel #13
0
def get_match_by_id(match_id):
    '''
    id 로 매치를 가져옵니다.
    '''
    try:
        match = Session().query(Match).filter((Match.id == match_id)).one()
    except:
        raise ClientError(f'No Match Found ${match_id}',
                          Status.HTTP_404_NOT_FOUND)
    if match.to_user_id != g.user_session.user.id:
        raise ClientError('Not Your Match', Status.HTTP_470_NOT_YOURS)

    return {'match': match.json()}, Status.HTTP_200_OK
Beispiel #14
0
def stay():
    '''
    회원탈퇴 하시려구요? 가지마세요
    100 포인트 드립니다.
    '''
    stay = Session().query(Stay).filter(
        (Stay.user_id == g.user_session.user.id)).one_or_none()
    if stay:
        raise ClientError('duplicate')
    stay = Stay(user_id=g.user_session.user.id)
    UserPoint.heart_point(g.user_session.user.id, 100)
    Session().add(stay)
    Session().commit()
    return {'okay': True}, Status.HTTP_200_OK
Beispiel #15
0
def get_unanswered_questions():
    '''
    대답 안한 질문 목록을 리턴합니다.
    '''
    user_answer = Session().query(UserAnswer).filter(
        (UserAnswer.user_id == g.user_session.user.id)).all()

    return {
        'questions': [
            q.json() for q in Session().query(Question).filter((
                Question.id.notin_([ua.question_id for ua in user_answer])
            )).order_by(Question.category_id).all()
        ]
    }, Status.HTTP_200_OK
Beispiel #16
0
def send_double_heart():
    '''
    더블하트를 보냅니다.
    '''
    heart = afr(
        Heart(from_user_id=g.user_session.user.id,
              to_user_id=request.json.get('user_id'),
              message=request.json.get('message'),
              double=True))
    g.pr_result['to_match'].heart_id = heart.id
    g.pr_result['from_match'].heart_id = heart.id
    Session().add(heart)
    Session().commit()
    return {'okay': True, 'heart_id': heart.id}, Status.HTTP_200_OK
Beispiel #17
0
def settle_contract():
    '''
    약관'들'에 동의합니다.
    '''
    term_ids = request.json.get('term_ids')
    terms = Session().query(Term).filter((Term.id.in_(term_ids))).all()
    if len(terms) == 0:
        raise ClientError(f'No Term found #: {term_ids}',
                          Status.HTTP_404_NOT_FOUND)

    for term in terms:
        Session(changed=True).add(
            TermsAgreement(term_id=term.id, user_id=g.user_session.user.id))
    Session().commit()
    return {'okay': True}, Status.HTTP_200_OK
Beispiel #18
0
    def on_login(self):
        user = self.helper.must_one(Session().query(User).filter((User.phone == request.json.get('phone'))))

        if user.password != User.gen_password_hash(request.json.get('password')):
            raise ClientError('invalid password', Status.HTTP_401_UNAUTHORIZED)

        self.result['user'] = user
Beispiel #19
0
def get_mbti_questions():
    '''
    mbti 문제들을 가져옵니다.:
    '''
    return {
        'questions': [x.json() for x in Session().query(MbtiQuestion).all()]
    }, Status.HTTP_200_OK
Beispiel #20
0
def login():
    '''
    새로운 토큰을 발급해 줍니다.
    '''
    user_session = afr(UserSession(g.pr_result.get('user')))
    Session().commit()
    return {'token': user_session.token, 'expiry': DateTimeHelper.full_datetime(user_session.expiry)}, Status.HTTP_200_OK
Beispiel #21
0
 def animal(self):
     if not hasattr(self, '_animal'):
         from libs.database.engine import Session
         from api.models.animal import Animal
         self._animal = Session().query(Animal).filter(
             (Animal.mbti == self.result_mbti)).one()
     return self._animal
Beispiel #22
0
    def validate_sms_auth(cls, key, value, dry=False):
        from libs.database.engine import Session
        try:
            sms_auth = Session().query(SmsAuth).filter(
                (SmsAuth.auth_key == key)
                & (SmsAuth.auth_value == value)
                & (SmsAuth.expiration >= datetime.now())).one()
        except NoResultFound:
            return False
        else:
            if dry:
                return True

            Session().delete(sms_auth)
            Session().flush()
            return True
Beispiel #23
0
def get_life_style_answers():
    answer = Session().query(LifeStyleAnswer).filter(
        (LifeStyleAnswer.user_id == g.user_session.user.id)).first()
    if answer is None:
        raise ClientError('answer not found',
                          status_code=Status.HTTP_404_NOT_FOUND)
    return {'answers': answer.answers}, Status.HTTP_200_OK
Beispiel #24
0
    def get_session(cls, token):
        from libs.database.engine import Session

        try:
            return Session().query(UserSession).filter((UserSession.token == token)).one()
        except NoResultFound:
            return None
Beispiel #25
0
def login_google():
    oauth = Session().query(OauthGoogle).filter(OauthGoogle.party_id == g.info.get('id')).first()
    is_new = True if oauth is None else False

    if is_new:

        # TODO 여기서 블랙리스트 조회에서 에러 리턴.

        user = afr(User(email=g.info.get('email')))
        oauth = afr(OauthGoogle(user, g.info))
        user.oauth_google_id = oauth.id

    user_session = UserSession(oauth.user, third_party_token=request.json.get('token'))
    Session(changed=True).add(user_session)

    return {'okay':True, 'user_id':oauth.user.id, 'token': user_session.token, 'is_new': is_new, 'expiry': DateTimeHelper.full_datetime(user_session.expiry)}, Status.HTTP_200_OK
Beispiel #26
0
def login():
    try:
        admin = Session().query(Admin).filter(
            (Admin.name == request.json.get('username'))
            & (Admin.password == hashlib.sha256(
                request.json.get('password').encode('utf-8')).hexdigest())
        ).one()
    except NoResultFound:
        return {
            'msg': 'wrong account or password',
            'okay': False
        }, Status.HTTP_401_UNAUTHORIZED
    admin_session = get_or_create_admin_session(admin)
    Session().commit()

    return {'token': admin_session.token, 'okay': True}, Status.HTTP_200_OK
Beispiel #27
0
def accept_heart():
    '''
    받은 하트를 승인합니다.
    '''
    g.pr_result.get('heart').accept()
    Session().commit()
    return {'okay': True}, Status.HTTP_200_OK
Beispiel #28
0
def get_answered_questions():
    '''
    대답 했던 질문 목록 리턴
    UserAnswer 를 쿼리하되, Question
    '''
    return {'questions': [ua.question.json() for ua in Session().query(UserAnswer)
        .filter((UserAnswer.user_id == g.user_session.user.id))\
        .join(Question).order_by(Question.category_id).all()]}, Status.HTTP_200_OK
Beispiel #29
0
def register_match_question():
    '''
    question_ids 를 받아서 set
    question_ids 의 길이가 5를 초과하면 raise ClientError
    하나라도 답변 안 한 질문이 있다면 raise ClientError
    '''
    Session().query(MatchQuestion).filter(
        (MatchQuestion.user_id == g.user_session.user.id)).delete()
    Session().flush()
    match_questions = [
        MatchQuestion(user_id=g.user_session.user.id,
                      question_id=a.question_id)
        for a in g.pr_result.get('answers')
    ]
    afr(*match_questions)
    Session().commit()
    return {'okay': True}, Status.HTTP_200_OK
Beispiel #30
0
def get_random_matches():
    matches = Session().query(Match).filter(
        (Match.to_user_id == g.user_session.user.id)
        & (Match.type_ == Match.TYPE_RANDOM)
        & (Match.matched == False)
        & (Match.created_at >=
           (datetime.now() - timedelta(days=2)).date())).all()
    return {'matches': [x.json() for x in matches]}, Status.HTTP_200_OK