Exemplo n.º 1
0
def dislike_snap(request, snap_id=None):
    user_id = get_user_id(request.META)
    session = get_session()

    if not user_id :
        session.close()
        result = dict(success=False, message=u'snaps.views.dislike_snap: no user id')
        return HttpResponse(dumps(result))

    snap = session.query(Snap).get(snap_id)
    if not snap :
        session.close()
        result = dict(success=False, message=u'snaps.views.dislike_snap: no snap with snap id {snap_id}'.format(snap_id=snap_id))
        return HttpResponse(dumps(result))

    snap_like = session.query(SnapLike).filter_by(snap_id=snap_id, user_id=user_id).first()
    if not snap_like :
        session.close()
        result = dict(success=True, message=u'snaps.views.dislike_snap: you already dislike this snap')
        return HttpResponse(dumps(result))
    
    try :
        session.delete(snap_like)
        snap.num_of_likes -= 1
        session.merge(snap)
        session.commit()
        session.close()
    except :
        session.rollback()
        session.close()
        result = dict(success=False, message=u'snaps.views.dislike_snap: database error')
        return HttpResponse(dumps(result))
    result = dict(success=True, message=u'snaps.views.dislike_snap: user {user_id} dislike snap {snap_id}'.format(user_id=user_id, snap_id=snap_id))
    return HttpResponse(dumps(result))
Exemplo n.º 2
0
def create_snap_comment(request, snap_id=None):
    request_data = loads(request.raw_post_data)
    user_id = get_user_id(request.META)
    if not request_data :
        result = dict(success=False, message=u'no request data')
        return HttpResponse(dumps(result))
    if not user_id :
        result = dict(success=False, message=u'no user id')
        return HttpResponse(dumps(result))
    else :
        request_data['user_id'] = user_id

    session = get_session() 
    snap = session.query(Snap).get(snap_id)
    if not snap :
        result = dict(success=False, message=u'snaps.views.get_snap_comments: no snap with snap id {snap_id}'.format(snap_id=snap_id))
        return HttpResponse(dumps(result))

    request_data['snap_id'] = snap_id
    remove_keys(request_data, SnapComment)
    new_snap_comment = SnapComment(**request_data)
    
    try :
        session.add(new_snap_comment)
        snap.num_of_comments += 1
        session.merge(snap)
        session.commit()
        session.close()
    except :
        session.rollback()
        result = dict(success=False, message=u'database error')
        return HttpResponse(dumps(result))
    result = dict(success=True, message=u'snap comment created')
    return HttpResponse(dumps(result))
Exemplo n.º 3
0
def post_spot_profile_image(request, spot_id=None):
    request_data = loads(request.POST["data"])
    user_id = get_user_id(request.META)

    if user_id is None:
        result = dict(success=False, message=u"spots.views.post_spot_profile_image: not user id found")
        return HttpResponse(dumps(result))

    request_data["user_id"] = user_id

    if not request_data:
        result = dict(success=False, message=u"spots.views.post_spot_profile_image: no request data")
        return HttpResponse(dumps(result))
    else:
        if not spot_id:
            if "spot_id" not in request_data:
                result = dict(success=False, message=u"spots.views.post_spot_profile_image: no spot id found")
                return HttpResponse(dumps(result))
    filename = None
    for temp_filename in request.FILES:
        filename = temp_filename
    if filename is None:
        result = dict(success=False, message=u"spots.views.post_spot_profile_image: no image attached")
        return HttpResponse(dumps(result))

    # profile image size 가 정해지지 않아서 임시로 300,300 과 100,100을 지정했음
    profile_image_size = (300, 300)
    thumbnail_size = (100, 100)

    upload_image = Image.open(request.FILES[filename])
    profile_image_buff = StringIO.StringIO()
    thumbnail_image_buff = StringIO.StringIO()

    try:
        profile_image.thumbnail_image(profile_image_size, Image.BICUBIC)
        profile_image.save(profile_image, "jpeg")
        profile_image.thumbnail_image(thumbnail_image_buff, Image.BICUBIC)
        profile_image.save(thumbnail_image_buff, "jpeg")
    except:
        result = dict(
            success=False, message=u"spots.views.post_spot_profile_image: error occur while resizing the image"
        )
        return HttpResponse(dumps(result))

    spot_profile_image = SpotProfileImage(
        image=profile_image_buff.getvalue(), thumbnail_image=thumbnail_image_buff.getvalue()
    )
    session = get_session()
    try:
        session.add(spot_profile_image)
        session.commit()
        session.close()
    except:
        session.rollback()
        session.close()

    result = dict(success=True, message=u"spots.views.post_spot_profile_image: uploaded complete")
    return HttpResponse(dumps(result))
Exemplo n.º 4
0
def update_snap(request, snap_id=None):
    request_data = loads(request.raw_post_data)
    if not request_data :
        result = dict(success=False, message=u'snaps.views.update_snap: no request data')
        return HttpResponse(dumps(result))

    user_id = get_user_id(request.META)

    if not user_id :
        result = dict(success=False, message=u'snaps.views.update_snap: no user id found')
        return HttpResponse(dumps(result))

    session = get_session()    

    snap = session.query(Snap).get(snap_id)

    if not snap :
        result = dict(success=False, message=u'snaps.views.update_snap: no snap with snap id {}'.format(snap_id))
        return HttpResponse(dumps(result))

    if snap.user_id != user_id :
        result = dict(success=False, message=u"snaps.views.update_snap: trying to change other user's snap")
        return HttpResponse(dumps(result))

    request_data['user_id'] = user_id
    request_data['snap_id'] = snap_id

    remove_keys(request_data, Snap)

    if 'snaptime' in request_data :
        del request_data['snaptime']
    if 'image_id' in request_data :
        del request_data['image_id']
    if 'lat' in request_data :
        del request_data['lat']
    if 'lng' in request_data :
        del request_data['lng']


    for key, value in request_data.items():
        setattr(snap, key, value)

    try:
        session.merge(snap)
        session.commit()
        session.close()
    except :
        session.rollback()
        session.close()
        result = dict(success=False, message=u'snaps.views.update_snap: failed to update snap')
        return HttpResponse(dumps(result))
    result = dict(success=True, message=u'snaps.views.update_snap: update success')
    return HttpResponse(dumps(result))
Exemplo n.º 5
0
def like_check(request, snap_id=None):
    user_id = get_user_id(request.META)
    if not user_id :
        result = dict(success=False, message=u'snaps.views.like_check: no user id found')
        return HttpResponse(dumps(result))
    session = get_session()
    snap_like = session.query(SnapLike).filter_by(snap_id=snap_id, user_id=user_id).first()
    data = dict()
    if not snap_like :
        data['liked'] = False
    else :
        data['liked'] = True
    result = dict(success=True, message=u'snaps.views.like_check: result of checking if the user likes snap', data=data)
    return HttpResponse(dumps(result))
Exemplo n.º 6
0
def add_spot_users(request, spot_id=None):
    # 이부분 정리 필요함
    user_id = get_user_id(request.META)
    if not user_id:
        request_data = loads(request.raw_post_data)
        if not request_data:
            result = dict(success=False, message=u"spots.views.add_spot_users: no request data")
            return HttpResponse(dumps(result))
        if "user_id" not in request_data:
            result = dict(success=False, message=u"spots.views.add_spot_users: no user id")
            return HttpResponse(dumps(result))
        user_id = request_data["user_id"]
    session = get_session()
    spot = session.query(Spot).get(spot_id)

    if not spot:
        result = dict(success=False, message=u"spots.views.add_spot_users: no matching spot")
        return HttpResponse(dumps(result))

    can_snap = False
    if spot.is_private:
        if "can_snap" in request_data:
            can_snap = request_data["can_snap"]
        else:
            session.close()
            result = dict(
                success=False, message=u"spots.views.add_spot_users: it's a private spot need 'can_snap' info"
            )
            return HttpResponse(dumps(result))
    else:
        can_snap = True
        assoc = SpotUserAssociation(spot_id=spot_id, user_id=user_id, can_snap=can_snap)
    try:
        session.merge(assoc)
        session.commit()
        session.close()
    except:
        session.rollback()
        session.close()

    result = dict(
        success=True,
        message=u"spots.views.add_spot_users: user {user_id} added on spot {spot_id}".format(
            user_id=user_id, spot_id=spot_id
        ),
    )
    return HttpResponse(dumps(result))
Exemplo n.º 7
0
def update_user_profile(request, user_id=None):
    sessions_user_id = get_user_id(request.META)
    if user_id != sessions_user_id :
        result = dict(success=False, message=u'users.views.update_user_profile: you are not this user')
        return HttpResponse(dumps(result))

    request_data = loads(request.raw_post_data)
    if not request_data :
        result = dict(success=False, message=u'users.views.update_user_profile: no request data')
        return HttpResponse(dumps(result))

    remove_keys(request_data, UserInfo)
    session = get_session()
    user_info = session.query(UserInfo).get(user_id)

    phone_number = request_data.get('phone_number', None)
    if phone_number:
        if not phone_number.isdigit() :
            session.close()
            result = dict(success=False, message=u'users.views.update_user_profile: phone_number must be digit')
            return HttpResponse(dumps(result))
    nickname = request_data.get('nickname', None)
    if nickname :
        existing_user_info = session.query(UserInfo).filter(UserInfo.nickname==request_data['nickname']).first()
        if existing_user_info :
            session.close()
            result = dict(success=False, message=u'users.views.update_user_profile: user nickname duplicated')
            return HttpResponse(dumps(result))
            
        else :
            snaps_by_me = session.query(Snap).filter_by(user_id=user_id).all()
            for snap in snaps_by_me :
                snap.user_nickname = nickname
                session.merge(snap)
            try :
                session.commit()
            except :
                session.rollback()
                session.close()
                result = dict(success=False, message=u'users.views.update_user_profile: failed to update snaps (1)')
                return HttpResponse(dumps(result))
                
            snaps_by_others = session.query(Snap).filter_by(model_id=user_id).all()
            for snap in snaps_by_others :
                snap.model_nickname = request_data['nickname']
                session.merge(snap)
            try :
                session.commit()
            except :
                session.rollback()
                session.close()
                result = dict(success=False, message=u'users.views.update_user_profile: failed to update snaps (2)')
                return HttpResponse(dumps(result))
            
    for key, value in request_data.items():
        setattr(user_info, key, value)
        
    try : 
        session.merge(user_info)
        session.commit()
        session.close()
    except :
        session.rollback()
        session.close()
        result = dict(success=False, message=u'users.views.update_user_profile: database error')
        return HttpResponse(dumps(result))

    result = dict(success=True, message=u'users.views.update_user_profile: user profile updated succesfully')
    return HttpResponse(dumps(result))
Exemplo n.º 8
0
def create_snap(request) :
    # 특별하게 얘만 복합데이터, 헤더 조작후에 json을 POST안에 'data'라는 키로 따로 가져오기로 함.
    request_data = loads(request.POST['data'])
    user_id = get_user_id(request.META)    
    if not user_id :
        result = dict(success=False, message=u'snaps.views.create_snap: user id not found')
        return HttpResponse(dumps(result))

    if not request_data :
        result = dict(success=False, message=u'snaps.views.create_snap: no request data') 
        return HttpResponse(dumps(result))

    if 'spot_id' not in request_data :
        result = dict(success=False, message=u'snaps.views.create_snap: no spot id found in request data')
        return HttpResponse(dumps(result))

    if 'model_id' not in request_data :
        result = dict(success=False, message=u'snaps.views.create_snap: no model id found in request data')
        return HttpResponse(dumps(result))
    request_data['user_id'] = user_id

    filename = None
    for temp_filename in request.FILES :
        filename = temp_filename
    if not filename :
        result = dict(success=False, message=u'snaps.views.create_snap: no image attatched in request data')
        return HttpResponse(dumps(result))

    image_id = save_image(request.FILES[filename])

    if not image_id :
        result = dict(success=False, message=u'snaps.views.create_snap: failed to save image')
        return HttpResponse(dumps(result))

    request_data['image_id'] = image_id
    request_data['snaptime'] = datetime.datetime.now()
    remove_keys(request_data, Snap)
    
    new_snap = Snap(**request_data)
    session = get_session()
    
    spot = session.query(Spot).get(request_data['spot_id'])
    user_info = session.query(UserInfo).get(request_data['user_id'])
    model_info = session.query(UserInfo).get(request_data['model_id'])
    if not spot :
        result = dict(success=False, message=u'snaps.views.create_snap: no spot found')
        return HttpResponse(dumps(result))
    if not user_info :
        result = dict(success=False, message=u'snaps.views.create_snap: no user info found')
        return HttpResponse(dumps(result))
    if not model_info :
        result = dict(success=False, message=u'snaps.views.create_snap: no model info found')
        return HttpResponse(dumps(result))
    request_data['spot_name'] = spot.name
    request_data['user_nickname'] = user_info.nickname
    request_data['model_nickname'] = model_info.nickname

    try:
        session.add(new_snap)
        session.commit()
    except:
        session.rollback()
        session.query(Image).filter(Image.image_id==image_id).delete()
        session.commit()
        result = dict(success=False, message=u'snaps.views.create_snap: database error')
        return HttpResponse(dumps(result)) 
    session.close()
    result = dict(success=True, message=u'snaps.views.create_snap: snaped!')
    return HttpResponse(dumps(result))