예제 #1
0
    def save_data(self, data: dict, many: bool = False):
        if not many:
            schema = BookSchema(strict=True)
            book = schema.load(data).data

            with db.auto_commit():
                db.session.add(book)
        else:
            schema = BookSchema(strict=True, many=True)
            books = schema.load(data['books']).data
            isbns = [book.isbn for book in books]
            distinct_books = self.distinct_books(isbns, books)
            with db.auto_commit():
                db.session.add_all(distinct_books)
        redis.set(self.format_key, data)
예제 #2
0
def save_drift(drift_info, current_gift, gifter, current_user):
    """
    保存交易记录
    :param drift:
    :param current_gift: gift实体
    :param gifter: 礼物拥有者
    :param current_user: 当前登录用户
    :return:
    """
    with db.auto_commit():
        drift = Drift()
        drift.recipient_name = drift_info['recipient_name']
        drift.mobile = drift_info['mobile']
        drift.message = drift_info['message']
        drift.address = drift_info['address']

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_id = gifter.id
        drift.gifter_nickname = gifter.nickname

        book = current_gift.book
        drift.book_title = book['title']
        drift.book_author = book['author']
        drift.book_img = book['image']
        drift.isbn = book['isbn']
        current_user.beans -= Decimal(1).quantize(Decimal('0.00'))
        db.session.add(drift)
예제 #3
0
def redraw_from_gifts(gid):
    uid = getattr(g, REQUEST_USER_ID)
    user = User.query.get_or_404(uid)
    gift = Gift.query.filter_by(id=gid, launched=False, user_id=uid).first_or_404()
    drift = Drift.query.filter_by(gift_id=gid, pending=PendingStatus.Waiting.value).first()
    if drift:
        return ErrorResponse(REDRAW_GIFT_ERROR).make()
    with db.auto_commit():
        user.beans -= Decimal(0.5).quantize(Decimal('0.00'))
        gift.is_deleted = True
    return SuccessResponse()()
예제 #4
0
 def search_by_isbn(self, isbn):
     schema = BookSchema()
     book = Book.query.filter(Book.isbn == isbn).first()
     if book:
         dumps = schema.dump(book).data
     else:
         url = self.isbn_url.format(isbn)
         data = HTTP.get(url)
         if not data:
             self.total = 0
             return
         dumps = schema.dump(data).data
         with db.auto_commit():
             book = Book(**dumps)
             db.session.add(book)
     self.__fill_single(dumps)
예제 #5
0
def save_to_gifts(isbn):
    if is_isbn_or_key(isbn):
        return ErrorResponse(BOOK_ISBN_ERROR).make()
    yushu_book = YuShuBook()
    yushu_book.search_by_isbn(isbn)
    if not yushu_book.first:
        return ErrorResponse(BOOK_ISBN_ERROR).make()
    uid = getattr(g, REQUEST_USER_ID)
    user = User.query.get(uid)
    if user.can_save_to_list(isbn):
        with db.auto_commit():
            gift = Gift()
            gift.isbn = isbn
            gift.user_id = user.id
            user.beans += Decimal(0.5).quantize(Decimal('0.00'))
            db.session.add(gift)
    else:
        return ErrorResponse(SAVE_BOOK_ERROR).make()
    return SuccessResponse()()
예제 #6
0
def drift_pending(did):
    uid = getattr(g, REQUEST_USER_ID)
    schema = DriftPendingStatusSchema(strict=True)
    status = schema.dump(request.get_json()).data['status']
    with db.auto_commit():
        if status == PendingStatus.Success.value:
            # 邮寄
            drift = Drift.query.filter_by(gifter_id=uid, id=did).first_or_404()
            drift.pending = PendingStatus.Success.value
            gift = Gift.query.filter_by(id=drift.gift_id).first_or_404()
            gift.launched = True
            gift.is_deleted = True

            wish = Wish.query.filter_by(isbn=drift.isbn,
                                        user_id=drift.requester_id,
                                        launched=False).first_or_404()
            wish.launched = True
            wish.is_deleted = True
            requester = User.query.get_or_404(drift.requester_id)
            requester.receive_counter += 1
            gifter = User.query.get_or_404(drift.gifter_id)
            gifter.send_counter += 1
        elif status == PendingStatus.Reject.value:
            # 拒绝 当前用户为赠书者
            drift = Drift.query.filter_by(gifter_id=uid, id=did).first_or_404()
            drift.pending = PendingStatus.Reject.value
            drift.is_deleted = True
            requester = User.query.get_or_404(drift.requester_id)
            requester.beans += Decimal(1).quantize(Decimal('0.00'))
        elif status == PendingStatus.Redraw.value:
            # 撤销 当前用户为索要者
            drift = Drift.query.filter_by(id=did, requester_id=uid).first()
            drift.pending = PendingStatus.Redraw.value
            drift.is_deleted = True
            current_user = User.query.get_or_404(uid)
            current_user.beans += Decimal(1).quantize(Decimal('0.00'))
    return SuccessResponse()()
예제 #7
0
 def reset_password(uid, password):
     user = User.query.filter_by(id=uid).first_or_404()
     with db.auto_commit():
         user.password = password
         db.session.add(user)