From 2cfe8512f4f88c3f91355f6d76f4af9c07c2cdc0 Mon Sep 17 00:00:00 2001 From: DmitryGantimurov Date: Sat, 12 Aug 2023 01:52:47 +0300 Subject: [PATCH] delete and poem endpoints fixed --- back/api.py | 48 +++++++++++++++++++++++++---------------------- back/schemas.py | 5 +++++ back/service.py | 19 +------------------ back/utils.py | 2 +- package-lock.json | 2 +- 5 files changed, 34 insertions(+), 42 deletions(-) diff --git a/back/api.py b/back/api.py index e3fe7c8..ca359da 100644 --- a/back/api.py +++ b/back/api.py @@ -36,8 +36,8 @@ if not os.path.exists("./uploads"): os.mkdir("./uploads") app.mount("/uploads", StaticFiles(directory = "./uploads")) -# Записываем стихи в базу данных, если их еще нет (запускать только если стихов в базе нет). -# add_poems_to_db(database) +## Записываем стихи в базу данных, если их еще нет (запускать только если стихов в базе нет). +# service.add_poems_to_db(database) @app.get("/api/announcements", response_model=List[schemas.Announcement])#адрес объявлений @@ -46,7 +46,7 @@ def announcements_list(db: Annotated[Session, Depends(utils.get_db)], obsolete: # параметры для сортировки (схема pydantic schemas.SortAnnouncements) params_to_sort = schemas.SortAnnouncements(obsolete=obsolete, user_id=user_id, metro=metro, category=category) # получаем результат - result = get_query_results(db=db, schema=params_to_sort) + result = service.filter_ann(db=db, schema=params_to_sort) return result @@ -98,14 +98,20 @@ def put_in_db(name: Annotated[str, Form()], category: Annotated[str, Form()], be # Удалить объявления из базы @app.delete("/api/announcement") #адрес объявления -def delete_from_db(announcement: schemas.DelAnnouncement, db: Annotated[Session, Depends(utils.get_db)]): # функция удаления объекта из БД - try: - to_delete = db.query(models.Announcement).filter(models.Announcement.id==announcement.id).first() +def delete_from_db(announcement: schemas.DelAnnouncement, db: Annotated[Session, Depends(utils.get_db)], + current_user: Annotated[schemas.User, Depends(utils.get_current_active_user)]): # функция удаления объекта из БД + # находим объявление в бд по id + to_delete = db.query(models.Announcement).filter(models.Announcement.id==announcement.id).first() + # Проверяем, что объявление с данным id существует + if not to_delete: + raise HTTPException(status_code=404, detail="Item not found") + # Проверяем, что объявление удаляет владелец + if current_user.id == to_delete.user_id: db.delete(to_delete) # удаление из БД db.commit() # сохраняем изменения return {"Answer" : True} - except: - return {"Answer" : False} + else: + raise HTTPException(status_code=403, detail="Can't delete other user's announcements") # Забронировать объявление @@ -191,33 +197,31 @@ def add_points(user_id: int, db: Annotated[Session, Depends(utils.get_db)]): # Отправляем стихи -@app.get("/api/user/poem") # пока не работает +@app.get("/api/user/poem", response_model=schemas.Poem) # пока не работает def poems_to_front(db: Annotated[Session, Depends(utils.get_db)]): # db: Annotated[Session, Depends(utils.get_db)] - kolvo_stixov = db.query(models.Poems).count() # пока количество стихотворений = 101 - if kolvo_stixov > 1: - rand_id = random.randint(1, kolvo_stixov) # номер стихотворения - poem_json = dict() - poem = db.query(models.Poems).filter(models.Poems.id == rand_id).first() - poem_json = {"id": rand_id, "title": poem.title, "text": poem.text, "author": poem.author} - return poem_json - else: - raise HTTPException(status_code=404, detail="Poems not found") + num_of_poems = db.query(models.Poems).count() # определяем кол-во стихов в бд + rand_id = random.randint(1, num_of_poems) # генерируем номер стихотворения + poem = db.query(models.Poems).filter(models.Poems.id == rand_id).first() # находим стих в бд + if not poem: + raise HTTPException(status_code=404, detail="Poem not found") + return poem + @app.get("/api/trashbox", response_model=List[schemas.TrashboxResponse]) -def get_trashboxes(Lat:float, Lng:float, Category:str):#крутая функция для работы с api +def get_trashboxes(data: schemas.TrashboxRequest = Depends()):#крутая функция для работы с api # json, передаваемый стороннему API head = {'Authorization': 'Bearer {}'.format(service.my_token)} # Данные пользователя (местоположение, количество мусорок, которое пользователь хочет видеть) my_data={ - 'x' : f"{Lng}", - 'y' : f"{Lat}", + 'x' : f"{data.Lng}", + 'y' : f"{data.Lat}", 'limit' : '1' } list_of_category = [] # лист по которому будет отбираться uniq_trashboxes - match Category: + match data.Category: case "PORRIDGE": list_of_category=["Опасные отходы", "Иное"] case "Конспекты": diff --git a/back/schemas.py b/back/schemas.py index 88553af..80cc7e0 100644 --- a/back/schemas.py +++ b/back/schemas.py @@ -48,6 +48,7 @@ class User(BaseModel): reg_date: date disabled: Union[bool, None] = False items: list[Announcement] = [] + points: int class Config: orm_mode = True @@ -57,10 +58,14 @@ class UserInDB(User): hashed_password: str class Poem(BaseModel): + id: int title: str text: str author: str + class Config: + orm_mode = True + # Для "/api/trashbox" class TrashboxBase(BaseModel): Lat: float diff --git a/back/service.py b/back/service.py index 6228552..61f7201 100644 --- a/back/service.py +++ b/back/service.py @@ -42,26 +42,9 @@ def add_poems_to_db(db: Session): 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(models.Poems).filter(models.Poems.id == rand_id).first() - # возвращаем название и текст стихотворения - return {"name": poem.title, "text": poem.poem_text, "author":""} # добавить поле author в Poems -#Вова тестирует получение поэм, Димоны, помогите пж -# def poems_to_front(db: Annotated[Session, Depends(utils.get_db)]): -# kolvo_stixov = 109 # пока количество стихотворений = 101 -# rand_id = random.randint(1, kolvo_stixov) # номер стихотворения -# poem_json = dict() -# poem = database.query(models.Poems).filter(models.Poems.id == rand_id).first() -# poem_json = {"title": poem.title, "text": poem.text, "author":poem.author} -# return poem_json - -def get_query_results(schema: schemas.SortAnnouncements, db: Annotated[Session, Depends(utils.get_db)]): +def filter_ann(schema: schemas.SortAnnouncements, db: Annotated[Session, Depends(utils.get_db)]): """Функция для последовательного применения различных фильтров (через схему SortAnnouncements)""" res = db.query(models.Announcement) fields = schema.__dict__ # параметры передоваемой схемы SortAnnouncements (ключи и значения) diff --git a/back/utils.py b/back/utils.py index 705ccac..97652d6 100644 --- a/back/utils.py +++ b/back/utils.py @@ -88,7 +88,7 @@ async def get_current_user(db: Annotated[Session, Depends(get_db)], token: Annot if user is None: raise credentials_exception return schemas.User(id=user.id, nickname=user.nickname, name=user.name, surname=user.surname, - disabled=user.disabled, items=user.announcements, reg_date=user.reg_date) + disabled=user.disabled, items=user.announcements, reg_date=user.reg_date, points=user.points) async def get_current_active_user( diff --git a/package-lock.json b/package-lock.json index a38a69c..544905a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "porridger", + "name": "porridger_tmp", "lockfileVersion": 3, "requires": true, "packages": {}