forked from polka_billy/porridger
UserDatabase->User, ForeignKey added
This commit is contained in:
@ -1,40 +0,0 @@
|
||||
from .db import engine
|
||||
from .models import Announcement, UserDatabase, Trashbox, Base
|
||||
|
||||
|
||||
Base.metadata.create_all(bind=engine)
|
||||
|
||||
db = SessionLocal()
|
||||
|
||||
# Пробный чувак
|
||||
tom = UserDatabase(name="Tom", phone="89999999", email="pupka", password="1234", surname="Smith")
|
||||
# db.add(tom) # добавляем в бд
|
||||
# db.commit() # сохраняем изменения
|
||||
# db.refresh(tom) # обновляем состояние объекта
|
||||
|
||||
# Пробное объявление 1
|
||||
a1 = Announcement(user_id=1, category="cat", best_by="201223", address="abd", longtitude=23, latitude=22,
|
||||
description="abv", src="111", metro="Lesnaya", booked_by=2)
|
||||
# Пробное объявление 2
|
||||
a2 = Announcement(user_id=1, category="dog", best_by="221223", address="abd", longtitude=50, latitude=12,
|
||||
description="vvv", src="110", metro="Petrogradskaya", booked_by=2)
|
||||
|
||||
a3 = Announcement(user_id=1, category="a", best_by="221223", address="abd", longtitude=20, latitude=25,
|
||||
description="vvv", src="101", metro="metro", booked_by=2)
|
||||
|
||||
trash1 = Trashbox(name="Tom", address="abd", longtitude=23, latitude=22, category="indisposable")
|
||||
|
||||
# db.add(a1) # добавляем в бд
|
||||
# db.add(a2) # добавляем в бд
|
||||
# db.add(a3) # добавляем в бд
|
||||
# db.add(trash1) # добавляем в бд
|
||||
# db.commit() # сохраняем изменения
|
||||
# db.refresh(a1) # обновляем состояние объекта
|
||||
# db.refresh(a2) # обновляем состояние объекта
|
||||
# db.refresh(a3) # обновляем состояние объекта
|
||||
# db.refresh(trash1) # обновляем состояние объекта
|
||||
|
||||
# # Удалить все
|
||||
# db.query(User).delete()
|
||||
# db.query(Announcement).delete()
|
||||
# db.commit()
|
5
back/delete_db.py
Normal file
5
back/delete_db.py
Normal file
@ -0,0 +1,5 @@
|
||||
from sqlalchemy import Table, MetaData
|
||||
from .db import engine
|
||||
|
||||
tbl = Table('UserDatabase', MetaData(), autoload_with=engine)
|
||||
tbl.drop(engine, checkfirst=False)
|
45
back/main.py
45
back/main.py
@ -20,9 +20,8 @@ import os
|
||||
|
||||
from .utils import *
|
||||
from .db import Base, engine, SessionLocal, database
|
||||
from .models import Announcement, Trashbox, UserDatabase, Poems
|
||||
|
||||
from . import schemas
|
||||
from . import schemas, models
|
||||
|
||||
Base.metadata.create_all(bind=engine)
|
||||
|
||||
@ -82,23 +81,23 @@ def annoncements_list(user_id: int = None, metro: str = None, category: str = No
|
||||
# Считываем данные из Body и отображаем их на странице.
|
||||
# В последствии будем вставлять данные в html-форму
|
||||
|
||||
a = database.query(Announcement)
|
||||
b = database.query(Announcement)
|
||||
c = database.query(Announcement)
|
||||
d = database.query(Announcement)
|
||||
e = database.query(Announcement)
|
||||
a = database.query(models.Announcement)
|
||||
b = database.query(models.Announcement)
|
||||
c = database.query(models.Announcement)
|
||||
d = database.query(models.Announcement)
|
||||
e = database.query(models.Announcement)
|
||||
|
||||
if user_id != None:
|
||||
b = a.filter(Announcement.user_id == user_id)
|
||||
b = a.filter(models.Announcement.user_id == user_id)
|
||||
|
||||
if metro != None:
|
||||
c = a.filter(Announcement.metro == metro)
|
||||
c = a.filter(models.Announcement.metro == metro)
|
||||
|
||||
if category != None:
|
||||
d = a.filter(Announcement.category == category)
|
||||
d = a.filter(models.Announcement.category == category)
|
||||
|
||||
if booked_by != -1:
|
||||
e = a.filter(Announcement.booked_by == booked_by)
|
||||
e = a.filter(models.Announcement.booked_by == booked_by)
|
||||
|
||||
if not any([category, user_id, metro]) and booked_by == -1:
|
||||
result = a.all()
|
||||
@ -114,7 +113,7 @@ def single_annoncement(user_id:int):
|
||||
# Считываем данные из Body и отображаем их на странице.
|
||||
# В последствии будем вставлять данные в html-форму
|
||||
try:
|
||||
annoncement = database.get(Announcement, user_id)
|
||||
annoncement = database.get(models.Announcement, user_id)
|
||||
return {"id": annoncement.id, "user_id": annoncement.user_id, "name": annoncement.name,
|
||||
"category": annoncement.category, "best_by": annoncement.best_by, "address": annoncement.address,
|
||||
"description": annoncement.description, "metro": annoncement.metro, "latitude": annoncement.latitude,
|
||||
@ -145,7 +144,7 @@ trashId: Annotated[int, Form()] = None):
|
||||
|
||||
uploaded_name = "/uploads/"+destination.name
|
||||
|
||||
temp_ancmt = Announcement(user_id=userId, name=name, category=category, best_by=bestBy, address=address, longtitude=longtitude, latitude=latitude, description=description, src=uploaded_name, metro=metro, trashId=trashId, booked_by=-1)
|
||||
temp_ancmt = models.Announcement(user_id=userId, name=name, category=category, best_by=bestBy, address=address, longtitude=longtitude, latitude=latitude, description=description, src=uploaded_name, metro=metro, trashId=trashId, booked_by=-1)
|
||||
database.add(temp_ancmt) # добавляем в бд
|
||||
database.commit() # сохраняем изменения
|
||||
database.refresh(temp_ancmt) # обновляем состояние объекта
|
||||
@ -158,7 +157,7 @@ trashId: Annotated[int, Form()] = None):
|
||||
@app.delete("/api/announcement") #адрес объявления
|
||||
def delete_from_db(annoncement: schemas.DelAnnouncement): # функция удаления объекта из БД
|
||||
try:
|
||||
to_delete = database.query(Announcement).filter(Announcement.id==announcement.id).first()
|
||||
to_delete = database.query(models.Announcement).filter(models.Announcement.id==announcement.id).first()
|
||||
database.delete(to_delete) # удаление из БД
|
||||
database.commit() # сохраняем изменения
|
||||
return {"Answer" : True}
|
||||
@ -171,7 +170,7 @@ def delete_from_db(annoncement: schemas.DelAnnouncement): # функция у
|
||||
def change_book_status(data: schemas.Book):
|
||||
try:
|
||||
# Находим объявление по данному id
|
||||
announcement_to_change = database.query(Announcement).filter(Announcement.id == data.id).first()
|
||||
announcement_to_change = database.query(models.Announcement).filter(Announcement.id == data.id).first()
|
||||
# Изменяем поле booked_status на полученный id
|
||||
announcement_to_change.booked_status += 1
|
||||
return {"Success": True}
|
||||
@ -183,8 +182,8 @@ def change_book_status(data: schemas.Book):
|
||||
# {"id":1, "email":"poopka@mail.ru", "password":"good", "name":"Vasya", "surname":"Poopkin"}
|
||||
@app.post("/api/signup")
|
||||
def create_user(data = Body()):
|
||||
if database.query(UserDatabase).filter(UserDatabase.email == data["email"]).first() == None:
|
||||
new_user = UserDatabase(email=data["email"], hashed_password=get_password_hash(data["password"]),
|
||||
if database.query(models.User).filter(models.User.email == data["email"]).first() == None:
|
||||
new_user = models.User(email=data["email"], hashed_password=get_password_hash(data["password"]),
|
||||
name=data["name"], surname=data["surname"])
|
||||
database.add(new_user)
|
||||
database.commit()
|
||||
@ -193,7 +192,7 @@ def create_user(data = Body()):
|
||||
return {"Success": False, "Message": "Пользователь с таким email уже зарегестрирован,"}
|
||||
|
||||
|
||||
@app.post("/api/token", response_model=Token)
|
||||
@app.post("/api/token", response_model=schemas.Token)
|
||||
async def login_for_access_token(
|
||||
form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
|
||||
):
|
||||
@ -211,11 +210,11 @@ 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=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/items/")
|
||||
|
@ -1,4 +1,4 @@
|
||||
from sqlalchemy import Column, Integer, String, Boolean, Float, DateTime, Date
|
||||
from sqlalchemy import Column, Integer, String, Boolean, Float, DateTime, Date, ForeignKey
|
||||
from fastapi import Depends
|
||||
from .db import Base, engine
|
||||
from sqlalchemy.orm import relationship
|
||||
@ -25,7 +25,7 @@ class Announcement(Base): #класс объявления
|
||||
__tablename__ = "announcements"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)#айди объявления
|
||||
user_id = Column(Integer)#айди создателя объявления
|
||||
owner_id = Column(Integer, ForeignKey("users.id"))#айди создателя объявления
|
||||
name = Column(String) # название объявления
|
||||
category = Column(String)#категория продукта из объявления
|
||||
best_by = Column(Date)#срок годности продукта из объявления
|
||||
|
@ -10,8 +10,7 @@ from sqlalchemy.orm import Session
|
||||
from sqlalchemy import select
|
||||
|
||||
# from .db import Session, database
|
||||
from .models import User
|
||||
from .schemas import Token, TokenData, UserInDB, User
|
||||
from . import models, schemas
|
||||
|
||||
|
||||
|
||||
@ -33,7 +32,7 @@ def get_password_hash(password):
|
||||
|
||||
# проблема здесь
|
||||
def get_user(db: Session, email: str):
|
||||
user_with_required_email = db.query(User).filter(User.email == email).first()
|
||||
user_with_required_email = db.query(models.User).filter(models.User.email == email).first()
|
||||
if user_with_required_email:
|
||||
return user_with_required_email
|
||||
return None
|
||||
@ -70,17 +69,17 @@ async def get_current_user(db: Session, token: Annotated[str, Depends(oauth2_sch
|
||||
email: str = payload.get("sub")
|
||||
if email is None:
|
||||
raise credentials_exception
|
||||
token_data = TokenData(email=email)
|
||||
token_data = schemas.TokenData(email=email)
|
||||
except JWTError:
|
||||
raise credentials_exception
|
||||
user = get_user(db, email=token_data.email)
|
||||
if user is None:
|
||||
raise credentials_exception
|
||||
return User.from_orm(user)
|
||||
return schemas.User.from_orm(user)
|
||||
|
||||
|
||||
async def get_current_active_user(
|
||||
current_user: Annotated[User, Depends(get_current_user)]
|
||||
current_user: Annotated[schemas.User, Depends(get_current_user)]
|
||||
):
|
||||
if current_user.disabled:
|
||||
raise HTTPException(status_code=400, detail="Inactive user")
|
||||
|
Reference in New Issue
Block a user