diff --git a/back/delete_all_poems.py b/back/delete_all_poems.py new file mode 100644 index 0000000..5070402 --- /dev/null +++ b/back/delete_all_poems.py @@ -0,0 +1,6 @@ +from .models import Poems +from .db import database + +to_delete = database.query(Poems).filter(Poems.id > 102) +database.delete(to_delete) +database.commit() diff --git a/back/main.py b/back/main.py index b588b83..e98f547 100644 --- a/back/main.py +++ b/back/main.py @@ -20,7 +20,7 @@ import os from .utils import * from .db import Base, engine, SessionLocal, database - +from .service import add_poems_to_db, generate_poem from . import schemas, models Base.metadata.create_all(bind=engine) @@ -34,50 +34,11 @@ if not os.path.exists("./uploads"): os.mkdir("./uploads") app.mount("/uploads", StaticFiles(directory = "./uploads")) -# # Загружаем стихи -# def add_poems_to_db(db: Session): -# f1 = open('text121.txt', encoding='utf-8', mode='r')#открыть фаил для чтения на русском -# for a in range(1, 102): -# f1.seek(0)#перейти к началу -# i=0 -# str1="" -# stixi = "" -# while str1 != f"стих {a}\n": -# str1=f1.readline() -# name=f1.readline() -# # Цикл для склеивания стихотворения -# while str1 != f"стих {a+1}\n": -# str1=f1.readline() -# if(str1 != f"стих {a+1}\n"): -# stixi+=str1#удаление /n и заключение в список -# poem = Poems(poem_name=name, poem_text=stixi) -# # В конце каждой итерации добавляем в базу данных -# db.add(poem) -# db.commit() -# db.refresh(poem) -# # close the file -# f1.close() - -## Записываем стихи в базу данных, если их еще нет (запускать только если ). +# # Записываем стихи в базу данных, если их еще нет (запускать только если стихов в базе нет). # add_poems_to_db(database) - -# Функция, создающая сессию БД при каждом запросе к нашему API. -# Срабатывает до запуска остальных функций. -# Всегда закрывает сессию при окончании работы с ней -# @app.middleware("http") -# async def db_session_middleware(request: Request, call_next): -# response = Response("Internal server error", status_code=500) -# try: -# request.state.db = SessionLocal() -# response = await call_next(request) -# finally: -# request.state.db.close() -# return response - - @app.get("/api/announcements")#адрес объявлений -def annoncements_list(user_id: int = None, metro: str = None, category: str = None, booked_by: int = 0): +def annoncements_list(owner_id: int = None, metro: str = None, category: str = None, booked_by: int = 0): # Считываем данные из Body и отображаем их на странице. # В последствии будем вставлять данные в html-форму @@ -87,8 +48,8 @@ def annoncements_list(user_id: int = None, metro: str = None, category: str = No d = database.query(models.Announcement) e = database.query(models.Announcement) - if user_id != None: - b = a.filter(models.Announcement.user_id == user_id) + if owner_id != None: + b = a.filter(models.Announcement.owner_id == owner_id) if metro != None: c = a.filter(models.Announcement.metro == metro) @@ -96,19 +57,16 @@ def annoncements_list(user_id: int = None, metro: str = None, category: str = No if category != None: d = a.filter(models.Announcement.category == category) - if booked_by != -1: - e = a.filter(models.Announcement.booked_by == booked_by) - - if not any([category, user_id, metro]) and booked_by == -1: + if not any([category, owner_id, metro]) and booked_by == -1: result = a.all() else: result = b.intersect(c, d, e).all() - return {"Success" : True, "list_of_announcements": result} + return {"Success" : True, "list_of_announcements": result, "poem": generate_poem(database)} -@app.get("/api/announcement")#адрес объявлений +@app.get("/api/announcement")#адрес объявления def single_annoncement(user_id:int): # Считываем данные из Body и отображаем их на странице. # В последствии будем вставлять данные в html-форму @@ -189,7 +147,7 @@ def create_user(data = Body()): database.commit() database.refresh(new_user) # обновляем состояние объекта return {"Success": True} - return {"Success": False, "Message": "Пользователь с таким email уже зарегестрирован,"} + return {"Success": False, "Message": "Пользователь с таким email уже зарегестрирован"} @app.post("/api/token", response_model=schemas.Token) @@ -210,11 +168,9 @@ async def login_for_access_token( return {"access_token":access_token} -# @app.get("/api/users/me/", response_model=schemas.User) -# async def read_users_me( #!!!!!!!!!!! -# current_user: Annotated[schemas.User, Depends(get_current_active_user)] -# ): -# return current_user +@app.get("/api/users/me/", response_model=None) # +async def read_users_me(current_user: Depends(get_current_active_user)): #Annotated[schemas.User, Depends(get_current_active_user)]): + return current_user #schemas.User(id=current_user.id, email=current_user.email, name=current_user.name, surname=current_user.surname, disabled=current_user.disabled, items=current_user.items) # @app.get("/api/users/me/items/") diff --git a/back/schemas.py b/back/schemas.py index 26df573..62cf65c 100644 --- a/back/schemas.py +++ b/back/schemas.py @@ -40,7 +40,7 @@ class User(BaseModel): email: str name: Union[str, None] = None surname: str - disabled: Union[bool, None] = None + disabled: Union[bool, None] = False items: list[Announcement] = [] class Config: diff --git a/back/service.py b/back/service.py index 2458976..1815905 100644 --- a/back/service.py +++ b/back/service.py @@ -1,2 +1,50 @@ from sqlalchemy.orm import Session +from .models import Poems +import random + +# Загружаем стихи +def add_poems_to_db(db: Session): + f1 = open('text121.txt', encoding='utf-8', mode='r')#открыть фаил для чтения на русском + for a in range(1, 102): + f1.seek(0)#перейти к началу + i=0 + str1="" + stixi = "" + while str1 != f"стих {a}\n": + str1=f1.readline() + name=f1.readline() + # Цикл для склеивания стихотворения + while str1 != f"стих {a+1}\n": + str1=f1.readline() + if(str1 != f"стих {a+1}\n"): + stixi+=str1#удаление /n и заключение в список + poem = Poems(poem_name=name, poem_text=stixi) + # В конце каждой итерации добавляем в базу данных + db.add(poem) + db.commit() + db.refresh(poem) + # close the file + f1.close() + + +def generate_poem(db: Session): + # генерируем 1 случайное id и выбираем объект бд с этим id + rand_id = random.randint(1, 102) + poem = db.query(Poems).filter(Poems.id == rand_id).first() + # возвращаем название и текст стихотворения + return {"poem_name": poem.poem_name, "poem_text": poem.poem_text} + + +# Функция, создающая сессию БД при каждом запросе к нашему API. +# Срабатывает до запуска остальных функций. +# Всегда закрывает сессию при окончании работы с ней +# @app.middleware("http") +# async def db_session_middleware(request: Request, call_next): +# response = Response("Internal server error", status_code=500) +# try: +# request.state.db = SessionLocal() +# response = await call_next(request) +# finally: +# request.state.db.close() +# return response \ No newline at end of file diff --git a/back/utils.py b/back/utils.py index 466972b..954e9e5 100644 --- a/back/utils.py +++ b/back/utils.py @@ -75,7 +75,7 @@ async def get_current_user(db: Session, token: Annotated[str, Depends(oauth2_sch user = get_user(db, email=token_data.email) if user is None: raise credentials_exception - return schemas.User.from_orm(user) + return user async def get_current_active_user(