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