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