Skip to content

Commit

Permalink
crud_com(1.0)
Browse files Browse the repository at this point in the history
  • Loading branch information
giicoo committed Apr 6, 2023
1 parent 560cc4e commit 7f61950
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 41 deletions.
5 changes: 3 additions & 2 deletions docs/metadata_tags.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
tags_metadata = [
{
'name': 'user',
'description': '### ОПЕРАЦИИ С ПОЛЬЗОВАТЕЛЯМИ'
'description': ' _ОПЕРАЦИИ С ПОЛЬЗОВАТЕЛЯМИ_'
},
{
'name': 'book'
'name': 'book',
'description': '_ОПЕРАЦИИ С КНИГАМИ_'
}
]
58 changes: 47 additions & 11 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
from typing import Union, List

from sqlalchemy.orm import Session
import docs
from sql_app.database import SessionLocal, get_db
from sql_app import crud, schems, models
from fastapi import FastAPI, Request, Form, Depends, HTTPException
from sql_app.database import get_db
from sql_app import crud, schems
from fastapi import FastAPI, Depends

app = FastAPI(
title='fastAPI_CRUD',
version='0.0.1',
contact={
'name': 'Artem',
'url': 'https://github.com/Inott-git'
},
openapi_tags=docs.tags_metadata
)

Expand All @@ -27,24 +29,58 @@ async def add_user(user: schems.UserCreate, session: Session = Depends(get_db)):

@app.post('/add_book', response_model=schems.Book, tags=['book'])
async def add_book(book: schems.BookCreate, session: Session = Depends(get_db)):
"""
Добавляет книгу для пользователя
+ _title: str_
+ _author: str_
+ _user_id: int_
Возвращает книгу
"""
return crud.create_book(session=session, book=book)


@app.get("/get_user", response_model=schems.User, tags=['user'])
async def get_user(user_id: int, session: Session = Depends(get_db)):
"""
Получает пользователя
+ _user_id: int_
Возвращает пользователя
"""
return crud.get_user(session=session, user_id=user_id)


@app.get('/get_book_for_user', tags=['user'], response_model=list[schems.Book])
async def get_book_for_user(user_id: int, session: Session = Depends(get_db)):
return crud.get_user(session=session, user_id=user_id).books

"""
Получает книги пользователя
+ _user_id: int_
@app.get('/get_book_by_title', response_model=list[schems.Book], tags=['book'])
async def get_book_by_title(title: str, session: Session = Depends(get_db)):
return crud.get_book_by_title(session=session, title=title)
Возвращает список книг
"""
return crud.get_user(session=session, user_id=user_id).books


@app.delete('/delete_user', tags=['user'])
async def delete_user(user_id: int, session: Session = Depends(get_db)):
return crud.delete_user(session=session, user_id=user_id)
"""
Удаляет пользвателя
+ _user_id: int_
Возвращает успех или, если не найден пользователь, то ошибка
"""
return crud.delete_user(session=session, user_id=user_id)


@app.put('/update_user', tags=['user'], response_model=schems.User)
async def update_user(user: schems.UserUpdate, session: Session = Depends(get_db)):
"""
Обновляет пользвателя
+ _user_id: int_
+ _login: str_
+ _password: str_
Возвращает пользователя без пароля в целях безопастности
"""
return crud.update_user(session=session, user=user)
30 changes: 21 additions & 9 deletions sql_app/crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,34 @@ def get_user(session: Session, user_id: int):
}
return user


def add_book(session: Session, user: schems.User, book: schems.Book):
db_book = models.Book(title=book.title, author=book.author, user_id=user.id)
db_book = models.Book(title=book.title, author=book.author, user_id=user.user_id)
session.add(db_book)
return db_book


def get_book_by_title(session: Session, title: str):
return session.query(models.Book).filter(models.Book.title == title).all()


def get_books_by_user(session: Session):
return session.query(models.User).get('books')


def delete_user(session: Session, user_id: int):
db_user = session.query(models.User).get(user_id)
if db_user == None:
return {"user_id": -1,
"login": '',
"book": []
}
session.delete(db_user)
session.commit()
return 'DELETE USER SUCCESSFULLY'


def update_user(session: Session, user: schems.UserUpdate):
db_user = session.query(models.User).get(user.user_id)
if db_user == None:
return {"user_id": -1,
"login": '',
"book": []
}
db_user.login = user.login
db_user.password = user.password
session.refresh(db_user)
session.commit()
return db_user
Binary file modified sql_app/database.db
Binary file not shown.
1 change: 1 addition & 0 deletions sql_app/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

Base = declarative_base()


def get_db():
db = SessionLocal()
try:
Expand Down
19 changes: 13 additions & 6 deletions sql_app/schems.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
from typing import List

from fastapi import HTTPException
from pydantic import BaseModel, validator, validate_arguments, root_validator
from pydantic import BaseModel, root_validator


class BookBase(BaseModel):
title: str
author: str
user_id: int

class Config:
orm_mode=True
orm_mode = True


class BookCreate(BookBase):
pass


class Book(BookBase):
book_id: int


class UserBase(BaseModel):
login: str


class User(UserBase):
user_id: int
books: list[Book] = []
Expand All @@ -30,10 +32,15 @@ def val(cls, value: dict):
return {'status_code': 100, 'detail': 'User not found'}
return value


class Config:
orm_mode = True


class UserUpdate(UserBase):
user_id: int
password: str


class UserCreate(UserBase):
password: str

Expand Down
13 changes: 0 additions & 13 deletions test_main.http

This file was deleted.

0 comments on commit 7f61950

Please sign in to comment.