fix: rework /get_random_cards, add visited cards functional
This commit is contained in:
+32
-4
@@ -55,14 +55,42 @@ async def get_card(card_id: NonNegativeInt,
|
|||||||
return BaseResponse(result="There is no card with this card_id", error=True)
|
return BaseResponse(result="There is no card with this card_id", error=True)
|
||||||
|
|
||||||
@app.get("/get_random_cards", status_code=200)
|
@app.get("/get_random_cards", status_code=200)
|
||||||
async def get_random_cards(response: Response,
|
async def get_random_cards(user_id: NonNegativeInt,
|
||||||
|
response: Response,
|
||||||
mongo: MongoWorker = Depends(MongoWorker)) -> BaseResponse:
|
mongo: MongoWorker = Depends(MongoWorker)) -> BaseResponse:
|
||||||
result = mongo.get_random_cards(10, True)
|
cards_visited = mongo.get_visited_cards(user_id)
|
||||||
if result:
|
|
||||||
return BaseResponse(result=result)
|
if cards_visited.result == "User doesn't exist":
|
||||||
|
response.status_code = status.HTTP_401_UNAUTHORIZED
|
||||||
|
return BaseResponse(result="User doesn't exist", error=True)
|
||||||
|
elif not cards_visited.result.cards_visited:
|
||||||
|
random_cards = mongo.get_random_cards(10, True)
|
||||||
|
if random_cards:
|
||||||
|
return BaseResponse(result=random_cards)
|
||||||
else:
|
else:
|
||||||
response.status_code = status.HTTP_404_NOT_FOUND
|
response.status_code = status.HTTP_404_NOT_FOUND
|
||||||
return BaseResponse(result="No active cards", error=True)
|
return BaseResponse(result="No active cards", error=True)
|
||||||
|
else:
|
||||||
|
result = list()
|
||||||
|
trys = 3
|
||||||
|
while len(result) < 10 and trys != 0:
|
||||||
|
random_cards = mongo.get_random_cards(10, True)
|
||||||
|
if not random_cards:
|
||||||
|
response.status_code = status.HTTP_404_NOT_FOUND
|
||||||
|
return BaseResponse(result="No active cards", error=True)
|
||||||
|
filtered_cards, filtered_cards_id = mongo.filter_cards(random_cards, cards_visited.result.cards_visited)
|
||||||
|
trys -= 1
|
||||||
|
if not filtered_cards:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
result.extend(filtered_cards)
|
||||||
|
cards_visited.result.cards_visited.update(filtered_cards_id)
|
||||||
|
if not result:
|
||||||
|
response.status_code = status.HTTP_404_NOT_FOUND
|
||||||
|
return BaseResponse(result="No active cards fo this user", error=True)
|
||||||
|
else:
|
||||||
|
return BaseResponse(result=result)
|
||||||
|
|
||||||
|
|
||||||
@app.post("/add_card", status_code=201)
|
@app.post("/add_card", status_code=201)
|
||||||
async def add_card(new_card: AddCardBody,
|
async def add_card(new_card: AddCardBody,
|
||||||
|
|||||||
+15
-4
@@ -57,12 +57,23 @@ class MongoWorker:
|
|||||||
return counter["counter"]
|
return counter["counter"]
|
||||||
|
|
||||||
|
|
||||||
def get_visited_cards(self, user_id: int) -> Optional[Visited]:
|
def get_visited_cards(self, user_id: int) -> BaseResponse:
|
||||||
document = self.visited_data.find_one({"user_id": user_id})
|
document = self.visited_data.find_one({"user_id": user_id})
|
||||||
if not document:
|
if not document:
|
||||||
return None
|
check_user = self.check_user(user_id)
|
||||||
|
if check_user:
|
||||||
|
return BaseResponse(result=Visited(user_id=user_id,
|
||||||
|
cards_visited=set()))
|
||||||
else:
|
else:
|
||||||
return Visited.model_validate(document)
|
return BaseResponse(result="User doesn't exist", error=True)
|
||||||
|
else:
|
||||||
|
return BaseResponse(result=Visited.model_validate(document))
|
||||||
|
|
||||||
|
def filter_cards(self, random_cards: list[Card], cards_visited: set) -> tuple[list[Optional[Card]], int]:
|
||||||
|
filtered_cards = [card for card in random_cards if card.card_id not in cards_visited]
|
||||||
|
filtered_cards_id = [filtered_card.card_id for filtered_card in filtered_cards]
|
||||||
|
|
||||||
|
return filtered_cards, filtered_cards_id
|
||||||
|
|
||||||
def update_visited_cards(self, user_id: int, visited_card_id: int) -> Visited:
|
def update_visited_cards(self, user_id: int, visited_card_id: int) -> Visited:
|
||||||
update_visited = self.visited_data.find_one_and_update({"user_id": user_id},
|
update_visited = self.visited_data.find_one_and_update({"user_id": user_id},
|
||||||
@@ -159,4 +170,4 @@ if __name__ == "__main__":
|
|||||||
#print(mongo.like_card(1, 455412573))
|
#print(mongo.like_card(1, 455412573))
|
||||||
#print(mongo.dislike_card(1, 455412573))
|
#print(mongo.dislike_card(1, 455412573))
|
||||||
print(mongo.update_visited_cards(123, 2))
|
print(mongo.update_visited_cards(123, 2))
|
||||||
print(mongo.get_visited_cards(12))
|
print(mongo.get_visited_cards(123).result.cards_visited)
|
||||||
|
|||||||
Reference in New Issue
Block a user