From 22d113ebd43d7029babe16ae3252f3b585f3a4d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D0=BB=D0=B8=D0=B3=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE?= Date: Sun, 9 Feb 2025 21:26:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20backend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/crud.py | 19 +++++++++++++++++++ backend/database.py | 10 ++++++++++ backend/main.py | 11 +++++++++++ backend/models.py | 23 +++++++++++++++++++++++ backend/requirements.txt | 5 +++++ backend/routers/task.py | 26 ++++++++++++++++++++++++++ backend/routers/user.py | 10 ++++++++++ backend/schemas.py | 16 ++++++++++++++++ 8 files changed, 120 insertions(+) create mode 100644 backend/crud.py create mode 100644 backend/database.py create mode 100644 backend/main.py create mode 100644 backend/models.py create mode 100644 backend/requirements.txt create mode 100644 backend/routers/task.py create mode 100644 backend/routers/user.py create mode 100644 backend/schemas.py 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