delete and poem endpoints fixed
This commit is contained in:
parent
8fb75f8329
commit
2cfe8512f4
46
back/api.py
46
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:
|
||||
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 "Конспекты":
|
||||
|
@ -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
|
||||
|
@ -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 (ключи и значения)
|
||||
|
@ -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
2
package-lock.json
generated
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "porridger",
|
||||
"name": "porridger_tmp",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user