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))
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))
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))
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))
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))
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))
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))