From 1906ebe8a12e230f56b1d41d91edb259d7a5f7a7 Mon Sep 17 00:00:00 2001 From: Emanoel Sabino <105612311+emanoelsabino@users.noreply.github.com> Date: Sun, 3 Mar 2024 00:01:54 -0300 Subject: [PATCH 01/10] Add requirements.txt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Criação do arquivo requirements.txt com os pacotes necessários para executar a api --- .gitignore | 1 + requirements.txt | Bin 0 -> 536 bytes 2 files changed, 1 insertion(+) create mode 100644 .gitignore create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..f5e96dbf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +venv \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..b17c7938334f79f7b812c3ae928cfdeda8d617a7 GIT binary patch literal 536 zcmZ9J!A`?45Jcx(iBAF5Eo!-N;LfGu1F9-@OGGhIQxN@m;Ef$e5wcc^yt6a2rNBIiI56!_?})sTnx~>xJy^MH@Zq3I7dVBUxNW9`Csr x@+wK3hduo=HId~+t-Mr==22TP-)!M@`mFA+r<}nw#ZP_ZUA;vbd97Ss{sE3tO|t+1 literal 0 HcmV?d00001 From 30f7ae51b0dd143c95c65a77af522a96a1ab36f0 Mon Sep 17 00:00:00 2001 From: Emanoel Sabino <105612311+emanoelsabino@users.noreply.github.com> Date: Sun, 3 Mar 2024 00:07:11 -0300 Subject: [PATCH 02/10] Add main.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instanciando o FastAPI, criaçao de um get de exemplo para pagina inicial --- main.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 00000000..38a53b0f --- /dev/null +++ b/main.py @@ -0,0 +1,13 @@ +from fastapi import FastAPI +import uvicorn + + +app = FastAPI() + +@app.get("/") +def pagina_inicial(): + return {"Olá FastAPI": "Olá FastAPI"} + + +if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=8000) From 901094be95d870b5563eede4636b428afa38998a Mon Sep 17 00:00:00 2001 From: Emanoel Sabino <105612311+emanoelsabino@users.noreply.github.com> Date: Sun, 3 Mar 2024 00:10:28 -0300 Subject: [PATCH 03/10] Add database.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Configurando a conexão com db SQLite --- app/db/database.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 app/db/database.py diff --git a/app/db/database.py b/app/db/database.py new file mode 100644 index 00000000..ceeedf0f --- /dev/null +++ b/app/db/database.py @@ -0,0 +1,9 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker + +# Configurando a conexão com o banco de dados SQLite +SQLALCHEMY_DATABASE_URL = "sqlite:///./filmes.db" +engine = create_engine(SQLALCHEMY_DATABASE_URL) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) +Base = declarative_base() From dd3a7c9e58ba289caa300e99b7cc71d0fce56b20 Mon Sep 17 00:00:00 2001 From: Emanoel Sabino <105612311+emanoelsabino@users.noreply.github.com> Date: Sun, 3 Mar 2024 00:22:50 -0300 Subject: [PATCH 04/10] Add filmes_model Definindo o modelo de dados do filme --- app/model/filmes_model.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 app/model/filmes_model.py diff --git a/app/model/filmes_model.py b/app/model/filmes_model.py new file mode 100644 index 00000000..1e4afcad --- /dev/null +++ b/app/model/filmes_model.py @@ -0,0 +1,20 @@ +from pydantic import BaseModel +from sqlalchemy import Column, Integer, String +from app.db.database import * + + +# Definindo o modelo de dados do filme +class Filme(Base): + __tablename__ = "filmes" + + id = Column(Integer, primary_key=True, index=True) + titulo = Column(String) + lancamento = Column(Integer) + +# Criando as tabelas no banco de dados, se não existirem +Base.metadata.create_all(bind=engine) + +# Criando classe de modelo para receber dados de entrada no POST +class FilmeCreate(BaseModel): + titulo: str + lancamento: int From be7587a43ded500fd294a60575659cc4105f9225 Mon Sep 17 00:00:00 2001 From: Emanoel Sabino <105612311+emanoelsabino@users.noreply.github.com> Date: Sun, 3 Mar 2024 00:36:27 -0300 Subject: [PATCH 05/10] Add routers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Configurando as rotas para executar o get e post dos filmes, executando o main.py já é possível testar os get e post --- app/routers/filmes_routers.py | 34 ++++++++++++++++++++++++++++++++++ main.py | 4 ++++ 2 files changed, 38 insertions(+) create mode 100644 app/routers/filmes_routers.py diff --git a/app/routers/filmes_routers.py b/app/routers/filmes_routers.py new file mode 100644 index 00000000..bfaa0567 --- /dev/null +++ b/app/routers/filmes_routers.py @@ -0,0 +1,34 @@ +from fastapi import APIRouter, HTTPException +from app.db.database import * +from app.model.filmes_model import * + +# Configurando a rota filmes +router = APIRouter(prefix="/filmes") + +# Rota para listar todos os filmes +@router.get("") +def listar_filmes(): + db = SessionLocal() + filmes = db.query(Filme).all() + return filmes + + +# Rota para listar filme por id +@router.get("/{filme_id}") +def listar_filme_por_id(filme_id: int): + db = SessionLocal() + filme = db.query(Filme).filter(Filme.id == filme_id).first() + if filme is None: + raise HTTPException(status_code=404, detail="Filme não encontrado!") + return filme + + +# Rota para cadastrar um novo filme +@router.post("") +def cadastrar_filme(filme: FilmeCreate): + db = SessionLocal() + db_filme = Filme(**filme.model_dump()) + db.add(db_filme) + db.commit() + db.refresh(db_filme) + return db_filme diff --git a/main.py b/main.py index 38a53b0f..444aff11 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ from fastapi import FastAPI import uvicorn +from app.routers import filmes_routers app = FastAPI() @@ -9,5 +10,8 @@ def pagina_inicial(): return {"Olá FastAPI": "Olá FastAPI"} +# Configurando as rotas com o modulo filmes_routers +app.include_router(filmes_routers.router) + if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000) From 1da39413103e4452b1eb6ebbe67bcd9c6cd37e2b Mon Sep 17 00:00:00 2001 From: Emanoel Sabino <105612311+emanoelsabino@users.noreply.github.com> Date: Sun, 3 Mar 2024 00:39:33 -0300 Subject: [PATCH 06/10] update __pycache__ --- app/db/__pycache__/database.cpython-311.pyc | Bin 0 -> 641 bytes .../__pycache__/filmes_model.cpython-311.pyc | Bin 0 -> 1247 bytes .../__pycache__/filmes_routers.cpython-311.pyc | Bin 0 -> 2116 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/db/__pycache__/database.cpython-311.pyc create mode 100644 app/model/__pycache__/filmes_model.cpython-311.pyc create mode 100644 app/routers/__pycache__/filmes_routers.cpython-311.pyc diff --git a/app/db/__pycache__/database.cpython-311.pyc b/app/db/__pycache__/database.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1eb7e5a69de33440fa8ab65a8d45b43c14662ba6 GIT binary patch literal 641 zcmY*Wy>HV%6hFs~okR%%A+SothJ-TImROJ~gp_^>DFFeY1D2)e;(KXLd_Hq`0SXKm zyD+mdpdeKK07m`umvPD{^gcr01KC=F#^E$}cJi~ZafgfV&6s^v9R ziKAd2=m9Toncw+OIPgI_S9)`!NVs+-fpN-<$>nzMMYrAEe6s!Yb$_exFOBphMfP)dl#K%eElYvjL#Kml!JjZb>~%gVrI?N!_VKwzsrAi(q?DY?97{; WNjw0R`dWkn9G@MTAmd%Lpvn1%^ng6|3>hXS4R~?lC)7 za@``iaHJHDgakzjDkFr8)cGsU5mHW5MWQ0rAyZK?v+KjMfqDGqd(3?Mz4m#dQ3pM4 z{r?)TSpcsMGaT+QarCDqo&Wb5sg$YGj5fh#vJQ>Mto~k;hNn4vs zWcmV*vcN`p1p z-ok_hw9^T+TgZbl6yqcEnNC-j0vAxxL^h`(|2X^O-{njH)tb8#dzELae~tHQvxl|W zSGC#vM!zw(dv9;yxBI`}&lmdVzuB93TKVJB<4gH%GsV|KtGas5noiTH0uEd3=!(8} zQoy@_Had)4*HUyfWf_Xux)hEYDM~RXkV+I6jQKGQ%Pmhd4D*$NrUqqaQmAGa(j-YG z)k#P)T?#u&q!>4s3fCqK_3aRhx$LrrlhAYMk2dqgeDTp@|J+!EUGl>K zK84-+w?_KzM0E~`yVLj=CjWuSr|UhKJcOxNFx7*pfoGBN0elL3t+z({?lY<)tsejc CJu)@` literal 0 HcmV?d00001 diff --git a/app/routers/__pycache__/filmes_routers.cpython-311.pyc b/app/routers/__pycache__/filmes_routers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56311fb51fedaa45419842372406ae9ef71e3cc8 GIT binary patch literal 2116 zcmb_c-A@}w5Z}E!pKW|+J{t(M#3e|P(}ujXDrzf~CJlmsAxemp5=-vkUAGr(pSyQf z2{qDTAq67TRBEH-5vd7HMgEKa12(dRbrLU)`p~Dk;w=wVXV3UEG*4aa&hE_4%-zgy zW`9xD4g}-QUoYv8B0?`YQyaj$z?>J7;zD(o7Lb4_CgKZe z7bCO>t2!1v)UzYkxaOUBS~ZEhfp$S*udcM{{ZCtOo2`%f5(4pWNNpbc;K7Zs?)3QZ z+Sfa106YX<^PmvrCJL*6a=WnL_&>WoeZ$CFlsW3u!ou~dD{-2!bR!+c4nDu?y_nFG zDQW^IXBbWBD-Mb`f14+jucK8UkC9bR6lx284du{I({00vB{j~iY1pYj)=+>`Yf9E| z4nshAE-X39O=_C(@3Tf+OFEu!vXtF(Jd->EN7Rx@h*uy>j$Dn&6u?<1^yYjlc<)-M46jG zGg@^VJ7&i+_Z&5;gEfm)Z&(+6(htjg4~UKa@V~V+ygh7RE~}jnZ$G&Gh;GHUV+U$z zUkw%2k&-%MPnHAScH{`u(Q4r0cdnn9PSzY>?HF&)D$k{h$M0}>BOZ{q{|Ap|{O;DV z%%NqTU(|-Ehs)YW8=^u^u)8g_p+zteUWmKkZ_o9~Z}K=N0PfP9{u9KXJq4mk4s{aZw!{E?!vGBocAs8tJBc))Z z;ER+4UG^;FpJ1nfv=o610=EbpIJ~(Ctfm$tSm#YzPcazRM=L~6@%MO5fC6f=uB)P) z&Ghe78GD8^*YejkSBla=Ng60f1LZ)k zJ?}y~7ginb@w>zL&$*T8bi!LRMwZ5iW@$^BNu5(%;Kn>wEzFq9ICAv`a>TEw<-R$N zs6#vOqI9H;VOmbWZI&yHYEbe#K=w8#Zawj;e&zcVTxFAVg7K${KQZPZkcx;gE~EDg zC(SZ?r%;<^G+L<5ii|pXH%~ta7yP3||7giSYRe!KeD??QgPWJvhc|{Rf{1%62*}?e z61r-FU`;7f#DgU~SP?w9d*^Hg!PX$$WTESj*`Jv4l>t{C3R0J9KJ^7@9U~3R= M(S3Z`kh Date: Sun, 3 Mar 2024 01:06:36 -0300 Subject: [PATCH 07/10] =?UTF-8?q?Configura=C3=A7=C3=A3o=20Docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Atualização do projeto com a criação do Dockerfile, docker-compose.yml para executar em container Docker --- .dockerignore | 3 +++ Dockerfile | 11 +++++++++++ .../__pycache__/filmes_model.cpython-311.pyc | Bin 1247 -> 1128 bytes app/model/filmes_model.py | 2 -- docker-compose.yml | 7 +++++++ filmes.db | Bin 0 -> 12288 bytes main.py | 4 ++++ 7 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 filmes.db diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..00b2642b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +venv +.git +.gitignore \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..2bb95bb8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM python:3.11 + +WORKDIR /app + +COPY ./requirements.txt . + +RUN pip install -r requirements.txt + +COPY . /app + +CMD [ "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000" ] diff --git a/app/model/__pycache__/filmes_model.cpython-311.pyc b/app/model/__pycache__/filmes_model.cpython-311.pyc index c796927f54e33cde991621fc6d2a34214a3a228f..c284f4fbaa6229dd6b064b6046d6528c12c06ee8 100644 GIT binary patch delta 144 zcmcc5`GSLYIWI340}!}>eVl4Okyny2ZKArT5)*?vLke39LkfE;<1%IjhSfj}0a2VO z9Kj5loEuNPW}Lj6X$qSJP`pTDawxM2JBaD0$u)TbvzulSSX=}oDGDOQfW$8jo80`A b(wtPgA_X9q5r~WDPnKoLXB3;fg2fyF4P74_ delta 240 zcmaFCai5cSIWI340}yz=dYo!Jkyny&&O~+3h*b70PLL=FEC9&Q8z;SHS5C`zxq*xM=cq=(M7r}yf(YwaFYB8po#$peptW63F`4AJK2QPg?-@q5~ z;HIh4iw{uw51ZLxXLm_{w+tVARV6epUNc$I3EN|wvvVTGn7MxRv%g_I!!j#cSPQWFMiM1mWuVY zk+>Ei1%rr!N8djp+p1LcmKHSf!rqM+)+?#ZXEICjs`xojuil6KJ1-p5tr)M~!0y)n z=G^&YdLSSG0SG_<0uX=z1Rwwb2tWV=5ZF$EecobchF4OrP^BzssIr$dDJhmTQn74* m*!sJ;^TqT)KmY;|fB*y_009U<00Izz00bcL4+Tuqvc3Vx>QY7k literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 444aff11..afbca9c2 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,12 @@ from fastapi import FastAPI import uvicorn from app.routers import filmes_routers +from app.db.database import * +# Criando as tabelas no banco de dados, se não existirem +Base.metadata.create_all(bind=engine) + app = FastAPI() @app.get("/") From e95d2fa20ae9e16381d65dc44d1cddf4258ae44d Mon Sep 17 00:00:00 2001 From: Emanoel Sabino <105612311+emanoelsabino@users.noreply.github.com> Date: Sun, 3 Mar 2024 01:20:09 -0300 Subject: [PATCH 08/10] update readme.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit atualização do README.md descrevendo como subir sua aplicação --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 5c3393a9..dc5c165a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# Descrição de como utilizar no final + ![WATTIO](http://wattio.com.br/web/image/1204-212f47c3/Logo%20Wattio.png) #### Descrição @@ -35,3 +37,14 @@ Não é obrigatório utilizar todas as as tecnologias sugeridas, mas será um di Qualquer dúvida / sugestão / melhoria / orientação adicional só enviar email para hendrix@wattio.com.br Salve! + +Descrição de como executar o código: + +1. Para executar diretamento o arquivo main.py com o Python é necessário instalar os pacotes listados em requirements.txt + - pip install -r requirements.txt + +2. Para executar pelo Docker, foi utilizado o Python na versão 3.11, e configurdo o docker-compose.yml + - Obs. está utilizando a porta 8000 + - docker-compose up + +3. Após executar basta abrir o navegador em localhost:8000/docs para ter acesso aos get e post para listar e cadastrar filmes From 53f5a96dcbb4fd0f02a58b94cd5543cd76103dc1 Mon Sep 17 00:00:00 2001 From: Emanoel Sabino <105612311+emanoelsabino@users.noreply.github.com> Date: Sun, 3 Mar 2024 01:23:55 -0300 Subject: [PATCH 09/10] Update README.md --- README.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index dc5c165a..45b4a83d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,14 @@ -# Descrição de como utilizar no final +# Descrição de como executar o código: + +### 1. Para executar diretamento o arquivo main.py com o Python é necessário instalar os pacotes listados em requirements.txt + - pip install -r requirements.txt + +### 2. Para executar pelo Docker, foi utilizado o Python na versão 3.11, e configurdo o docker-compose.yml + - Obs. está utilizando a porta 8000 + - docker-compose up + +### 3. Após executar basta abrir o navegador em localhost:8000/docs para ter acesso aos get e post para listar e cadastrar filmes + ![WATTIO](http://wattio.com.br/web/image/1204-212f47c3/Logo%20Wattio.png) @@ -37,14 +47,3 @@ Não é obrigatório utilizar todas as as tecnologias sugeridas, mas será um di Qualquer dúvida / sugestão / melhoria / orientação adicional só enviar email para hendrix@wattio.com.br Salve! - -Descrição de como executar o código: - -1. Para executar diretamento o arquivo main.py com o Python é necessário instalar os pacotes listados em requirements.txt - - pip install -r requirements.txt - -2. Para executar pelo Docker, foi utilizado o Python na versão 3.11, e configurdo o docker-compose.yml - - Obs. está utilizando a porta 8000 - - docker-compose up - -3. Após executar basta abrir o navegador em localhost:8000/docs para ter acesso aos get e post para listar e cadastrar filmes From 687b5218ea2a009eb82af2432a44711acc21c18b Mon Sep 17 00:00:00 2001 From: Emanoel Sabino <105612311+emanoelsabino@users.noreply.github.com> Date: Sun, 3 Mar 2024 01:26:03 -0300 Subject: [PATCH 10/10] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 45b4a83d..54d304f0 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Descrição de como executar o código: -### 1. Para executar diretamento o arquivo main.py com o Python é necessário instalar os pacotes listados em requirements.txt +### 1. Para executar diretamente o arquivo main.py com o Python é necessário instalar os pacotes listados em requirements.txt - pip install -r requirements.txt -### 2. Para executar pelo Docker, foi utilizado o Python na versão 3.11, e configurdo o docker-compose.yml +### 2. Para executar pelo Docker, foi utilizado o Python na versão 3.11, e configurado o docker-compose.yml - Obs. está utilizando a porta 8000 - docker-compose up