diff --git a/back/api.py b/back/api.py index cfa585e..52cbdc9 100644 --- a/back/api.py +++ b/back/api.py @@ -68,12 +68,11 @@ async def announcements_list(db: Annotated[Session, Depends(auth_utils.get_sessi async def single_announcement(ann_id:int, db: Annotated[Session, Depends(auth_utils.get_session)]): # передаем индекс обявления # Считываем данные из Body и отображаем их на странице. # В последствии будем вставлять данные в html-форму - try: - announcement = await db.get(orm_models.Announcement, ann_id) - #announcement = await db.execute(select(orm_models.Announcement)).scalars().all() - return announcement - except: - return {"Answer" : False} #если неуданый доступ, то сообщаем об этом + announcement = await db.get(orm_models.Announcement, ann_id) + #announcement = await db.execute(select(orm_models.Announcement)).scalars().all() + if not announcement: + raise HTTPException(status_code=404, detail="Item not found") + return announcement # Занести объявление в базу данных @@ -82,48 +81,49 @@ async def put_in_db(name: Annotated[str, Form()], category: Annotated[str, Form( address: Annotated[str, Form()], longtitude: Annotated[float, Form()], latitude: Annotated[float, Form()], description: Annotated[str, Form()], metro: Annotated[str, Form()], current_user: Annotated[pydantic_schemas.User, Depends(auth_utils.get_current_active_user)], db: Annotated[Session, Depends(auth_utils.get_session)], src: Union[UploadFile, None] = None, trashId: Annotated[int, Form()] = None): + + # имя загруженного файла по умолчанию - пустая строка + uploaded_name = "" + # если пользователь загрузил картинку + if src: + # процесс сохранения картинки + f = src.file + f.seek(0, os.SEEK_END) + if f.tell() > 0: + f.seek(0) + destination = pathlib.Path("./uploads/" + str(hash(f)) + pathlib.Path(src.filename).suffix.lower()) + async with destination.open('wb') as buffer: + shutil.copyfileobj(f, buffer) + + # изменяем название директории загруженного файла + uploaded_name = "/uploads/" + destination.name + + # создаем объект Announcement + temp_ancmt = orm_models.Announcement(user_id=current_user.id, name=name, category=category, best_by=bestBy, + address=address, longtitude=longtitude, latitude=latitude, description=description, metro=metro, + trashId=trashId, src=uploaded_name, booked_by=0) try: - # имя загруженного файла по умолчанию - пустая строка - uploaded_name = "" - # если пользователь загрузил картинку - if src: - # процесс сохранения картинки - f = src.file - f.seek(0, os.SEEK_END) - if f.tell() > 0: - f.seek(0) - destination = pathlib.Path("./uploads/" + str(hash(f)) + pathlib.Path(src.filename).suffix.lower()) - async with destination.open('wb') as buffer: - shutil.copyfileobj(f, buffer) - - # изменяем название директории загруженного файла - uploaded_name = "/uploads/" + destination.name - - # создаем объект Announcement - temp_ancmt = orm_models.Announcement(user_id=current_user.id, name=name, category=category, best_by=bestBy, - address=address, longtitude=longtitude, latitude=latitude, description=description, metro=metro, - trashId=trashId, src=uploaded_name, booked_by=0) db.add(temp_ancmt) # добавляем в бд await db.commit() # сохраняем изменения await db.refresh(temp_ancmt) # обновляем состояние объекта - return {"Answer" : True} except: - return {"Answer" : False} + raise HTTPException(status_code=500, detail="problem with adding object to db") # Удалить объявления из базы @app.delete("/api/announcement") #адрес объявления async def delete_from_db(announcement: pydantic_schemas.DelAnnouncement, db: Annotated[Session, Depends(auth_utils.get_session)]): # функция удаления объекта из БД + # находим объект с заданным id в бд + #to_delete = db.query(orm_models.Announcement).filter(orm_models.Announcement.id==announcement.id).first() + query = await db.execute(select(orm_models.Announcement).where(orm_models.Announcement.id==announcement.id)) + to_delete = query.scalars().first() + if not to_delete: + raise HTTPException(status_code=404, detail="Item not found. Can't delete") try: - # находим объект с заданным id в бд - #to_delete = db.query(orm_models.Announcement).filter(orm_models.Announcement.id==announcement.id).first() - query = await db.execute(select(orm_models.Announcement).where(orm_models.Announcement.id==announcement.id)) - to_delete = query.scalars().first() await db.delete(to_delete) # удаление из БД await db.commit() # сохраняем изменения - return {"Answer" : True} except: - return {"Answer" : False} + raise HTTPException(status_code=500, detail="Problem with adding to database") # Забронировать объявление