diff --git a/back/db.py b/back/db.py new file mode 100644 index 0000000..54778ff --- /dev/null +++ b/back/db.py @@ -0,0 +1,13 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker, Session + +SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db" + +engine = create_engine( + SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} +) + +SessionLocal = sessionmaker(autoflush=True, bind=engine) + +Base = declarative_base() diff --git a/back/db_manipultations.py b/back/db_manipultations.py new file mode 100644 index 0000000..364762b --- /dev/null +++ b/back/db_manipultations.py @@ -0,0 +1,40 @@ +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", adress="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", adress="abd", longtitude=50, latitude=12, +description="vvv", src="110", metro="Petrogradskaya", booked_by=2) + +a3 = Announcement(user_id=1, category="a", best_by="221223", adress="abd", longtitude=20, latitude=25, +description="vvv", src="101", metro="metro", booked_by=2) + +trash1 = Trashbox(name="Tom", adress="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() \ No newline at end of file diff --git a/back/main.py b/back/main.py index 18a852e..542152a 100644 --- a/back/main.py +++ b/back/main.py @@ -5,105 +5,36 @@ from fastapi.staticfiles import StaticFiles from fastapi.security import OAuth2PasswordRequestForm, OAuth2PasswordBearer from fastapi.templating import Jinja2Templates from fastapi.requests import Request -from sqlalchemy import create_engine -from sqlalchemy import Column, Integer, String -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker, Session +from fastapi.middleware.cors import CORSMiddleware + from pydantic import json + from starlette.staticfiles import StaticFiles -from app.utils import * + import requests from uuid import uuid4 -SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db" -engine = create_engine( - SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} -) +from .utils import * +from .models import Announcement, Trashbox, UserDatabase, Base +from .db import engine, SessionLocal -Base = declarative_base() - -class UserDatabase(Base):#класс пользователя - __tablename__ = "users" - - id = Column(Integer, primary_key=True, index=True)#айди пользователя - phone = Column(Integer, nullable=True)#номер телефона пользователя - email = Column(String)#электронная почта пользователя - password = Column(String) # пароль - hashed_password = Column(String) - name = Column(String, nullable=True)#имя пользователя - surname = Column(String)#фамилия пользователя - - -class Announcement(Base): #класс объявления - __tablename__ = "announcements" - - id = Column(Integer, primary_key=True, index=True)#айди объявления - user_id = Column(Integer)#айди создателя объявления - name = Column(String) # название объявления - category = Column(String)#категория продукта из объявления - best_by = Column(Integer)#срок годности продукта из объявления - adress = Column(String) - longtitude = Column(Integer) - latitude = Column(Integer) - description = Column(String)#описание продукта в объявлении - src = Column(String, nullable=True) #изображение продукта в объявлении - metro = Column(String)#ближайщее метро от адреса нахождения продукта - trashId = Column(Integer, nullable=True) - booked_by = Column(Integer)#статус бронирования (либо -1, либо айди бронирующего) - - -class Trashbox(Base):#класс мусорных баков - __tablename__ = "trashboxes" - - id = Column(Integer, primary_key=True, index=True)#айди - name = Column(String, nullable=True)#имя пользователя - adress = Column(String) - latitude = Column(Integer) - longtitude = Column(Integer) - category = Column(String)#категория продукта из объявления - Base.metadata.create_all(bind=engine) -SessionLocal = sessionmaker(autoflush=True, 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", adress="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", adress="abd", longtitude=50, latitude=12, -description="vvv", src="110", metro="Petrogradskaya", booked_by=2) - -a3 = Announcement(user_id=1, category="a", best_by="221223", adress="abd", longtitude=20, latitude=25, -description="vvv", src="101", metro="metro", booked_by=2) - -trash1 = Trashbox(name="Tom", adress="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() - -# Непосредственно преложение app = FastAPI() +# CORS fix for development +app.add_middleware( + CORSMiddleware, + allow_origins=["http://localhost:5173"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + templates = Jinja2Templates(directory="./front/dist") app.mount("/static", StaticFiles(directory = "./front/dist")) diff --git a/back/models.py b/back/models.py new file mode 100644 index 0000000..be1504c --- /dev/null +++ b/back/models.py @@ -0,0 +1,45 @@ +from sqlalchemy import Column, Integer, String + +from .db import Base + + +class UserDatabase(Base):#класс пользователя + __tablename__ = "users" + + id = Column(Integer, primary_key=True, index=True)#айди пользователя + phone = Column(Integer, nullable=True)#номер телефона пользователя + email = Column(String)#электронная почта пользователя + password = Column(String) # пароль + hashed_password = Column(String) + name = Column(String, nullable=True)#имя пользователя + surname = Column(String)#фамилия пользователя + + +class Announcement(Base): #класс объявления + __tablename__ = "announcements" + + id = Column(Integer, primary_key=True, index=True)#айди объявления + user_id = Column(Integer)#айди создателя объявления + name = Column(String) # название объявления + category = Column(String)#категория продукта из объявления + best_by = Column(Integer)#срок годности продукта из объявления + adress = Column(String) + longtitude = Column(Integer) + latitude = Column(Integer) + description = Column(String)#описание продукта в объявлении + src = Column(String, nullable=True) #изображение продукта в объявлении + metro = Column(String)#ближайщее метро от адреса нахождения продукта + trashId = Column(Integer, nullable=True) + booked_by = Column(Integer)#статус бронирования (либо -1, либо айди бронирующего) + + +class Trashbox(Base):#класс мусорных баков + __tablename__ = "trashboxes" + + id = Column(Integer, primary_key=True, index=True)#айди + name = Column(String, nullable=True)#имя пользователя + adress = Column(String) + latitude = Column(Integer) + longtitude = Column(Integer) + category = Column(String)#категория продукта из объявления +