diff --git a/backend/crud.py b/backend/crud.py new file mode 100644 index 00000000..136a2aeb --- /dev/null +++ b/backend/crud.py @@ -0,0 +1,19 @@ +from sqlalchemy.orm import Session +from . import models, schemas + +def create_user(db: Session, user: schemas.UserCreate): + db_user = models.User(**user.dict()) + db.add(db_user) + db.commit() + db.refresh(db_user) + return db_user + +def get_user(db: Session, user_id: int): + return db.query(models.User).filter(models.User.id == user_id).first() + +def create_task(db: Session, task: schemas.TaskCreate): + db_task = models.Task(**task.dict()) + db.add(db_task) + db.commit() + db.refresh(db_task) + return db_task \ No newline at end of file diff --git a/backend/database.py b/backend/database.py new file mode 100644 index 00000000..79bc4090 --- /dev/null +++ b/backend/database.py @@ -0,0 +1,10 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker + +SQLALCHEMY_DATABASE_URL = "postgresql://user:password@localhost/dbname" + +engine = create_engine(SQLALCHEMY_DATABASE_URL) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) + +Base = declarative_base() \ No newline at end of file diff --git a/backend/main.py b/backend/main.py new file mode 100644 index 00000000..da14dc14 --- /dev/null +++ b/backend/main.py @@ -0,0 +1,11 @@ +from fastapi import FastAPI +from .routers import user, task +from .database import engine +from .models import Base + +app = FastAPI() + +Base.metadata.create_all(bind=engine) + +app.include_router(user.router) +app.include_router(task.router) \ No newline at end of file diff --git a/backend/models.py b/backend/models.py new file mode 100644 index 00000000..1e49ede6 --- /dev/null +++ b/backend/models.py @@ -0,0 +1,23 @@ +from sqlalchemy import Column, Integer, String +from .database import Base + +class User(Base): + __tablename__ = "users" + + id = Column(Integer, primary_key=True, index=True) + phone_number = Column(String, unique=True, index=True) + first_name = Column(String) + last_name = Column(String) + middle_name = Column(String) + address = Column(String) + email = Column(String, unique=True) + password = Column(String) + +class Task(Base): + __tablename__ = "tasks" + + id = Column(Integer, primary_key=True, index=True) + title = Column(String) + description = Column(String) + status = Column(String) # Например, "В ожидании", "На рассмотрении", "Завершено" + user_id = Column(Integer) # ID пользователя, создавшего задачу \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 00000000..cca2776a --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,5 @@ +fastapi +uvicorn +sqlalchemy +psycopg2-binary +pydantic \ No newline at end of file diff --git a/backend/routers/task.py b/backend/routers/task.py new file mode 100644 index 00000000..0883f310 --- /dev/null +++ b/backend/routers/task.py @@ -0,0 +1,26 @@ +from fastapi import APIRouter, Depends +from sqlalchemy.orm import Session +from .. import crud, schemas +from ..database import SessionLocal + +router = APIRouter() + +@router.post("/tasks/", response_model=schemas.TaskCreate) +def create_task(task: schemas.TaskCreate, db: Session = Depends(SessionLocal)): + return crud.create_task(db=db, task=task) + +@router.get("/tasks/{task_id}", response_model=schemas.TaskCreate) +def read_task(task_id: int, db: Session = Depends(SessionLocal)): + task = crud.get_task(db=db, task_id=task_id) + if task is None: + raise HTTPException(status_code=404, detail="Task not found") + return task + +@router.post("/tasks/{task_id}/like") +def like_task(task_id: int, db: Session = Depends(get_db)): + task = crud.get_task(db, task_id) + if task: + task.likes += 1 + db.commit() + return task + raise HTTPException(status_code=404, detail="Task not found") \ No newline at end of file diff --git a/backend/routers/user.py b/backend/routers/user.py new file mode 100644 index 00000000..8b0a0c22 --- /dev/null +++ b/backend/routers/user.py @@ -0,0 +1,10 @@ +from fastapi import APIRouter, Depends +from sqlalchemy.orm import Session +from .. import crud, schemas +from ..database import SessionLocal + +router = APIRouter() + +@router.post("/users/", response_model=schemas.UserCreate) +def create_user(user: schemas.UserCreate, db: Session = Depends(SessionLocal)): + return crud.create_user(db=db, user=user) \ No newline at end of file diff --git a/backend/schemas.py b/backend/schemas.py new file mode 100644 index 00000000..cd24ebd8 --- /dev/null +++ b/backend/schemas.py @@ -0,0 +1,16 @@ +from pydantic import BaseModel + +class UserCreate(BaseModel): + phone_number: str + first_name: str + last_name: str + middle_name: str + address: str + email: str + password: str + +class TaskCreate(BaseModel): + title: str + description: str + status: str + user_id: int \ No newline at end of file