get_query_results works correctly. relationships between models changed

This commit is contained in:
2023-08-07 22:27:23 +03:00
parent dfe1f90748
commit f15c17a17e
8 changed files with 135 additions and 80 deletions

View File

@ -7,12 +7,13 @@ from fastapi.templating import Jinja2Templates
from fastapi.requests import Request
from pydantic import json
from typing import Any, Annotated, List
from typing import Any, Annotated, List, Union
from starlette.staticfiles import StaticFiles
import requests
from uuid import uuid4
import random
import datetime
import ast
import pathlib
@ -20,7 +21,8 @@ import shutil
import os
from .db import Base, engine, SessionLocal, database
from .service import add_poems_to_db, generate_poem, check_obsolete
from .service import add_poems_to_db, generate_poem, check_obsolete, get_query_results
from .scheduler import app as app_rocketry
from . import schemas, models, utils
Base.metadata.create_all(bind=engine)
@ -38,17 +40,23 @@ app.mount("/uploads", StaticFiles(directory = "./uploads"))
# add_poems_to_db(database)
@app.get("/api/announcements")#адрес объявлений
def annoncements_list(owner_id: int = None, metro: str = None, category: str = None, booked_by: int = 0):
# Каждый день в 00.00 проверяем все объявления (сравниваем текущую дату и срок годности)
# session_rocketry = app_rocketry.session
@app.get("/api/announcements", response_model=List[schemas.Announcement])#адрес объявлений
def annoncements_list(obsolete: Union[bool, None] = False, user_id: Union[int, None] = None, metro: Union[str, None] = None,
category: Union[str, None] = None):
# Считываем данные из Body и отображаем их на странице.
# В последствии будем вставлять данные в html-форму
params_to_sort = schemas.SortAnnouncements(obsolete=obsolete, user_id=user_id, metro=metro, category=category)
# Фильтруем по сроку годности
not_expired = check_obsolete(current_date=datetime.date.today())
# not_expired = check_obsolete(current_date=datetime.date.today())
# Фильтруем по другим параметрам и делаем пересечение с not_expired
result = not_expired.intersect(get_query_results(params_to_sort))
# result = not_expired.intersect(get_query_results(params_to_sort))
result = get_query_results(db=database, schema=params_to_sort)
return {"Success" : True, "list_of_announcements": result}
return result
@app.get("/api/announcement")#адрес объявления
@ -68,7 +76,7 @@ def single_annoncement(user_id:int):
# Занести объявление в базу данных
@app.put("/api/announcement")#адрес объявлений
def put_in_db(name: Annotated[str, Form()], category: Annotated[str, Form()], bestBy: Annotated[int, Form()],
def put_in_db(name: Annotated[str, Form()], category: Annotated[str, Form()], bestBy: Annotated[datetime.date, Form()],
address: Annotated[str, Form()], longtitude: Annotated[float, Form()], latitude: Annotated[float, Form()],
description: Annotated[str, Form()], src: UploadFile, metro: Annotated[str, Form()],
trashId: Annotated[int, Form()] = None):
@ -167,12 +175,14 @@ async def read_own_items(
# начисляем баллы пользователю
@app.post("/api/user/rating")
def add_points(data: schemas.AddPoints):
user = utils.get_user(data.user_id)
if not user:
raise HTTPException(status_code=404, detail="Item not found")
user.rating += data.rate
return {"Success": True}
def add_points(data: schemas.AddPoints, current_user: Annotated[schemas.User, Depends(utils.get_current_user)]):
if current_user.id != data.user_id:
user = utils.get_user(data.user_id)
if not user:
raise HTTPException(status_code=404, detail="Item not found")
user.num_of_ratings += 1
user.rating = (user.rating + data.rate)/user.num_of_ratings
return {"Success": True}
# получаем данные о баллах пользователя