Skip to content

Commit

Permalink
Merge pull request #34 from UnBArqDsw2022-1/feature/#1
Browse files Browse the repository at this point in the history
Feature/#1
  • Loading branch information
JoaoP-Coelho authored Sep 1, 2022
2 parents 98c986e + 6ab779a commit cd01a24
Show file tree
Hide file tree
Showing 8 changed files with 161 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ dmypy.json
# Cython debug symbols
cython_debug/


.vscode
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
Expand Down
4 changes: 3 additions & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from src.schemas.aluno import AlunoSchema

from db.database import get_session
from src.api.routers.routers import api_router

from sqlalchemy.ext.asyncio import AsyncSession

Expand All @@ -12,8 +13,9 @@
# Exemplos apenas para teste

app = FastAPI()
app.include_router(api_router)

@app.get('/')
@app.get('/', status_code=status.HTTP_200_OK)
def teste():
return {"teste": "teste"}

Expand Down
12 changes: 12 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
alembic==1.8.1
anyio==3.6.1
asyncpg==0.26.0
attrs==22.1.0
certifi==2022.6.15
charset-normalizer==2.1.1
click==8.1.3
fastapi==0.79.1
greenlet==1.1.2
h11==0.13.0
idna==3.3
iniconfig==1.1.1
Mako==1.2.1
MarkupSafe==2.1.1
packaging==21.3
pluggy==1.0.0
psycopg2-binary==2.9.3
py==1.11.0
pydantic==1.9.2
pyparsing==3.0.9
pytest==7.1.2
requests==2.28.1
sniffio==1.2.0
SQLAlchemy==1.4.40
starlette==0.19.1
tomli==2.0.1
typing_extensions==4.3.0
urllib3==1.26.12
uvicorn==0.18.2
29 changes: 29 additions & 0 deletions src/api/endpoints/professor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from fastapi import APIRouter, status, Depends

from typing import List

from src.schemas.professor import ProfessorSchema
from sqlalchemy.ext.asyncio import AsyncSession

from src.repositories.professor import ProfessorRepository

from db.database import get_session


router = APIRouter()

professor_repository = ProfessorRepository()


@router.post('/', status_code=status.HTTP_201_CREATED, response_model=ProfessorSchema)
async def create_professor(
professor: ProfessorSchema,
db: AsyncSession=Depends(get_session)):
professor = await professor_repository.create(professor=professor, db=db)
return professor


@router.delete('/{professor_id}', status_code=status.HTTP_202_ACCEPTED)
async def delete_professor(professor_id: int, db: AsyncSession=Depends(get_session)):
result = await professor_repository.delete(id=professor_id, db=db)
return result
9 changes: 9 additions & 0 deletions src/api/routers/routers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from fastapi import APIRouter

from src.api.endpoints import professor


api_router = APIRouter()
api_router.include_router(professor.router,
prefix='/professor',
tags=['professor'])
48 changes: 48 additions & 0 deletions src/repositories/professor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from typing import List

from src.models.professor import ProfessorModel

from fastapi import HTTPException, status

from src.schemas.professor import ProfessorSchema

from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select


class ProfessorRepository:

async def professor_existe(self, id: int, db: AsyncSession):
async with db as session:
query_professor = select(ProfessorModel).filter(ProfessorModel.id == id)
result = await session.execute(query_professor)
professor = result.scalar()

if not professor:
return None
return professor

async def create(self, professor: ProfessorSchema, db: AsyncSession):
novo_professor: ProfessorModel = ProfessorModel(**professor.dict())

try:
db.add(novo_professor)
await db.commit()
except Exception as error:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND, detail=error)

return novo_professor

async def delete(self, id: int, db: AsyncSession):
professor = await self.professor_existe(id=id, db=db)

if not professor:
raise HTTPException(detail='Usuario não encontrado',
status_code=status.HTTP_404_NOT_FOUND)

async with db as session:
await session.delete(professor)
await session.commit()

return dict(message = "Usuario deletado com sucesso")
Empty file added test/__init__.py
Empty file.
58 changes: 58 additions & 0 deletions test/tests_professor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from fastapi.testclient import TestClient

from main import app


client = TestClient(app, base_url="http://localhost")


def test_post_professor_status():
response = client.post(
url="/professor/99"
)
assert response.status_code == 405


def test_post_professor_json():
response = client.post(
url="/professor/",
json={ "id": 1000,
"nome": "Joãozinho",
"email": "[email protected]",
"senha": "bekoajnsd",
"numero_telefone": "81556698899",
"dt_nascumento": "1985-08-02 17:41:02.621282",
"created_at": "2022-08-02 17:41:02.621282",
"matricula": 150123654,
"is_coordenador": False}
)
assert response.status_code == 201
assert response.json() == {
"id": 1000,
"nome": "Joãozinho",
"email": "[email protected]",
"senha": "bekoajnsd",
"numero_telefone": "81556698899",
"dt_nascimento": None,
"created_at": "2022-08-02T17:41:02.621282",
"matricula": 150123654,
"is_coordenador": False
}


def test_post_professor_json_url():
response = client.post(
url="/professor",
json={ "nome": "Elaine",
"email": "[email protected]",
"senha": "bekoajnasdasd21312sd",
"numero_telefone": "815566988499",
"dt_nascumento": "1985-08-02 17:41:02.621282",
"created_at": "2022-08-02 17:41:02.621282",
"matricula": 43120123654,
"is_coordenador": False}
)
assert response.status_code == 307



0 comments on commit cd01a24

Please sign in to comment.