delete and poem endpoints fixed

This commit is contained in:
DmitryGantimurov 2023-08-12 01:52:47 +03:00
parent 8fb75f8329
commit 2cfe8512f4
5 changed files with 34 additions and 42 deletions

View File

@ -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 "Конспекты":

View File

@ -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

View File

@ -44,24 +44,7 @@ def add_poems_to_db(db: Session):
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 (ключи и значения)

View File

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

2
package-lock.json generated
View File

@ -1,5 +1,5 @@
{
"name": "porridger",
"name": "porridger_tmp",
"lockfileVersion": 3,
"requires": true,
"packages": {}