예제 #1
0
def show_pins_before(pin_id):
    if g.user_id:
        time_tag = Pin.objects(id=pin_id).first().create_at
        user = User.objects(id=g.user_id).first()
        pins = Pin.objects(Q(create_at__lt=time_tag)&Q(owner=g.user_id))[:5].order_by('-create_at')
        res_data = pins_pack(pins, user)
        return (json.dumps(res_data), 200)
    return ('show_pins_before session timeout', 400)
예제 #2
0
def pin_post():
    if g.user_id:

        pin_type = request.form['type'] if ('type' in request.form) and request.form['type'] else 1
        content = request.form['content'] if 'content' in request.form else ''
        pic = request.form['pic'] if 'pic' in request.form else ''
        stamp = request.form['stamp'] if ('stamp' in request.form) and request.form['stamp'] else 1
        price = float(request.form['price']) if 'price' in request.form else 1.0
        currency = request.form['currency'] if ('currency' in request.form) and request.form['currency'] else 'CNY'

        # ex_rate = request.form['ex_rate'] if 'ex_rate' in request.form else 1.0

        owner = User.objects(id=g.user_id).first()
        pin = Pin(type=pin_type,
                  content=content,
                  pic=pic,
                  stamp=stamp,
                  price=price,
                  currency=currency,
                  owner=owner,
                  create_at=datetime.utcnow(),
                  avatar=owner.avatar)
        pin.save()

        timeline = Timeline(pin=pin,
                            owner=owner,
                            create_at=datetime.utcnow())
        timeline.save()

        if owner.fans:
            for fan in owner.fans:
                fan_timeline = Timeline(pin=pin,
                                        owner=fan,
                                        create_at=datetime.utcnow())
                fan_timeline.save()

        owner.update(inc__pins_count=1)

        res_data = {
            'pin_id':str(pin.id),
            'type':pin.type,
            'content':pin.content,
            'avatar':pin.avatar,
            'pic':pin.pic,
            'stamp':pin.stamp,
            'currency':pin.currency,
            'price':pin.price,
            'owner_id':str(pin.owner.id),
            'create_at':pin.create_at.strftime('%Y-%m-%d %H:%M:%S'),
        }
        response = make_response(json.dumps(res_data))
        #response.headers
        #response.headers['Version'] = '1'
        return response
    else:
        return ('pin post session timeout', 400)
예제 #3
0
def comment_pin(pin_id):
    if g.user_id:
        content = request.form['content']
        user = User.objects(id=g.user_id).first()
        pin = Pin.objects(id=pin_id).first()
        comment = Comment(content=content,
                          author=user,
                          pin=pin,
                          create_at=datetime.utcnow())
        comment.save()
        
        if pin.comments_count == 0:
            pin.first_comment = content
            pin.first_comment_user = user
            pin.first_comment_create_at = datetime.utcnow()
            pin.save()
        elif pin.comments_count >= 1:
            pin.last_comment = content
            pin.last_comment_user = user
            pin.last_comment_create_at = datetime.utcnow()
            pin.save()

        pin.update(inc__comments_count=1)

        comment_item = {}
        comment_item['comment_id'] = str(comment.id)
        comment_item['content'] = comment.content
        comment_item['author_id'] = str(comment.author.id)
        comment_item['author_name'] = comment.author.nickname
        comment_item['avatar'] = comment.author.avatar
        comment_item['create_at'] = comment.create_at.strftime('%Y-%m-%d %H:%M:%S')

        return (json.dumps(comment_item), 200)
    return ('comment pin session timeout', 400)
예제 #4
0
def show_pins():
    if g.user_id:
        user = User.objects(id=g.user_id).first()
        pins = Pin.objects(owner=g.user_id)[:5].order_by('-create_at')
        res_data = pins_pack(pins, user)
        return (json.dumps(res_data), 200)
    return ('show_pins session timeout', 400)
예제 #5
0
def unlike_pin(pin_id):
    if g.user_id:
        user = User.objects(id=g.user_id).first()
        pin = Pin.objects(id=pin_id).first()
        if user in pin.likes:
            pin.update(pull__likes=user, inc__likes_count=-1)
            return ('unlike success', 200)
        return ('not like this pin', 400)
    return ('unlike pin session timeout', 400)
예제 #6
0
def like_pin(pin_id):
    if g.user_id:
        user = User.objects(id=g.user_id).first()
        pin = Pin.objects(id=pin_id, likes__nin=[user]).first()
        if pin:
            pin.update(push__likes=user, inc__likes_count=1)
            return ('like success', 200)
        return ('already liked', 400)
    return ('like pin session timeout', 400)
예제 #7
0
def pin_detail(pin_id):
    if g.user_id:
        pin = Pin.objects(id=pin_id).first()

        user = User.objects(id=g.user_id).first()
        isliked = 1 if user in pin.likes else 0

        pin_item = {}
        pin_item['pin_id'] = str(pin.id)
        pin_item['type'] = pin.type
        pin_item['content'] = pin.content
        pin_item['pic'] = pin.pic
        pin_item['avatar'] = pin.avatar
        pin_item['price'] = pin.price
        pin_item['currency'] = pin.currency
        pin_item['stamp'] = pin.stamp
        pin_item['comments_count'] = pin.comments_count
        pin_item['isliked'] = 1 if user in pin.likes else 0

        if pin.comments_count == 0:
            pin_item['comments'] = []
        elif pin.comments_count == 1:
            first_comment = {
                'content':pin.first_comment,
                'author_id':str(pin.first_comment_user.id),
                'nickname':pin.first_comment_user.nickname,
                'avatar':pin.first_comment_user.avatar,
                'create_at':pin.first_comment_create_at.strftime('%Y-%m-%d %H:%M:%S'),
            }
            pin_item['comments'] = [first_comment]
        elif pin.comments_count >= 2:
            first_comment = {
                'content':pin.first_comment,
                'author_id':str(pin.first_comment_user.id),
                'nickname':pin.first_comment_user.nickname,
                'avatar':pin.first_comment_user.avatar,
                'create_at':pin.first_comment_create_at.strftime('%Y-%m-%d %H:%M:%S'),
            }
            last_comment = {
                'content':pin.last_comment,
                'author_id':str(pin.last_comment_user.id),
                'nickname':pin.last_comment_user.nickname,
                'avatar':pin.last_comment_user.avatar,
                'create_at':pin.last_comment_create_at.strftime('%Y-%m-%d %H:%M:%S'),
            }
            pin_item['comments'] = [first_comment, last_comment]


        pin_item['likes_count'] = pin.likes_count
        pin_item['create_at'] = pin.create_at.strftime('%Y-%m-%d %H:%M:%S')


        return (json.dumps(pin_item), 200)
    return ('pin detail timeout', 400)
예제 #8
0
def fav_pin(pin_id):
    if g.user_id:
        already_fav = Fav.objects(owner=g.user_id, pin=pin_id).first()
        if not already_fav:
            pin = Pin.objects(id=pin_id).first()
            user = User.objects(id=g.user_id).first()
            fav = Fav(owner=user,
                      pin=pin,
                      create_at=datetime.utcnow())
            fav.save()
            return ('fav success', 200)
        return ('already fav', 400)
    return ('fav pin session timeout', 400)
예제 #9
0
def admin_del_user(user_id):
    if g.admin:
        user = User.objects(id=user_id).first()
        user.delete()
        pins = Pin.objects(owner=user_id)
        for pin in pins:
            pin.delete()
        timelines = Timeline.objects(owner=user_id)
        for timeline in timelines:
            timeline.delete()
        return redirect(url_for('admin.admin_user'))
    return redirect(url_for('admin.admin_login'))

    
예제 #10
0
def del_pin(pin_id):
    if g.user_id:
        if len(pin_id) == 24:
            pin = Pin.objects(id=pin_id).first()
            if pin:
                pin.delete()

                # delete pin from timeline
                timelines = Timeline.objects(pin=pin_id)
                for timeline in timelines:
                    timeline.delete()
      
                return ('delete success', 200)
            return ('no this pin', 400)
        return ('need pin_id', 400)
    return ('del pin session timeout', 400)
예제 #11
0
def pin_likes(pin_id, page_num):
    if g.user_id:
        limit = 5 
        offset = (page_num - 1) * limit
        pin = Pin.objects(id=pin_id).fields(slice__likes=[offset, limit]).first()
        user = User.objects(id=g.user_id).first()

        like_list = []
        for like in pin.likes:
            like_item = {}
            like_item['isfollowed'] = 1 if user in like.fans else 0
            like_item['user_id'] = str(like.id)
            like_item['avatar'] = like.avatar
            like_item['nickname'] = like.nickname
            like_list.append(like_item)
        res_data = {
            'total':len(like_list),
            'items':like_list,
        }
        return (json.dumps(res_data), 200)
    return ('likes list session timeout', 400)