-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpasso1_authoritative_source_api.py
More file actions
92 lines (76 loc) · 2.92 KB
/
Copy pathpasso1_authoritative_source_api.py
File metadata and controls
92 lines (76 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
"""
PASSO 1 - Authoritative Source (o "RH/Protheus" da simulacao).
Esta API REST representa a FONTE DA VERDADE sobre as pessoas.
No mundo real, seria o Protheus. Aqui, e uma API FastAPI que, quando
o SailPoint ISC faz um GET, devolve a "Identity" de um funcionario em JSON.
Como rodar (com o .venv ativado, dentro da pasta do projeto):
uvicorn passo1_authoritative_source_api:app --reload
Depois abra no navegador:
http://127.0.0.1:8000/funcionarios -> lista todos
http://127.0.0.1:8000/funcionarios/1001 -> um funcionario
http://127.0.0.1:8000/docs -> documentacao automatica (Swagger)
"""
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
# 1) O "molde" de uma Identity. O Pydantic valida que todo funcionario
# tem exatamente estes campos, com estes tipos. Se faltar algo, a API avisa.
class Funcionario(BaseModel):
id: int
nome: str
email: str
departamento: str
cargo: str
status: str # "ativo" ou "inativo" -> o ISC usa isso para criar/desativar a Identity
# 2) O "banco de dados" fake, em memoria. No real, isto viria de uma query
# no Protheus. A chave do dicionario e o id do funcionario.
FUNCIONARIOS: dict[int, Funcionario] = {
1001: Funcionario(
id=1001,
nome="Ana Souza",
email="ana.souza@empresa.com",
departamento="Financeiro",
cargo="Analista Financeiro",
status="ativo",
),
1002: Funcionario(
id=1002,
nome="Bruno de Lima Inácio",
email="bruno.lima@empresa.com",
departamento="TI",
cargo="Administrador de Sistemas",
status="ativo",
),
1003: Funcionario(
id=1003,
nome="Carla Mendes",
email="carla.mendes@empresa.com",
departamento="RH",
cargo="Coordenadora de RH",
status="inativo",
),
}
# 3) Cria a aplicacao. O 'title' e a 'description' aparecem na pagina /docs.
app = FastAPI(
title="RH API - Authoritative Source (SailPoint ISC Lab)",
description="Fonte da verdade das identidades, simulando o Protheus.",
version="1.0.0",
)
# 4) Rota raiz: util so para confirmar que a API esta no ar.
@app.get("/")
def raiz():
return {"servico": "RH API - Authoritative Source", "status": "online"}
# 5) Aggregation completa: o ISC pede TODOS os funcionarios de uma vez.
@app.get("/funcionarios", response_model=list[Funcionario])
def listar_funcionarios():
return list(FUNCIONARIOS.values())
# 6) Busca de UMA Identity especifica pelo id.
# Se nao existir, devolvemos 404 (e o jeito certo de dizer "nao encontrei").
@app.get("/funcionarios/{funcionario_id}", response_model=Funcionario)
def obter_funcionario(funcionario_id: int):
funcionario = FUNCIONARIOS.get(funcionario_id)
if funcionario is None:
raise HTTPException(
status_code=404,
detail=f"Funcionario com id {funcionario_id} nao encontrado.",
)
return funcionario