示例#1
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))
示例#2
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))
示例#3
0
def create_spot(request):
    request_data = loads(request.raw_post_data)

    remove_keys(request_data, Spot)

    new_spot = Spot(**request_data)
    session = get_session()
    try:
        session.add(new_spot)
        session.commit()
    except:
        session.rollback()

    session.close()
    result = dict(success=True, message=u"spots.views.create_spot: new spot created")
    return HttpResponse(dumps(result))
示例#4
0
def signup(request) :
    request_data = loads(request.raw_post_data)
    if 'user_id' not in request_data : # check for empty id and pw field
        result = dict(success=False, message=u'users.views.signup: user id not sent')
        return HttpResponse(dumps(result))
    if 'user_password' not in request_data :
        result = dict(success=False, message=u'users.views.signup: password not sent')
        return HttpResponse(dumps(result))

    session = get_session()
    request_data['user_id'] = request_data['user_id'].strip()
    user = session.query(User).filter_by(user_id=request_data['user_id']).first()
    if user :
        session.close()
        result = dict(success=False, message=u'users.views.signup: user id duplicated')
        return HttpResponse(dumps(result))
    
    phone_number = request_data.get('phone_number', None)
    if not phone_number or not phone_number.isdigit() :
        session.close()
        result = dict(success=False, message=u'users.views.signup: phone number must be digits')
        return HttpResponse(dumps(result)) 

    user_data = dict(request_data)
    user_info_data = dict(request_data)

    remove_keys(user_data, User)
    remove_keys(user_info_data, UserInfo)

    new_user = User(**user_data)
    new_user_info = UserInfo(**user_info_data)
    new_user.userinfo = new_user_info

    try :
        session.add(new_user)
        session.commit()
        session.close()
    except:
        session.rollback()
        session.close()
        result = dict(success=False, message=u'users.views.signup: failed to save user info')
        return HttpResponse(dumps(result))
    result = dict(success=True, message=u'signuped!')
    return HttpResponse(dumps(result))
示例#5
0
def update_spot_info(request, spot_id=None):
    request_data = loads(request.raw_post_data)

    remove_keys(request_data, Spot)

    session = get_session()
    spot_info = session.query(Spot).get(spot_id)

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

    try:
        session.merge(spot_info)
        session.commit()
    except:
        session.rollback()
        session.close()
        result = dict(success=False, message=u"spots.views.update_spot_info: failed to update spot info")
        return HttpResponse(dumps(result))
    session.close()
    result = dict(
        success=True, message=u"spots.views.update_spot_info: spot id {spot_id} updated".format(spot_id=spot_id)
    )
    return HttpResponse(dumps(result))
示例#6
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))
示例#7
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))