Compare commits

..

No commits in common. "main" and "MVPTN-126" have entirely different histories.

120 changed files with 378 additions and 1668 deletions

View file

@ -1,9 +1,13 @@
# Usa a imagem oficial do Python
FROM python:3.12-slim FROM python:3.12-slim
# Define diretório de trabalho no container
WORKDIR /app WORKDIR /app
# Copia o arquivo de dependências
COPY requirements.txt . COPY requirements.txt .
# Instala dependências no sistema e no Python
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
gcc libffi-dev libssl-dev python3-dev firebird-dev \ gcc libffi-dev libssl-dev python3-dev firebird-dev \
&& pip install --upgrade pip \ && pip install --upgrade pip \
@ -12,13 +16,11 @@ RUN apt-get update && apt-get install -y \
&& apt-get autoremove -y \ && apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
# =============================== # Copia o restante do projeto para o container
# CRIA DIRETÓRIOS NECESSÁRIOS
# ===============================
RUN mkdir -p storage/temp
COPY . . COPY . .
# Expõe a porta padrão do Uvicorn/FastAPI
EXPOSE 8000 EXPOSE 8000
CMD ["gunicorn", "main:app", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:8000"] # Comando para iniciar o servidor
CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port 8000"]

219
README.md
View file

@ -1,12 +1,12 @@
# Configuração do Projeto Python # Configuração do Projeto Python
Este guia descreve o passo a passo para configurar o ambiente de desenvolvimento e produção de um projeto Python, incluindo ambiente virtual, dependências, banco de dados, e ajuste de desempenho com múltiplos núcleos. Este guia descreve o passo a passo para configurar o ambiente de desenvolvimento de um projeto Python, incluindo a preparação do ambiente virtual, instalação de dependências e configuração do banco de dados.
--- ---
## 1. Clonar o Projeto ## 1. Clonar o Projeto
Clone o repositório do projeto a partir do Git: Primeiro, clone o repositório do projeto a partir do Git:
```bash ```bash
git clone https://git.oriustecnologia.com/OriusTecnologia/saas_api.git git clone https://git.oriustecnologia.com/OriusTecnologia/saas_api.git
@ -16,7 +16,7 @@ git clone https://git.oriustecnologia.com/OriusTecnologia/saas_api.git
## 2. Criar o Ambiente Virtual ## 2. Criar o Ambiente Virtual
Crie um **ambiente virtual** isolado para o projeto: O uso de um **ambiente virtual** garante que as bibliotecas instaladas para este projeto não afetem o Python global da sua máquina.
```bash ```bash
python -m venv venv python -m venv venv
@ -26,13 +26,14 @@ python -m venv venv
## 3. Ativar o Ambiente Virtual ## 3. Ativar o Ambiente Virtual
Ative o ambiente virtual antes de instalar as dependências: Ative o ambiente virtual antes de instalar as dependências ou executar a aplicação.
```bash ```bash
venv\Scripts\activate venv\Scripts\activate
``` ```
> **Em sistemas Linux/Mac:** > **Observação:**
> Em sistemas Unix (Linux/Mac), o comando pode ser:
> >
> ```bash > ```bash
> source venv/bin/activate > source venv/bin/activate
@ -42,11 +43,9 @@ venv\Scripts\activate
## 4. Instalar Dependências do Sistema ## 4. Instalar Dependências do Sistema
O projeto depende de compiladores nativos para algumas bibliotecas Python. A biblioteca de criptografia utilizada no projeto requer uma extensão da Microsoft para ser instalada.
Baixe e instale o **Microsoft C++ Build Tools** através do link abaixo:
### Windows
Baixe e instale o **Microsoft C++ Build Tools**:
[https://visualstudio.microsoft.com/pt-br/visual-cpp-build-tools/](https://visualstudio.microsoft.com/pt-br/visual-cpp-build-tools/) [https://visualstudio.microsoft.com/pt-br/visual-cpp-build-tools/](https://visualstudio.microsoft.com/pt-br/visual-cpp-build-tools/)
Durante a instalação, selecione o pacote: Durante a instalação, selecione o pacote:
@ -55,15 +54,6 @@ Durante a instalação, selecione o pacote:
Desktop Development With C++ Desktop Development With C++
``` ```
### Linux
Execute no terminal:
```bash
sudo apt update
sudo apt install -y build-essential libpq-dev
```
--- ---
## 5. Instalar as Bibliotecas do Projeto ## 5. Instalar as Bibliotecas do Projeto
@ -76,21 +66,21 @@ pip install -r requirements.txt
--- ---
## 6. Configurar o Banco de Dados (Firebird) ## 6. Configurar o Banco de Dados
O projeto utiliza o banco **Firebird**. O projeto utiliza um banco **Firebird**.
Edite o arquivo de configuração em: Edite o arquivo de configuração localizado em:
``` ```
api/config/database/firebird.json api/config/database/firebird.json
``` ```
Exemplo: Exemplo do conteúdo padrão:
```json ```json
{ {
"host": "localhost", "host": "localhost",
"name": "/data/base/CAIAPONIA.FDB", "name": "D:/Orius/Base/CAIAPONIA.FDB",
"port": 3050, "port": 3050,
"user": "SYSDBA", "user": "SYSDBA",
"password": "", "password": "",
@ -103,179 +93,50 @@ Exemplo:
} }
``` ```
**Campos principais:** ### Ajustes Necessários:
| Campo | Descrição | * **host**: Endereço do servidor do banco de dados.
| ------------------- | ---------------------------------- | * **name**: Caminho completo do arquivo `.FDB`.
| `host` | Endereço do servidor Firebird | * **port**: Porta do Firebird (padrão: `3050`).
| `name` | Caminho completo do arquivo `.FDB` | * **user**: Usuário do banco de dados.
| `port` | Porta padrão `3050` | * **password**: Senha do usuário configurado.
| `user` | Usuário do banco |
| `password` | Senha do usuário |
| `charset` | Codificação (UTF8 recomendado) |
| `pool.size` | Número de conexões fixas |
| `pool.max_overflow` | Conexões extras sob demanda |
--- ---
## 7. Modo Desenvolvimento ## 7. Iniciar a Aplicação
Para ambiente local, execute: Com o ambiente virtual **ativado**, execute o comando abaixo para iniciar a aplicação:
```bash ```bash
uvicorn main:app --reload uvicorn main:app --reload
``` ```
> O parâmetro `--reload` reinicia automaticamente a aplicação ao detectar alterações no código. > **Dica:**
> O parâmetro `--reload` reinicia automaticamente a aplicação sempre que houver alterações no código.
Acesse: ---
``` ## 8. Testando a Aplicação
Após iniciar a aplicação, abra o navegador e acesse o seguinte endereço:
```http
http://localhost:8000/docs http://localhost:8000/docs
``` ```
--- Você deverá visualizar a interface do **Swagger**, onde estarão listados todos os endpoints disponíveis da API.
## 8. Modo Produção > **Observação:**
> O Swagger permite testar os endpoints diretamente pelo navegador, sem necessidade de ferramentas externas como Postman ou Insomnia.
A execução em produção varia conforme o sistema operacional.
--- ---
### **Windows (modo produção simulado)** ## Resumo dos Comandos
O **Gunicorn** não é compatível com Windows, pois depende do módulo `fcntl` exclusivo de sistemas Unix. | Etapa | Comando |
Portanto, em ambiente Windows, recomenda-se usar o **Uvicorn** diretamente com múltiplos *workers*: | ----------------------- | ------------------------------------------------------------------------------- |
| Clonar o projeto | `git clone https://git.oriustecnologia.com/OriusTecnologia/saas_api.git` |
```bash | Criar ambiente virtual | `python -m venv venv` |
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4 | Ativar ambiente virtual | `venv\Scripts\activate` *(Windows)*<br>`source venv/bin/activate` *(Linux/Mac)* |
``` | Instalar dependências | `pip install -r requirements.txt` |
| Iniciar a aplicação | `uvicorn main:app --reload` |
> O parâmetro `--workers` define quantos processos simultâneos serão utilizados.
> Idealmente, use `(número_de_CPUs * 2) + 1`.
#### Alternativa compatível (Windows)
Instale e use o **Hypercorn**, uma alternativa semelhante ao Gunicorn:
```bash
pip install hypercorn
hypercorn main:app --workers 4 --bind 0.0.0.0:8000
```
---
### **Linux (modo produção real)**
Em ambientes Linux (ou Docker), utilize o **Gunicorn** com o **Uvicorn Worker** para obter o máximo desempenho.
#### Instalar Gunicorn (caso ainda não instalado)
```bash
pip install gunicorn uvicorn
```
#### Executar com múltiplos núcleos
```bash
gunicorn main:app \
-k uvicorn.workers.UvicornWorker \
--workers 4 \
--bind 0.0.0.0:8000 \
--timeout 120 \
--log-level info
```
#### Parâmetros principais
| Parâmetro | Função |
| ---------------------------------- | ---------------------------------------- |
| `-k uvicorn.workers.UvicornWorker` | Usa o Uvicorn como worker ASGI |
| `--workers 4` | Define o número de núcleos usados |
| `--bind 0.0.0.0:8000` | Expõe a aplicação em todas as interfaces |
| `--timeout 120` | Tempo limite de resposta (em segundos) |
| `--log-level info` | Define o nível de logs |
#### Dica de cálculo de workers
```
(número_de_CPUs * 2) + 1
```
Exemplo: servidor com 2 CPUs → `--workers 5`
---
### **Execução em segundo plano (Linux)**
Para rodar a aplicação continuamente:
```bash
nohup gunicorn main:app -k uvicorn.workers.UvicornWorker --workers 4 --bind 0.0.0.0:8000 &
```
Verifique se está rodando:
```bash
ps aux | grep gunicorn
```
---
## 9. Logs e Monitoramento
É possível direcionar os logs de acesso e erro para arquivos dedicados:
```bash
gunicorn main:app \
-k uvicorn.workers.UvicornWorker \
--workers 4 \
--bind 0.0.0.0:8000 \
--access-logfile logs/access.log \
--error-logfile logs/error.log
```
---
## 10. Estrutura Recomendada de Deploy
```
/app
├── main.py
├── api/
├── packages/
├── requirements.txt
├── logs/
│ ├── access.log
│ └── error.log
└── systemd/
└── saas_api.service
```
---
## 11. Resumo dos Comandos
| Etapa | Comando |
| --------------------------- | ------------------------------------------------------------------------------------ |
| Clonar projeto | `git clone https://git.oriustecnologia.com/OriusTecnologia/saas_api.git` |
| Criar venv | `python -m venv venv` |
| Ativar venv | `venv\Scripts\activate` *(Windows)*<br>`source venv/bin/activate` *(Linux/Mac)* |
| Instalar dependências | `pip install -r requirements.txt` |
| Rodar em desenvolvimento | `uvicorn main:app --reload` |
| Rodar em produção (Windows) | `uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4` |
| Rodar em produção (Linux) | `gunicorn main:app -k uvicorn.workers.UvicornWorker --workers 4 --bind 0.0.0.0:8000` |
| Alternativa (Windows) | `hypercorn main:app --workers 4 --bind 0.0.0.0:8000` |
---
## 12. Recomendações Finais
* Em **Windows**, use Uvicorn ou Hypercorn apenas para testes e ambientes locais.
* Para **produção real**, use **Linux** com Gunicorn + Uvicorn Worker, idealmente em container **Docker**.
* Monitore o consumo de CPU/RAM e ajuste o número de *workers* conforme o ambiente.
* Automatize o serviço em produção via **systemd** (ex: `/etc/systemd/system/saas_api.service`) para iniciar junto com o servidor.
---
uvicorn main:app --host 0.0.0.0 --port 8000 --reload

View file

@ -1,4 +1,4 @@
from abc import abstractmethod from abc import ABC, abstractmethod
class BaseAction: class BaseAction:

View file

@ -11,10 +11,10 @@ class Config:
base_dir = Path(__file__).resolve().parent base_dir = Path(__file__).resolve().parent
# Caminho absoluto para o config.json (subindo dois níveis e entrando em config/) # Caminho absoluto para o config.json (subindo dois níveis e entrando em config/)
config_path = base_dir.parent.parent / "config" / name config_path = base_dir.parent.parent / 'config' / name
# Carrega o JSON como objeto acessível por ponto # Carrega o JSON como objeto acessível por ponto
with open(config_path, "r") as f: with open(config_path, 'r') as f:
config = json.load(f, object_hook=lambda d: SimpleNamespace(**d)) config = json.load(f, object_hook=lambda d: SimpleNamespace(**d))
return config return config

View file

@ -1,31 +0,0 @@
import time
class Microtime:
"""
Utilitário para manipulação de tempo com alta precisão (microssegundos).
"""
@staticmethod
def get() -> float:
"""
Retorna o timestamp Unix atual com precisão de microssegundos.
Equivalente ao microtime(true) do PHP.
"""
return time.time()
@staticmethod
def as_int() -> int:
"""
Retorna o tempo atual puramente em microssegundos (Inteiro).
Útil para gerar IDs únicos ou ordenação precisa.
"""
# Pega em nanosegundos e converte para microssegundos
return time.time_ns() // 1000
@staticmethod
def diff(start_time: float) -> float:
"""
Calcula a diferença (duração) em segundos com precisão.
"""
return time.time() - start_time

View file

@ -1,111 +0,0 @@
# Importa a biblioteca nativa 'zlib' usada para compressão/descompressão de dados binários.
import zlib
# Importa a função 'rtf_to_text' da biblioteca 'striprtf',
# responsável por converter documentos RTF em texto plano legível.
from striprtf.striprtf import rtf_to_text
# Define uma classe utilitária chamada 'Text', contendo apenas métodos estáticos.
# Essa abordagem permite o uso direto sem necessidade de instanciar a classe.
class Text:
@staticmethod
def decompress(vf_string):
"""
Descomprime e decodifica texto de origem WPTools/Firebird.
Finalidade:
Converter o conteúdo de campos BLOB ou strings compactadas (como no Delphi)
em texto legível, detectando automaticamente se o conteúdo está:
- Compactado com zlib
- Codificado em ISO-8859-1 (padrão ANSI)
- Representado como bytes puros
"""
# Verifica se o valor recebido é nulo, vazio ou None.
if not vf_string:
return ""
# Caso seja um objeto tipo stream (ex: campo BLOB do Firebird)
if hasattr(vf_string, "read"):
vf_string = vf_string.read()
# Garante que o valor trabalhado é uma sequência de bytes
if isinstance(vf_string, str):
vf_bytes = vf_string.encode("latin1", errors="ignore")
else:
vf_bytes = vf_string
# Detecta assinatura zlib (0x78 0x9C ou 0x78 0xDA)
is_zlib = (
len(vf_bytes) > 2 and vf_bytes[0] == 0x78 and vf_bytes[1] in (0x9C, 0xDA)
)
# Se for zlib, tenta descompactar
if is_zlib:
try:
return zlib.decompress(vf_bytes).decode("iso-8859-1", errors="ignore")
except Exception:
pass
# Caso não seja zlib, trata como texto puro
try:
return vf_bytes.decode("iso-8859-1", errors="ignore")
except Exception:
return str(vf_string)
@staticmethod
def compress(text, *, encoding: str = "iso-8859-1"):
"""
Comprime texto/dados com zlib SEM Base64.
Parâmetros:
text: str | bytes | stream (com .read())
encoding: encoding usado quando 'text' for str (padrão: ISO-8859-1)
Retorno:
- bytes comprimidos (zlib)
Observações:
- Ideal para armazenamento direto em BLOB (Firebird, PostgreSQL, etc.)
- Evita overhead e custo do Base64
- Totalmente compatível com 'decompress'
"""
if text is None or text == "":
return b""
# Se for stream (ex.: BLOB do Firebird)
if hasattr(text, "read"):
raw = text.read()
else:
raw = text
# Garante bytes
if isinstance(raw, str):
raw_bytes = raw.encode(encoding, errors="ignore")
else:
raw_bytes = bytes(raw)
# Comprime com zlib e retorna bytes
return zlib.compress(raw_bytes)
@staticmethod
def to_text(raw_text: str) -> str:
"""
Converte o conteúdo RTF em texto simples e retorna como string.
Finalidade:
- Detectar automaticamente se o conteúdo está em formato RTF.
- Converter para texto plano usando a função 'rtf_to_text'.
- Retornar uma string limpa e pronta para uso.
"""
if not raw_text:
return ""
# Detecta cabeçalho RTF
if raw_text.strip().startswith("{\\rtf"):
try:
return rtf_to_text(raw_text).strip()
except Exception:
return raw_text
return raw_text.strip()

View file

@ -1,64 +0,0 @@
import importlib
import re
from functools import lru_cache
from typing import Type, TypeVar, Optional
from actions.config.config import Config
from actions.env.env_config_loader import EnvConfigLoader
# Genérico para garantir que o retorno respeite o Protocolo
T = TypeVar("T")
class ServiceFactory:
def __init__(self, package: str, table: str):
# Instancia o loader com o prefixo correto
env = EnvConfigLoader(".env")
# Ex: "packages.v1"
self.base_root = "packages.v1"
self.package = package
self.table = table
# Carrega config apenas uma vez
self.app_config = Config.get("app.json")
# Define a UF da aplicação
self.current_state = env.ORIUS_CLIENT_STATE
@lru_cache(maxsize=32)
def make(self, class_name: str, interface: Type[T]) -> T:
"""
Instancia um serviço dinamicamente com comportamento de Autoload.
"""
# 1. Converte CamelCase para snake_case (Autoload style)
# Ex: TAtoIndexService -> t_ato_index_service
module_name = re.sub(r"(?<!^)(?=[A-Z])", "_", class_name).lower()
# 2. Monta o caminho completo
# Ex: packages.v1.servicos.balcao.services.t_ato.SP.t_ato_index_service
import_path = (
f"{self.base_root}.{self.package}.services."
f"{self.table}.{self.current_state}.{module_name}"
)
try:
# 3. Importação Dinâmica
module = importlib.import_module(import_path)
# 4. Pega a classe do módulo
clazz = getattr(module, class_name)
# 5. Retorna a INSTÂNCIA da classe (já com () )
# Se seus serviços precisam de argumentos no __init__, altere aqui.
return clazz()
except ImportError as e:
raise ImportError(
f"FATAL: Não foi possível carregar o serviço '{class_name}' para o estado '{self.current_state}'.\nCaminho tentado: {import_path}\nErro: {e}"
)
except AttributeError:
raise AttributeError(
f"FATAL: O arquivo '{module_name}.py' existe, mas a classe '{class_name}' não foi encontrada dentro dele."
)

View file

@ -1,36 +0,0 @@
from dotenv import dotenv_values, load_dotenv
import os
class EnvConfigLoader:
"""
Classe para carregar todas as variáveis de ambiente (.env)
e permitir acesso via atributo (settings.VAR).
"""
def __init__(self, env_file: str = ".env"):
# Garante que o .env será carregado no ambiente do sistema
load_dotenv(env_file)
# Lê todas as variáveis (do arquivo + sistema)
self._values = {
**dotenv_values(env_file), # Conteúdo do .env
**os.environ, # Variáveis já existentes no ambiente
}
def __getattr__(self, name: str):
"""Permite acessar como settings.VAR"""
# Normaliza o nome para maiúsculo
key = name.upper()
if key in self._values:
return self._values[key]
raise AttributeError(f"A variável '{name}' não existe no .env")
def __repr__(self):
"""Exibe todas as variáveis carregadas"""
return f"<Settings {self._values}>"
def all(self) -> dict:
"""Retorna todas as variáveis como dicionário"""
return dict(self._values)

View file

@ -5,30 +5,32 @@ from pytz import timezone
from abstracts.action import BaseAction from abstracts.action import BaseAction
from actions.config.config import Config from actions.config.config import Config
class CreateToken(BaseAction): class CreateToken(BaseAction):
def __init__(self): def __init__(self):
# Busca as configurações da aplicação # Busca as configurações da aplicação
self.config = Config.get("app.json") self.config = Config.get('app.json')
# Cria o timedelta com base na config # Cria o timedelta com base na config
self.access_token_expire = timedelta( self.access_token_expire = timedelta(
minutes=self.config.jwt.expire.minute, minutes=self.config.jwt.expire.minute,
hours=self.config.jwt.expire.hours, hours=self.config.jwt.expire.hours,
days=self.config.jwt.expire.days, days=self.config.jwt.expire.days
) )
def execute(self, tipo_token: str, data: str) -> str: def execute(self, tipo_token: str, data : str) -> str:
sp = timezone("America/Sao_Paulo") sp = timezone('America/Sao_Paulo')
agora = datetime.now(tz=sp) agora = datetime.now(tz=sp)
expira = agora + self.access_token_expire expira = agora + self.access_token_expire
# Define os dados do token # Define os dados do token
payload = {"type": tipo_token, "exp": expira, "iat": agora, "data": str(data)} payload = {
'type' : tipo_token,
'exp' : expira,
'iat' : agora,
'data' : str(data)
}
# Retorna os dados codificados # Retorna os dados codificados
return jwt.encode( return jwt.encode(payload, self.config.jwt.token, algorithm=self.config.jwt.algorithm)
payload, self.config.jwt.token, algorithm=self.config.jwt.algorithm
)

View file

@ -1,4 +1,4 @@
from fastapi import Depends, HTTPException, status from fastapi import Depends, HTTPException, status, Request
from fastapi.security import OAuth2PasswordBearer from fastapi.security import OAuth2PasswordBearer
from actions.jwt.verify_token import VerifyToken # A classe que criamos anteriormente from actions.jwt.verify_token import VerifyToken # A classe que criamos anteriormente

View file

@ -1,4 +1,6 @@
from datetime import datetime
from jose import jwt, JWTError, ExpiredSignatureError from jose import jwt, JWTError, ExpiredSignatureError
from pytz import timezone
from actions.config.config import Config from actions.config.config import Config

View file

@ -1,4 +1,5 @@
from fastapi import Request, HTTPException, status from typing import Any, Optional
from fastapi import Depends, Request, HTTPException, status
def get_session_user(request: Request) -> dict: def get_session_user(request: Request) -> dict:

View file

@ -1,4 +1,5 @@
# handlers.py # handlers.py
import json
import traceback import traceback
from fastapi import Request from fastapi import Request
@ -12,58 +13,74 @@ from actions.log.log import Log
def register_exception_handlers(app): def register_exception_handlers(app):
def __init__(self): def __init__ (self):
log = Log() log = Log()
@app.exception_handler(BusinessRuleException) @app.exception_handler(BusinessRuleException)
async def business_rule_exception_handler( async def business_rule_exception_handler(request: Request, exc: BusinessRuleException):
request: Request, exc: BusinessRuleException
):
response = {"status": "422", "error": "Regra de negócio", "detail": exc.message}
response = {
"status": "422",
"error": "Regra de negócio",
"detail": exc.message
}
# Salva o log em disco # Salva o log em disco
Log.register(response, "storage/temp/business_rule_exception_handler.json") Log.register(response, 'storage/temp/business_rule_exception_handler.json')
return JSONResponse(status_code=422, content=response) return JSONResponse(
status_code=422,
content=response
)
@app.exception_handler(StarletteHTTPException) @app.exception_handler(StarletteHTTPException)
async def http_exception_handler(request: Request, exc: StarletteHTTPException): async def http_exception_handler(request: Request, exc: StarletteHTTPException):
response = { response = {
"status": exc.status_code, "status": exc.status_code,
"error": "HTTP Error", "error": "HTTP Error",
"detail": exc.detail, "detail": exc.detail
} }
# Salva o log em disco # Salva o log em disco
Log.register(response, "storage/temp/http_exception_handler.json") Log.register(response, 'storage/temp/http_exception_handler.json')
return JSONResponse(status_code=exc.status_code, content=response) return JSONResponse(
status_code=exc.status_code,
content=response
)
@app.exception_handler(RequestValidationError) @app.exception_handler(RequestValidationError)
async def validation_exception_handler( async def validation_exception_handler(request: Request, exc: RequestValidationError):
request: Request, exc: RequestValidationError
):
response = {"status": 400, "error": "Erro de validação", "detail": exc.errors()} response = {
"status": 400,
"error": "Erro de validação",
"detail": exc.errors()
}
# Salva o log em disco # Salva o log em disco
Log.register(response, "storage/temp/validation_exception_handler.json") Log.register(response, 'storage/temp/validation_exception_handler.json')
return JSONResponse(status_code=400, content=response) return JSONResponse(
status_code=400,
content=response
)
@app.exception_handler(Exception) @app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception): async def global_exception_handler(request: Request, exc: Exception):
response = { response = {
"status": 500, "status": 500,
"error": "Erro Interno do Servidor", "error": "Erro Interno do Servidor",
"type": type(exc).__name__, "type": type(exc).__name__,
"message": str(exc), "message": str(exc),
"trace": traceback.format_exc(), "trace": traceback.format_exc()
} }
# Salva o log em disco # Salva o log em disco
Log.register(response, "storage/temp/validation_exception_handler.json") Log.register(response, 'storage/temp/validation_exception_handler.json')
return JSONResponse(status_code=500, content=response) return JSONResponse(
status_code=500,
content=response
)

View file

@ -1,13 +0,0 @@
{
"host": "localhost",
"name": "/database/BASE.FDB",
"port": 3050,
"user": "SYSDBA",
"password": "302b3c",
"charset": "UTF8",
"pool" : {
"pre_ping" : true,
"size" : 5,
"max_overflow" :10
}
}

View file

@ -1,7 +1,8 @@
from typing import Optional from typing import Optional
from sqlalchemy import create_engine from sqlalchemy import create_engine
from sqlalchemy.engine import Engine from sqlalchemy.engine import Engine
from actions.env.env_config_loader import EnvConfigLoader
from actions.config.config import Config
class Firebird: class Firebird:
@ -9,29 +10,28 @@ class Firebird:
@classmethod @classmethod
def get_engine(cls) -> Engine: def get_engine(cls) -> Engine:
# Obtem as configurações do arquivo JSON
# Instancia o loader com o prefixo correto database = Config.get('database/firebird.json')
env_database = EnvConfigLoader(".env")
# Cria a engine apenas uma vez # Cria a engine apenas uma vez
if cls._engine is None: if cls._engine is None:
# DSN para o SQLAlchemy usando firebird-driver # DSN para o SQLAlchemy usando firebird-driver
dsn = ( dsn = (
f"firebird+firebird://{env_database.ORIUS_API_FDB_USER}:" f"firebird+firebird://{database.user}:"
f"{env_database.ORIUS_API_FDB_PASSWORD}@" f"{database.password}@"
f"{env_database.ORIUS_API_FDB_HOST}:" f"{database.host}:"
f"{env_database.ORIUS_API_FDB_PORT}/" f"{database.port}/"
f"{env_database.ORIUS_API_FDB_NAME}" f"{database.name}"
) )
# Criação da engine SQLAlchemy # Criação da engine SQLAlchemy
cls._engine = create_engine( cls._engine = create_engine(
dsn, dsn,
connect_args={"charset": env_database.ORIUS_API_FDB_CHARSET}, connect_args={"charset": database.charset},
pool_pre_ping=bool(env_database.ORIUS_API_FDB_POOL_PRE_PING), pool_pre_ping=bool(database.pool.pre_ping),
pool_size=int(env_database.ORIUS_API_FDB_POOL_SIZE), pool_size=database.pool.size,
max_overflow=int(env_database.ORIUS_API_FDB_POOL_MAX_OVERFLOW), max_overflow=database.pool.max_overflow,
) )
return cls._engine return cls._engine

17
env.bat
View file

@ -1,17 +0,0 @@
@echo off
echo === Registrando variáveis de ambiente ORIUS_API ===
setx ORIUS_API_FDB_HOST "localhost"
setx ORIUS_API_FDB_NAME "S:\Bases\SANTARITA.FDB"
setx ORIUS_API_FDB_PORT "3050"
setx ORIUS_API_FDB_USER "SYSDBA"
setx ORIUS_API_FDB_PASSWORD "302b3c"
setx ORIUS_API_FDB_CHARSET "UTF8"
setx ORIUS_API_FDB_POOL_PRE_PING "true"
setx ORIUS_API_FDB_POOL_SIZE "5"
setx ORIUS_API_FDB_POOL_MAX_OVERFLOW "10"
echo.
echo Variáveis ORIUS_API registradas com sucesso!
echo Reinicie o terminal ou o computador para aplicar as alterações.
pause

View file

@ -1,10 +0,0 @@
from typing import Protocol, Any, runtime_checkable
@runtime_checkable
class ServiceProtocolsInterface(Protocol):
"""
Contrato que garante que todo serviço tenha um método execute.
"""
def execute(self, schema: Any) -> Any: ...

13
main.py
View file

@ -16,7 +16,8 @@ from pathlib import Path
# Importa o middleware de CORS # Importa o middleware de CORS
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles from fastapi.responses import Response
from starlette.middleware.base import BaseHTTPMiddleware
# Importa o roteador principal da API versão 1 # Importa o roteador principal da API versão 1
from packages.v1.api import api_router from packages.v1.api import api_router
@ -33,9 +34,9 @@ if platform.system() == "Windows":
FB_DIR = r"C:\Program Files\Firebird\Firebird_4_0" FB_DIR = r"C:\Program Files\Firebird\Firebird_4_0"
os.add_dll_directory(FB_DIR) os.add_dll_directory(FB_DIR)
driver_config.fb_client_library.value = ( driver_config.fb_client_library.value = (
r"C:\Program Files\Firebird\Firebird_4_0\fbclient.dll" r"C:\Program Files\Firebird\Firebird_4_0\fbclient.dll"
) )
config = Config.get("app.json") config = Config.get("app.json")
@ -48,7 +49,7 @@ register_exception_handlers(app)
# Adiciona o middleware de CORS # Adiciona o middleware de CORS
app.add_middleware( app.add_middleware(
CORSMiddleware, CORSMiddleware,
allow_origins=["*"], # Domínio do frontend allow_origins=["http://localhost:3000"], # Domínio do frontend
allow_credentials=True, allow_credentials=True,
allow_methods=["*"], allow_methods=["*"],
allow_headers=["*"], allow_headers=["*"],
@ -63,8 +64,6 @@ app.add_middleware(
max_age=60 * 60 * 8, max_age=60 * 60 * 8,
) )
app.mount(path="/temp", app=StaticFiles(directory="./storage/temp"), name="temp")
@app.on_event("startup") @app.on_event("startup")
async def on_startup(): async def on_startup():

View file

@ -1,5 +1,7 @@
from packages.v1.administrativo.repositories.c_caixa_item.c_caixa_item_index import \ from packages.v1.administrativo.repositories.c_caixa_item.c_caixa_item_index import \
Index Index
from packages.v1.administrativo.schemas.c_caixa_item_schema import \
CaixaItemSearchSchema
from abstracts.action import BaseAction from abstracts.action import BaseAction

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.c_caixa_servico_schema import ( from packages.v1.administrativo.schemas.c_caixa_servico_schema import (
CCaixaServicoSchema,
CCaixaServicoSaveSchema, CCaixaServicoSaveSchema,
CCaixaServicoUpdateSchema, CCaixaServicoUpdateSchema,
CCaixaServicoIdSchema, CCaixaServicoIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_cidade_schema import ( from packages.v1.administrativo.schemas.g_cidade_schema import (
GCidadeSchema,
GCidadeSaveSchema, GCidadeSaveSchema,
GCidadeUpdateSchema, GCidadeUpdateSchema,
GCidadeIdSchema, GCidadeIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_emolumento_schema import ( from packages.v1.administrativo.schemas.g_emolumento_schema import (
GEmolumentoIndexSchema,
GEmolumentoSaveSchema, GEmolumentoSaveSchema,
GEmolumentoSistemaIdSchema, GEmolumentoSistemaIdSchema,
GEmolumentoUpdateSchema, GEmolumentoUpdateSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_marcacao_tipo_schema import ( from packages.v1.administrativo.schemas.g_marcacao_tipo_schema import (
GMarcacaoTipoSchema,
GMarcacaoTipoSaveSchema, GMarcacaoTipoSaveSchema,
GMarcacaoTipoUpdateSchema, GMarcacaoTipoUpdateSchema,
GMarcacaoTipoIdSchema, GMarcacaoTipoIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_medida_tipo_schema import ( from packages.v1.administrativo.schemas.g_medida_tipo_schema import (
GMedidaTipoSchema,
GMedidaTipoSaveSchema, GMedidaTipoSaveSchema,
GMedidaTipoUpdateSchema, GMedidaTipoUpdateSchema,
GMedidaTipoIdSchema, GMedidaTipoIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_tb_bairro_schema import ( from packages.v1.administrativo.schemas.g_tb_bairro_schema import (
GTbBairroSchema,
GTbBairroSaveSchema, GTbBairroSaveSchema,
GTbBairroUpdateSchema, GTbBairroUpdateSchema,
GTbBairroIdSchema, GTbBairroIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_tb_documentotipo_schema import ( from packages.v1.administrativo.schemas.g_tb_documentotipo_schema import (
GTbDocumentoTipoSchema,
GTbDocumentoTipoSaveSchema, GTbDocumentoTipoSaveSchema,
GTbDocumentoTipoUpdateSchema, GTbDocumentoTipoUpdateSchema,
GTbDocumentoTipoIdSchema, GTbDocumentoTipoIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_tb_estadocivil_schema import ( from packages.v1.administrativo.schemas.g_tb_estadocivil_schema import (
GTbEstadoCivilSchema,
GTbEstadoCivilSaveSchema, GTbEstadoCivilSaveSchema,
GTbEstadoCivilUpdateSchema, GTbEstadoCivilUpdateSchema,
GTbEstadoCivilIdSchema, GTbEstadoCivilIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_tb_profissao_schema import ( from packages.v1.administrativo.schemas.g_tb_profissao_schema import (
GTbProfissaoSchema,
GTbProfissaoSaveSchema, GTbProfissaoSaveSchema,
GTbProfissaoUpdateSchema, GTbProfissaoUpdateSchema,
GTbProfissaoIdSchema, GTbProfissaoIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_tb_regimebens_schema import ( from packages.v1.administrativo.schemas.g_tb_regimebens_schema import (
GTbRegimebensSchema,
GTbRegimebensSaveSchema, GTbRegimebensSaveSchema,
GTbRegimebensUpdateSchema, GTbRegimebensUpdateSchema,
GTbRegimebensIdSchema, GTbRegimebensIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_tb_regimecomunhao_schema import ( from packages.v1.administrativo.schemas.g_tb_regimecomunhao_schema import (
GTbRegimecomunhaoSchema,
GTbRegimecomunhaoSaveSchema, GTbRegimecomunhaoSaveSchema,
GTbRegimecomunhaoUpdateSchema, GTbRegimecomunhaoUpdateSchema,
GTbRegimecomunhaoIdSchema, GTbRegimecomunhaoIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_tb_tipologradouro_schema import ( from packages.v1.administrativo.schemas.g_tb_tipologradouro_schema import (
GTbTipoLogradouroSchema,
GTbTipoLogradouroSaveSchema, GTbTipoLogradouroSaveSchema,
GTbTipoLogradouroUpdateSchema, GTbTipoLogradouroUpdateSchema,
GTbTipoLogradouroIdSchema, GTbTipoLogradouroIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import ( from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import (
GTbTxmodelogrupoSchema,
GTbTxmodelogrupoSaveSchema, GTbTxmodelogrupoSaveSchema,
GTbTxmodelogrupoUpdateSchema, GTbTxmodelogrupoUpdateSchema,
GTbTxmodelogrupoIdSchema, GTbTxmodelogrupoIdSchema,

View file

@ -1,4 +1,7 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.g_uf_schema import (
GUfSchema
)
class GUfController: class GUfController:

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.t_ato_partetipo_schema import ( from packages.v1.administrativo.schemas.t_ato_partetipo_schema import (
TAtoParteTipoIndexSchema,
TAtoParteTipoSaveSchema, TAtoParteTipoSaveSchema,
TAtoParteTipoUpdateSchema, TAtoParteTipoUpdateSchema,
TAtoParteTipoIdSchema TAtoParteTipoIdSchema

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.t_censec_schema import ( from packages.v1.administrativo.schemas.t_censec_schema import (
TCensecSchema,
TCensecSaveSchema, TCensecSaveSchema,
TCensecUpdateSchema, TCensecUpdateSchema,
TCensecIdSchema, TCensecIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.t_censec_naturezalitigio_schema import ( from packages.v1.administrativo.schemas.t_censec_naturezalitigio_schema import (
TCensecNaturezalitigioSchema,
TCensecNaturezalitigioSaveSchema, TCensecNaturezalitigioSaveSchema,
TCensecNaturezalitigioUpdateSchema, TCensecNaturezalitigioUpdateSchema,
TCensecNaturezalitigioIdSchema, TCensecNaturezalitigioIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.t_censec_qualidade_schema import ( from packages.v1.administrativo.schemas.t_censec_qualidade_schema import (
TCensecQualidadeSchema,
TCensecQualidadeSaveSchema, TCensecQualidadeSaveSchema,
TCensecQualidadeUpdateSchema, TCensecQualidadeUpdateSchema,
TCensecQualidadeIdSchema, TCensecQualidadeIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.t_minuta_schema import ( from packages.v1.administrativo.schemas.t_minuta_schema import (
TMinutaSchema,
TMinutaSaveSchema, TMinutaSaveSchema,
TMinutaUpdateSchema, TMinutaUpdateSchema,
TMinutaIdSchema, TMinutaIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.t_servico_etiqueta_schema import ( from packages.v1.administrativo.schemas.t_servico_etiqueta_schema import (
TServicoEtiquetaSchema,
TServicoEtiquetaSaveSchema, TServicoEtiquetaSaveSchema,
TServicoEtiquetaUpdateSchema, TServicoEtiquetaUpdateSchema,
TServicoEtiquetaIdSchema, TServicoEtiquetaIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.t_tb_andamentoservico_schema import ( from packages.v1.administrativo.schemas.t_tb_andamentoservico_schema import (
TTbAndamentoservicoSchema,
TTbAndamentoservicoSaveSchema, TTbAndamentoservicoSaveSchema,
TTbAndamentoservicoUpdateSchema, TTbAndamentoservicoUpdateSchema,
TTbAndamentoservicoIdSchema, TTbAndamentoservicoIdSchema,

View file

@ -1,5 +1,6 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.t_tb_reconhecimentotipo_schema import ( from packages.v1.administrativo.schemas.t_tb_reconhecimentotipo_schema import (
TTbReconhecimentotipoSchema,
TTbReconhecimentotipoSaveSchema, TTbReconhecimentotipoSaveSchema,
TTbReconhecimentotipoUpdateSchema, TTbReconhecimentotipoUpdateSchema,
TTbReconhecimentotipoIdSchema, TTbReconhecimentotipoIdSchema,

View file

@ -1,8 +1,9 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.c_caixa_item_controller import CCaixaItemController from packages.v1.administrativo.controllers.c_caixa_item_controller import CCaixaItemController
from packages.v1.administrativo.schemas.c_caixa_item_schema import CaixaItemSchema from packages.v1.administrativo.schemas.c_caixa_item_schema import CaixaItemSchema, CaixaItemSearchSchema
# Inicializar o roteaodr para as rotas de produtos # Inicializar o roteaodr para as rotas de produtos
router = APIRouter() router = APIRouter()

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.c_caixa_servico_controller import CCaixaServicoController from packages.v1.administrativo.controllers.c_caixa_servico_controller import CCaixaServicoController
from packages.v1.administrativo.schemas.c_caixa_servico_schema import ( from packages.v1.administrativo.schemas.c_caixa_servico_schema import (

View file

@ -7,6 +7,7 @@ from packages.v1.administrativo.controllers.g_calculo_controller import (
from packages.v1.administrativo.schemas.g_calculo_schema import ( from packages.v1.administrativo.schemas.g_calculo_schema import (
GCalculoRapidoSchema, GCalculoRapidoSchema,
GCalculoServico, GCalculoServico,
ResponseGCalculoRapidoSchema,
) )
# ---------------------------------------------------- # ----------------------------------------------------

View file

@ -1,8 +1,10 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_cidade_controller import GCidadeController from packages.v1.administrativo.controllers.g_cidade_controller import GCidadeController
from packages.v1.administrativo.schemas.g_cidade_schema import ( from packages.v1.administrativo.schemas.g_cidade_schema import (
GCidadeSchema,
GCidadeSaveSchema, GCidadeSaveSchema,
GCidadeUpdateSchema, GCidadeUpdateSchema,
GCidadeIdSchema, GCidadeIdSchema,

View file

@ -6,6 +6,7 @@ from packages.v1.administrativo.controllers.g_emolumento_controller import (
GEmolumentoController, GEmolumentoController,
) )
from packages.v1.administrativo.schemas.g_emolumento_schema import ( from packages.v1.administrativo.schemas.g_emolumento_schema import (
GEmolumentoIndexSchema,
GEmolumentoSaveSchema, GEmolumentoSaveSchema,
GEmolumentoSistemaIdSchema, GEmolumentoSistemaIdSchema,
GEmolumentoUpdateSchema, GEmolumentoUpdateSchema,
@ -35,6 +36,9 @@ async def index(
current_user: dict = Depends(get_current_user), current_user: dict = Depends(get_current_user),
url_params=Depends(get_url_params), url_params=Depends(get_url_params),
): ):
print(url_params)
""" """
Retorna todos os registros da tabela G_EMOLUMENTO. Retorna todos os registros da tabela G_EMOLUMENTO.
""" """

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_marcacao_tipo_controller import GMarcacaoTipoController from packages.v1.administrativo.controllers.g_marcacao_tipo_controller import GMarcacaoTipoController
from packages.v1.administrativo.schemas.g_marcacao_tipo_schema import ( from packages.v1.administrativo.schemas.g_marcacao_tipo_schema import (

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_medida_tipo_controller import GMedidaTipoController from packages.v1.administrativo.controllers.g_medida_tipo_controller import GMedidaTipoController
from packages.v1.administrativo.schemas.g_medida_tipo_schema import ( from packages.v1.administrativo.schemas.g_medida_tipo_schema import (

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_natureza_controller import GNaturezaController from packages.v1.administrativo.controllers.g_natureza_controller import GNaturezaController
from packages.v1.administrativo.schemas.g_natureza_schema import ( from packages.v1.administrativo.schemas.g_natureza_schema import (

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_tb_bairro_controller import GTbBairroController from packages.v1.administrativo.controllers.g_tb_bairro_controller import GTbBairroController
from packages.v1.administrativo.schemas.g_tb_bairro_schema import ( from packages.v1.administrativo.schemas.g_tb_bairro_schema import (

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_tb_documentotipo_controller import GTbDocumentoTipoController from packages.v1.administrativo.controllers.g_tb_documentotipo_controller import GTbDocumentoTipoController
from packages.v1.administrativo.schemas.g_tb_documentotipo_schema import ( from packages.v1.administrativo.schemas.g_tb_documentotipo_schema import (

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_tb_estadocivil_controller import GTbEstadoCivilController from packages.v1.administrativo.controllers.g_tb_estadocivil_controller import GTbEstadoCivilController
from packages.v1.administrativo.schemas.g_tb_estadocivil_schema import ( from packages.v1.administrativo.schemas.g_tb_estadocivil_schema import (

View file

@ -1,8 +1,10 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_tb_profissao_controller import GTbProfissaoController from packages.v1.administrativo.controllers.g_tb_profissao_controller import GTbProfissaoController
from packages.v1.administrativo.schemas.g_tb_profissao_schema import ( from packages.v1.administrativo.schemas.g_tb_profissao_schema import (
GTbProfissaoSchema,
GTbProfissaoSaveSchema, GTbProfissaoSaveSchema,
GTbProfissaoUpdateSchema, GTbProfissaoUpdateSchema,
GTbProfissaoIdSchema, GTbProfissaoIdSchema,

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_tb_regimebens_controller import GTbRegimebensController from packages.v1.administrativo.controllers.g_tb_regimebens_controller import GTbRegimebensController
from packages.v1.administrativo.schemas.g_tb_regimebens_schema import ( from packages.v1.administrativo.schemas.g_tb_regimebens_schema import (

View file

@ -1,8 +1,10 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_tb_regimecomunhao_controller import GTbRegimecomunhaoController from packages.v1.administrativo.controllers.g_tb_regimecomunhao_controller import GTbRegimecomunhaoController
from packages.v1.administrativo.schemas.g_tb_regimecomunhao_schema import ( from packages.v1.administrativo.schemas.g_tb_regimecomunhao_schema import (
GTbRegimecomunhaoSchema,
GTbRegimecomunhaoSaveSchema, GTbRegimecomunhaoSaveSchema,
GTbRegimecomunhaoUpdateSchema, GTbRegimecomunhaoUpdateSchema,
GTbRegimecomunhaoDescricaoSchema, GTbRegimecomunhaoDescricaoSchema,

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_tb_tipologradouro_controller import GTbTipologradouroController from packages.v1.administrativo.controllers.g_tb_tipologradouro_controller import GTbTipologradouroController
from packages.v1.administrativo.schemas.g_tb_tipologradouro_schema import ( from packages.v1.administrativo.schemas.g_tb_tipologradouro_schema import (

View file

@ -1,6 +1,8 @@
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import ( from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import (
GTbTxmodelogrupoSchema,
GTbTxmodelogrupoSaveSchema, GTbTxmodelogrupoSaveSchema,
GTbTxmodelogrupoUpdateSchema, GTbTxmodelogrupoUpdateSchema,
GTbTxmodelogrupoDescricaoSchema, GTbTxmodelogrupoDescricaoSchema,

View file

@ -1,7 +1,9 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.g_uf_controller import GUfController from packages.v1.administrativo.controllers.g_uf_controller import GUfController
from packages.v1.administrativo.schemas.g_uf_schema import GUfSchema
# Inicializa o roteador para as rotas do tipo de reconhecimento # Inicializa o roteador para as rotas do tipo de reconhecimento
router = APIRouter() router = APIRouter()

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.t_censec_controller import TCensecController from packages.v1.administrativo.controllers.t_censec_controller import TCensecController
from packages.v1.administrativo.schemas.t_censec_schema import ( from packages.v1.administrativo.schemas.t_censec_schema import (

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.t_censec_naturezalitigio_controller import TCensecNaturezalitigioController from packages.v1.administrativo.controllers.t_censec_naturezalitigio_controller import TCensecNaturezalitigioController
from packages.v1.administrativo.schemas.t_censec_naturezalitigio_schema import ( from packages.v1.administrativo.schemas.t_censec_naturezalitigio_schema import (

View file

@ -1,12 +1,14 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.t_censec_qualidade_controller import TCensecQualidadeController from packages.v1.administrativo.controllers.t_censec_qualidade_controller import TCensecQualidadeController
from packages.v1.administrativo.schemas.t_censec_qualidade_schema import ( from packages.v1.administrativo.schemas.t_censec_qualidade_schema import (
TCensecQualidadeSchema, TCensecQualidadeSchema,
TCensecQualidadeSaveSchema, TCensecQualidadeSaveSchema,
TCensecQualidadeUpdateSchema, TCensecQualidadeUpdateSchema,
TCensecQualidadeIdSchema TCensecQualidadeIdSchema,
TCensecQualidadeDescricaoSchema
) )
# Inicializa o roteador para as rotas do tipo de reconhecimento # Inicializa o roteador para as rotas do tipo de reconhecimento

View file

@ -3,6 +3,7 @@ from fastapi import APIRouter, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.t_censec_tipoato_controller import TCensecTipoAtoController from packages.v1.administrativo.controllers.t_censec_tipoato_controller import TCensecTipoAtoController
from packages.v1.administrativo.schemas.t_censec_tipoato_schema import ( from packages.v1.administrativo.schemas.t_censec_tipoato_schema import (
TCensecTipoAtoIndexSchema,
TCensecTipoAtoSaveSchema, TCensecTipoAtoSaveSchema,
TCensecTipoAtoUpdateSchema, TCensecTipoAtoUpdateSchema,
TCensecTipoAtoIdSchema TCensecTipoAtoIdSchema

View file

@ -1,4 +1,5 @@
# Importação de bibliotecas # Importação de bibliotecas
from typing import Optional
from fastapi import APIRouter, Depends, status from fastapi import APIRouter, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.t_imovel_controller import TImovelController from packages.v1.administrativo.controllers.t_imovel_controller import TImovelController

View file

@ -1,4 +1,5 @@
# Importação de bibliotecas # Importação de bibliotecas
from typing import Optional
from fastapi import APIRouter, Depends, status from fastapi import APIRouter, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.t_imovel_unidade_controller import TImovelUnidadeController from packages.v1.administrativo.controllers.t_imovel_unidade_controller import TImovelUnidadeController

View file

@ -1,11 +1,14 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.t_minuta_controller import TMinutaController from packages.v1.administrativo.controllers.t_minuta_controller import TMinutaController
from packages.v1.administrativo.schemas.t_minuta_schema import ( from packages.v1.administrativo.schemas.t_minuta_schema import (
TMinutaSchema,
TMinutaSaveSchema, TMinutaSaveSchema,
TMinutaUpdateSchema, TMinutaUpdateSchema,
TMinutaIdSchema TMinutaIdSchema,
TMinutaDescricaoSchema
) )
# Inicializa o roteador para as rotas do tipo de reconhecimento # Inicializa o roteador para as rotas do tipo de reconhecimento

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.t_servico_etiqueta_controller import TServicoEtiquetaController from packages.v1.administrativo.controllers.t_servico_etiqueta_controller import TServicoEtiquetaController
from packages.v1.administrativo.schemas.t_servico_etiqueta_schema import ( from packages.v1.administrativo.schemas.t_servico_etiqueta_schema import (

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.t_tb_andamentoservico_controller import TTbAndamentoservicoController from packages.v1.administrativo.controllers.t_tb_andamentoservico_controller import TTbAndamentoservicoController
from packages.v1.administrativo.schemas.t_tb_andamentoservico_schema import ( from packages.v1.administrativo.schemas.t_tb_andamentoservico_schema import (

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from typing import Optional
from fastapi import APIRouter, Body, Depends, status
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.administrativo.controllers.t_tb_reconhecimentotipo_controller import TTbReconhecimentotipoController from packages.v1.administrativo.controllers.t_tb_reconhecimentotipo_controller import TTbReconhecimentotipoController
from packages.v1.administrativo.schemas.t_tb_reconhecimentotipo_schema import ( from packages.v1.administrativo.schemas.t_tb_reconhecimentotipo_schema import (

View file

@ -1,3 +1,4 @@
from packages.v1.administrativo.schemas.c_caixa_item_schema import CaixaItemSearchSchema
from abstracts.repository import BaseRepository from abstracts.repository import BaseRepository

View file

@ -1,6 +1,8 @@
from typing import List
from abstracts.repository import BaseRepository from abstracts.repository import BaseRepository
from packages.v1.administrativo.schemas.t_biometria_pessoa_schema import ( from packages.v1.administrativo.schemas.t_biometria_pessoa_schema import (
TBiometriaPessoaIndexSchema, TBiometriaPessoaIndexSchema,
TBiometriaPessoaResponseSchema,
) )

View file

@ -25,6 +25,8 @@ class TImovelIndexRepository(BaseRepository):
params = {"tipoClasse": t_imovel_index_schema.tipo_classe} params = {"tipoClasse": t_imovel_index_schema.tipo_classe}
print(params)
# Execução do sql # Execução do sql
response = self.fetch_all(sql, params) response = self.fetch_all(sql, params)

View file

@ -1,5 +1,6 @@
from abstracts.repository import BaseRepository from abstracts.repository import BaseRepository
from fastapi import HTTPException, status from fastapi import HTTPException, status
from datetime import datetime
from packages.v1.administrativo.schemas.t_pessoa_representante_schema import ( from packages.v1.administrativo.schemas.t_pessoa_representante_schema import (
TPessoaRepresentanteUpdateSchema, TPessoaRepresentanteUpdateSchema,

View file

@ -1,4 +1,4 @@
from datetime import date from datetime import date, datetime
from decimal import Decimal from decimal import Decimal
from typing import Optional from typing import Optional
from pydantic import BaseModel from pydantic import BaseModel

View file

@ -1,6 +1,7 @@
from pydantic import BaseModel, field_validator, model_validator from pydantic import BaseModel, field_validator, model_validator
from fastapi import HTTPException, status from fastapi import HTTPException, status
from typing import Optional, ClassVar, Dict from typing import Optional, ClassVar, Dict
from decimal import Decimal
# Assumindo que a classe Text está disponível no caminho 'actions.validations.text' # Assumindo que a classe Text está disponível no caminho 'actions.validations.text'
from actions.validations.text import Text from actions.validations.text import Text

View file

@ -1,6 +1,7 @@
from pydantic import BaseModel, field_validator, model_validator from pydantic import BaseModel, field_validator, model_validator
from fastapi import HTTPException, status from fastapi import HTTPException, status
from typing import Optional from typing import Optional
from decimal import Decimal
# Funções para sanitização de entradas (evitar XSS, SQLi etc.) # Funções para sanitização de entradas (evitar XSS, SQLi etc.)
from actions.validations.text import Text from actions.validations.text import Text

View file

@ -1,7 +1,9 @@
from pydantic import BaseModel from pydantic import BaseModel, field_validator, model_validator
from fastapi import HTTPException, status
from typing import Optional from typing import Optional
# Funções para sanitização de entradas (evitar XSS, SQLi etc.) # Funções para sanitização de entradas (evitar XSS, SQLi etc.)
from actions.validations.text import Text
# ---------------------------------------------------- # ----------------------------------------------------
# Schema base # Schema base

View file

@ -1,4 +1,4 @@
from pydantic import BaseModel, EmailStr, field_validator, model_validator from pydantic import BaseModel, EmailStr, constr, field_validator, model_validator
from fastapi import HTTPException, status from fastapi import HTTPException, status
from typing import Optional from typing import Optional
from datetime import datetime from datetime import datetime

View file

@ -1,7 +1,7 @@
from datetime import datetime from datetime import datetime
from decimal import Decimal from decimal import Decimal
from pydantic import BaseModel from pydantic import BaseModel
from typing import Optional from typing import Optional, List
# ---------------------------------------------------- # ----------------------------------------------------

View file

@ -1,7 +1,10 @@
from pydantic import BaseModel from pydantic import BaseModel, field_validator, model_validator
from fastapi import HTTPException, status
from typing import Optional from typing import Optional
from datetime import datetime
# Função de sanitização # Função de sanitização
from actions.validations.text import Text
# ---------------------------------------------------- # ----------------------------------------------------
# Schema base para TImovelUnidade # Schema base para TImovelUnidade

View file

@ -1,9 +1,11 @@
from pydantic import BaseModel, model_validator from pydantic import BaseModel, field_validator, model_validator
from fastapi import HTTPException, status from fastapi import HTTPException, status
from typing import Optional from typing import Optional
from decimal import Decimal
# Funções para sanitização de entradas (evitar XSS, SQLi etc.) # Funções para sanitização de entradas (evitar XSS, SQLi etc.)
# Assumindo que a classe Text está disponível no caminho 'actions.validations.text' # Assumindo que a classe Text está disponível no caminho 'actions.validations.text'
from actions.validations.text import Text
# ---------------------------------------------------- # ----------------------------------------------------
# Schema base # Schema base

View file

@ -1,4 +1,5 @@
from packages.v1.administrativo.actions.c_caixa_item.c_caixa_item_index_action import IndexAction from packages.v1.administrativo.actions.c_caixa_item.c_caixa_item_index_action import IndexAction
from packages.v1.administrativo.schemas.c_caixa_item_schema import CaixaItemSearchSchema
class IndexService: class IndexService:

View file

@ -1,3 +1,4 @@
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.c_caixa_servico_schema import CCaixaServicoSistemaIdSchema from packages.v1.administrativo.schemas.c_caixa_servico_schema import CCaixaServicoSistemaIdSchema
from packages.v1.administrativo.actions.c_caixa_servico.c_caixa_servico_get_by_sistema_id_action import ShowSistemaIdAction from packages.v1.administrativo.actions.c_caixa_servico.c_caixa_servico_get_by_sistema_id_action import ShowSistemaIdAction

View file

@ -1,4 +1,5 @@
from fastapi import HTTPException, status from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.c_caixa_servico_schema import CCaixaServicoSchema
from packages.v1.administrativo.actions.c_caixa_servico.c_caixa_servico_index_action import IndexAction from packages.v1.administrativo.actions.c_caixa_servico.c_caixa_servico_index_action import IndexAction
class IndexService: class IndexService:

View file

@ -60,6 +60,8 @@ class GCalculoServicoService:
def execute(self, data: GCalculoServico): def execute(self, data: GCalculoServico):
print(data)
# Busca os parâmetros da aplicação # Busca os parâmetros da aplicação
periodo_id = float( periodo_id = float(
self._config_service.execute( self._config_service.execute(

View file

@ -1,4 +1,5 @@
from fastapi import HTTPException, status from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_tb_regimecomunhao_schema import GTbRegimecomunhaoSchema
from packages.v1.administrativo.actions.g_tb_regimecomunhao.g_tb_regimecomunhao_index_action import IndexAction from packages.v1.administrativo.actions.g_tb_regimecomunhao.g_tb_regimecomunhao_index_action import IndexAction
class IndexService: class IndexService:

View file

@ -1,4 +1,5 @@
from fastapi import HTTPException, status from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_tb_txmodelogrupo_schema import GTbTxmodelogrupoSchema
from packages.v1.administrativo.actions.g_tb_txmodelogrupo.g_tb_txmodelogrupo_index_action import IndexAction from packages.v1.administrativo.actions.g_tb_txmodelogrupo.g_tb_txmodelogrupo_index_action import IndexAction

View file

@ -2,6 +2,7 @@ from fastapi import HTTPException, status
from packages.v1.administrativo.controllers.g_usuario_controller import ( from packages.v1.administrativo.controllers.g_usuario_controller import (
GUsuarioIndexSchema, GUsuarioIndexSchema,
) )
from packages.v1.administrativo.schemas.g_usuario_schema import GUsuarioSchema
from packages.v1.administrativo.actions.g_usuario.g_usuario_index_action import ( from packages.v1.administrativo.actions.g_usuario.g_usuario_index_action import (
IndexAction, IndexAction,
) )

View file

@ -4,9 +4,11 @@ from packages.v1.administrativo.actions.t_imovel_unidade.t_imovel_unidade_save_a
) )
from packages.v1.administrativo.schemas.t_imovel_unidade_schema import ( from packages.v1.administrativo.schemas.t_imovel_unidade_schema import (
TImovelUnidadeSaveSchema, TImovelUnidadeSaveSchema,
TImovelUnidadeSchema,
) )
from packages.v1.sequencia.schemas.g_sequencia import GSequenciaSchema from packages.v1.sequencia.schemas.g_sequencia import GSequenciaSchema
from packages.v1.sequencia.services.g_sequencia.generate_service import GenerateService from packages.v1.sequencia.services.g_sequencia.generate_service import GenerateService
from fastapi import HTTPException, status
class TImovelUnidadeSaveService: class TImovelUnidadeSaveService:

View file

@ -48,7 +48,6 @@ from packages.v1.administrativo.endpoints import t_pessoa_endpoint
from packages.v1.administrativo.endpoints import t_pessoa_representante_endpoint from packages.v1.administrativo.endpoints import t_pessoa_representante_endpoint
from packages.v1.administrativo.endpoints import g_calculo_endpoint from packages.v1.administrativo.endpoints import g_calculo_endpoint
from packages.v1.servicos.balcao.endpoints import ( from packages.v1.servicos.balcao.endpoints import (
t_ato_endpoint,
t_pessoa_cartao_endpoint, t_pessoa_cartao_endpoint,
t_servico_itempedido_endpoint, t_servico_itempedido_endpoint,
t_servico_pedido_endpoint, t_servico_pedido_endpoint,
@ -351,14 +350,14 @@ api_router.include_router(
# Inclui as rotas de g_emolumento periodo # Inclui as rotas de g_emolumento periodo
api_router.include_router( api_router.include_router(
t_servico_pedido_endpoint.router, t_servico_pedido_endpoint.router,
prefix="/servicos/pedidos/t_servico_pedido", prefix="/servicos/balcao/t_servico_pedido",
tags=["Pedido"], tags=["Pedido"],
) )
# Inclui as rotas de g_emolumento periodo # Inclui as rotas de g_emolumento periodo
api_router.include_router( api_router.include_router(
t_servico_itempedido_endpoint.router, t_servico_itempedido_endpoint.router,
prefix="/servicos/pedidos/t_servico_itempedido", prefix="/servicos/balcao/t_servico_itempedido",
tags=["Itens do Pedido"], tags=["Itens do Pedido"],
) )
@ -366,17 +365,10 @@ api_router.include_router(
# Inclui as rotas de g_emolumento periodo # Inclui as rotas de g_emolumento periodo
api_router.include_router( api_router.include_router(
t_pessoa_cartao_endpoint.router, t_pessoa_cartao_endpoint.router,
prefix="/servicos/pedidos/t_pessoa_cartao", prefix="/servicos/balcao/t_pessoa_cartao",
tags=["Pessoa Cartao"], tags=["Pessoa Cartao"],
) )
# Inclui as rotas de g_emolumento periodo
api_router.include_router(
t_ato_endpoint.router,
prefix="/servicos/atos/t_ato",
tags=["Atos"],
)
# Inclui as rotas de g_emolumento periodo # Inclui as rotas de g_emolumento periodo
api_router.include_router( api_router.include_router(
t_biometria_pessoa_endpoint.router, t_biometria_pessoa_endpoint.router,

View file

@ -5,6 +5,7 @@ from packages.v1.parametros.schemas.g_config_schema import (
GConfigNomeSchema, GConfigNomeSchema,
GConfigResponseSchema, GConfigResponseSchema,
) )
from packages.v1.sequencia.repositories.g_sequencia.get import Get
from abstracts.action import BaseAction from abstracts.action import BaseAction

View file

@ -1,27 +0,0 @@
from packages.v1.servicos.balcao.repositories.t_ato.t_ato_index_repository import (
TAtoIndexRepository,
)
from packages.v1.servicos.balcao.schemas.t_ato_schema import TAtoIndexSchema
class TAtoIndexAction:
"""
Serviço responsável por encapsular a lógica de negócio para a operação
de listagem de todos os registros na tabela g_tb_regimebens.
"""
def execute(self, t_ato_index_schema: TAtoIndexSchema):
"""
Executa a operação de listagem no banco de dados.
Returns:
A lista de todos os registros.
"""
# Instanciamento do repositório
t_ato_index_repository = TAtoIndexRepository()
# Execução do repositório
response = t_ato_index_repository.execute(t_ato_index_schema)
# Retorno da informação
return response

View file

@ -1,27 +0,0 @@
from packages.v1.servicos.balcao.repositories.t_ato.t_ato_show_repository import (
TAtoShowRepository,
)
from packages.v1.servicos.balcao.schemas.t_ato_schema import TAtoIdSchema
class TAtoShowAction:
"""
Serviço responsável por encapsular a lógica de negócio para a operação
de listagem de todos os registros na tabela g_tb_regimebens.
"""
def execute(self, data: TAtoIdSchema):
"""
Executa a operação de listagem no banco de dados.
Returns:
A lista de todos os registros.
"""
# Instanciamento do repositório
show_repository = TAtoShowRepository()
# Execução do repositório
response = show_repository.execute(data)
# Retorno da informação
return response

View file

@ -1,40 +0,0 @@
from abstracts.action import BaseAction
from packages.v1.servicos.balcao.repositories.t_servico_itempedido.t_servico_itempedido_certidao_save_repository import (
TServicoItemPedidoCertidaoSaveRepository,
)
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemPedidoCertidaoSaveSchema,
)
class TServicoItemPedidoCertidaSaveAction(BaseAction):
"""
Serviço responsável por encapsular a lógica de negócio para a operação
de salvamento de um novo registro na tabela T_SERVICO_ITEMPEDIDO.
"""
def execute(self, data: TServicoItemPedidoCertidaoSaveSchema):
"""
Executa a operação de salvamento.
Args:
t_servico_itempedido_schema (TServicoItemPedidoSchema):
O esquema com os dados a serem persistidos.
Returns:
O resultado da operação de salvamento.
"""
# ----------------------------------------------------
# Instanciamento do repositório
# ----------------------------------------------------
save_repository = TServicoItemPedidoCertidaoSaveRepository()
# ----------------------------------------------------
# Execução do repositório
# ----------------------------------------------------
response = save_repository.execute(data)
# ----------------------------------------------------
# Retorno da informação
# ----------------------------------------------------
return response

View file

@ -1,68 +0,0 @@
import os
from docx import Document
from fastapi import HTTPException, status
from abstracts.action import BaseAction
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemPedidoCreateCertidaoSchema,
)
from actions.data.text import Text
from actions.data.microtime import Microtime
class TServicoItemPedidoCreateCertidaoAction(BaseAction):
"""
Serviço responsável por gerar o arquivo físico da certidão (.rtf)
a partir do texto descomprimido e validar sua integridade.
Retorna um dicionário (JSON) indicando sucesso ou falha.
"""
def execute(self, data: TServicoItemPedidoCreateCertidaoSchema):
texto = None
# Verifica se existe conteudo a ser escrito
if data.certidao_texto:
# 1. Decodifica o texto
texto = Text.decompress(data.certidao_texto)
# 2. Configuração do caminho e nome
diretorio = "./storage/temp/"
name = f"{data.servico_itempedido_id}_{Microtime.as_int()}.rtf"
# Define a variável caminho_completo
caminho_completo = os.path.join(diretorio, name)
# 3. Garante que a pasta existe
os.makedirs(diretorio, exist_ok=True)
if texto:
# 4. Escreve o texto em disco
with open(caminho_completo, "wb") as f:
f.write(texto.encode("utf-8"))
else:
# 1. Instancia o objeto (cria a estrutura XML em memória)
document = Document()
# 2. Salva o arquivo fisicamente
document.save(caminho_completo)
# 5. VALIDAÇÃO: Verifica se o arquivo existe e se tem conteúdo
if not os.path.exists(caminho_completo):
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"Falha crítica: O arquivo não foi encontrado em {caminho_completo}",
)
if os.path.getsize(caminho_completo) == 0:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Falha crítica: O arquivo foi criado, mas está vazio (0 bytes).",
)
# RETORNO DE SUCESSO
return name

View file

@ -1,9 +1,9 @@
from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import (
TServicoItemPedidoSaveSituacaoSchema,
)
from packages.v1.servicos.balcao.repositories.t_servico_itempedido.t_servico_itempedido_save_situacao_repository import ( from packages.v1.servicos.balcao.repositories.t_servico_itempedido.t_servico_itempedido_save_situacao_repository import (
TServicoItemPedidoSaveSituacaoRepository, TServicoItemPedidoSaveSituacaoRepository,
) )
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemPedidoSaveSituacaoSchema,
)
class TServicoItemPedidoSaveSituacaoAction: class TServicoItemPedidoSaveSituacaoAction:

View file

@ -1,31 +0,0 @@
from actions.dynamic_import.service_factory import ServiceFactory
from interfaces.service_protocols import ServiceProtocolsInterface
from packages.v1.servicos.balcao.schemas.t_ato_schema import TAtoIdSchema
class TAtoController:
def __init__(self):
# Configura o escopo deste controller
self.factory = ServiceFactory(package="servicos.balcao", table="t_ato")
def index(self, schema):
# Instânciamento da classe
service = self.factory.make("TAtoIndexService", ServiceProtocolsInterface)
# O VS Code sabe que .execute() existe por causa do IService!
result = service.execute(schema)
return {"message": "Sucesso", "data": result}
def show(self, data: TAtoIdSchema):
# Instânciamento da classe
service = self.factory.make("TAtoShowService", ServiceProtocolsInterface)
# O VS Code sabe que .execute() existe por causa do IService!
result = service.execute(data)
return {"message": "Sucesso", "data": result}

View file

@ -1,15 +1,12 @@
from actions.dynamic_import.dynamic_import import DynamicImport from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import ( from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemIndexSchema, TServicoItemIndexSchema,
TServicoItemPedidoCertidaoSaveSchema,
TServicoItemPedidoSaveSchema, TServicoItemPedidoSaveSchema,
TServicoItemPedidoSaveSituacaoSchema,
TServicoItemPedidoSituacaoSchema, TServicoItemPedidoSituacaoSchema,
TServicoItemPedidoUpdateSchema, TServicoItemPedidoUpdateSchema,
TServicoItemPedidoIdSchema, TServicoItemPedidoIdSchema,
) )
from packages.v1.servicos.balcao.services.t_servico_itempedido.go.t_servico_itempedido_cancelar_service import (
TServicoItemPedidoCancelarService,
)
class TServicoItemPedidoController: class TServicoItemPedidoController:
@ -62,61 +59,6 @@ class TServicoItemPedidoController:
"data": self.show_service.execute(t_servico_itempedido_id_schema), "data": self.show_service.execute(t_servico_itempedido_id_schema),
} }
# ----------------------------------------------------
# Busca um registro específico de T_SERVICO_ITEMPEDIDO pelo ID
# ----------------------------------------------------
def certidao_show(self, t_servico_itempedido_id_schema: TServicoItemPedidoIdSchema):
# Importação da classe desejada
show_service = self.dynamic_import.service(
"t_servico_itempedido_certidao_show_service",
"TServicoItemPedidoCertidaoShowService",
)
# Instância da classe service
self.show_service = show_service()
# Execução da busca
return {
"message": "Registro de T_SERVICO_ITEMPEDIDO localizado com sucesso.",
"data": self.show_service.execute(t_servico_itempedido_id_schema),
}
# ----------------------------------------------------
# Busca um registro específico de T_SERVICO_ITEMPEDIDO pelo ID
# ----------------------------------------------------
def certidao_edit(self, t_servico_itempedido_id_schema: TServicoItemPedidoIdSchema):
# Importação da classe desejada
edit_service = self.dynamic_import.service(
"t_servico_itempedido_certidao_edit_service",
"TServicoItemPedidoCertidaoEditService",
)
# Instância da classe service
self.show_service = edit_service()
# Execução da busca
return {
"message": "Registro de T_SERVICO_ITEMPEDIDO localizado com sucesso.",
"data": self.show_service.execute(t_servico_itempedido_id_schema),
}
# ----------------------------------------------------
# Busca um registro específico de T_SERVICO_ITEMPEDIDO pelo ID
# ----------------------------------------------------
def certidao_save(self, data: TServicoItemPedidoCertidaoSaveSchema):
# Importação da classe desejada
save_service = self.dynamic_import.service(
"t_servico_itempedido_certidao_save_service",
"TServicoItemPedidoCertidaoSaveService",
)
# Instância da classe service
self.save_service = save_service()
# Execução da busca
return self.save_service.execute(data)
# ---------------------------------------------------- # ----------------------------------------------------
# Cadastra um novo registro em T_SERVICO_ITEMPEDIDO # Cadastra um novo registro em T_SERVICO_ITEMPEDIDO
# ---------------------------------------------------- # ----------------------------------------------------
@ -142,7 +84,8 @@ class TServicoItemPedidoController:
# Importação da classe desejada # Importação da classe desejada
cancelar_service = self.dynamic_import.service( cancelar_service = self.dynamic_import.service(
"t_servico_itempedido_cancelar_service", "TServicoItemPedidoCancelarService" "t_servico_itempedido_cancelar_service",
"TServicoItemPedidoCancelarService",
) )
# Instância da classe service # Instância da classe service

View file

@ -5,6 +5,9 @@ from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
TServicoPedidoUpdateSchema, TServicoPedidoUpdateSchema,
TServicoPedidoIdSchema, TServicoPedidoIdSchema,
) )
from packages.v1.servicos.balcao.services.t_servico_pedido.go.t_servico_pedido_cancelar_service import (
TServicoPedidoCancelarService,
)
class TServicoPedidoController: class TServicoPedidoController:

View file

@ -1,54 +0,0 @@
# Importação de bibliotecas
from fastapi import APIRouter, Depends, status
from actions.data.get_url_params import get_url_params
from actions.jwt.get_current_user import get_current_user
from packages.v1.servicos.balcao.controllers.t_ato_controller import TAtoController
from packages.v1.servicos.balcao.schemas.t_ato_schema import (
TAtoIdSchema,
TAtoIndexSchema,
)
# ----------------------------------------------------
# Inicializa o roteador para as rotas da tabela T_ATO
# ----------------------------------------------------
router = APIRouter()
# Instanciamento do controller
t_ato_controller = TAtoController()
# ----------------------------------------------------
# Lista todos os registros de T_ATO
# ----------------------------------------------------
@router.get(
"/",
status_code=status.HTTP_200_OK,
summary="Lista todos os registros de T_ATO cadastrados",
response_description="Lista todos os registros de T_ATO cadastrados",
)
async def index(
current_user: dict = Depends(get_current_user), url_params=Depends(get_url_params)
):
# Busca todos os usuários cadastrados
response = t_ato_controller.index(TAtoIndexSchema(**url_params))
# Retorna os dados localizados
return response
# ----------------------------------------------------
# Lista um registro especifico
# ----------------------------------------------------
@router.get(
"/{ato_id}",
status_code=status.HTTP_200_OK,
summary="Lista um registro em especifico",
response_description="Lista um registro em especifico",
)
async def show(ato_id: int, current_user: dict = Depends(get_current_user)):
"""
Retorna um registro específico de G_GRAMATICA com base no ID informado.
"""
response = t_ato_controller.show(TAtoIdSchema(ato_id=ato_id))
return response

View file

@ -1,5 +1,5 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status, Request from fastapi import APIRouter, Depends, status
from actions.data.dict_to_namespace import dict_to_namespace from actions.data.dict_to_namespace import dict_to_namespace
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import ( from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import (
@ -7,7 +7,6 @@ from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller imp
) )
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import ( from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemIndexSchema, TServicoItemIndexSchema,
TServicoItemPedidoCertidaoSaveSchema,
TServicoItemPedidoSaveSchema, TServicoItemPedidoSaveSchema,
TServicoItemPedidoSituacaoSchema, TServicoItemPedidoSituacaoSchema,
TServicoItemPedidoUpdateSchema, TServicoItemPedidoUpdateSchema,
@ -65,54 +64,6 @@ async def show(
return response return response
# ----------------------------------------------------
# Busca um registro específico de T_SERVICO_ITEMPEDIDO pelo ID
# ----------------------------------------------------
@router.get(
"/{servico_itempedido_id}/certidao/exibir",
status_code=status.HTTP_200_OK,
summary="Busca o texto da certidao",
response_description="Busca o texto da certidao",
)
async def certidao_show(
servico_itempedido_id: int, current_user: dict = Depends(get_current_user)
):
"""
Retorna um registro específico de T_SERVICO_ITEMPEDIDO com base no ID informado.
"""
t_servico_itempedido_id_schema = TServicoItemPedidoIdSchema(
servico_itempedido_id=servico_itempedido_id
)
response = t_servico_itempedido_controller.certidao_show(
t_servico_itempedido_id_schema
)
return response
# ----------------------------------------------------
# Gera o arquivo em disco para Manipulação
# ----------------------------------------------------
@router.get(
"/{servico_itempedido_id}/certidao/editar",
status_code=status.HTTP_200_OK,
summary="Gera o arquivo em disco da certidão",
response_description="Gera o arquivo em disco da certidão",
)
async def certidao_edit(
servico_itempedido_id: int, current_user: dict = Depends(get_current_user)
):
"""
Retorna um registro específico de T_SERVICO_ITEMPEDIDO com base no ID informado.
"""
t_servico_itempedido_id_schema = TServicoItemPedidoIdSchema(
servico_itempedido_id=servico_itempedido_id
)
response = t_servico_itempedido_controller.certidao_edit(
t_servico_itempedido_id_schema
)
return response
# ---------------------------------------------------- # ----------------------------------------------------
# Cadastra um novo registro em T_SERVICO_ITEMPEDIDO # Cadastra um novo registro em T_SERVICO_ITEMPEDIDO
# ---------------------------------------------------- # ----------------------------------------------------
@ -211,30 +162,6 @@ async def ativar(
return response return response
# ----------------------------------------------------
# Gera o arquivo em disco para Manipulação
# ----------------------------------------------------
@router.post(
"/{servico_itempedido_id}/certidao/salvar",
status_code=status.HTTP_200_OK,
summary="Atualiza o texto da certidão",
response_description="Atualiza o texto da certidão",
)
async def certidao_save(servico_itempedido_id: int, request: Request):
# Obtem os dados enviados
data = await request.json()
response = t_servico_itempedido_controller.certidao_save(
TServicoItemPedidoCertidaoSaveSchema(
servico_itempedido_id=servico_itempedido_id, data=data
)
)
# return response
return response
# ---------------------------------------------------- # ----------------------------------------------------
# Exclui um registro de T_SERVICO_ITEMPEDIDO # Exclui um registro de T_SERVICO_ITEMPEDIDO
# ---------------------------------------------------- # ----------------------------------------------------

Some files were not shown because too many files have changed in this diff Show more