[MVPTN-106] feat(Schema): Ajustado Schema para que apenas o campo descrição seja obrigatório
This commit is contained in:
parent
a61ea6d33d
commit
87d720629f
1 changed files with 46 additions and 95 deletions
|
|
@ -70,115 +70,66 @@ class TServicoTipoDescricaoSchema(BaseModel):
|
|||
# ----------------------------------------------------
|
||||
class TServicoTipoSaveSchema(BaseModel):
|
||||
servico_tipo_id: Optional[int] = None
|
||||
descricao: str
|
||||
valor: float # Numeric(14,3) - Considerado obrigatório para criação
|
||||
tipo_item: str # Varchar(1)
|
||||
requer_autorizacao: str # Varchar(1)
|
||||
requer_biometria: str # Varchar(1)
|
||||
tipo_pessoa: str # Varchar(1)
|
||||
tb_reconhecimentotipo_id: Optional[int] = None # Opcional por ser FK e poder ser nulo
|
||||
tipo_permissao_cpf: str # Varchar(1)
|
||||
requer_abonador: str # Varchar(1)
|
||||
requer_representante: str # Varchar(1)
|
||||
situacao: str # Varchar(1)
|
||||
requer_cpf: str # Varchar(1)
|
||||
servico_padrao: str # Varchar(1)
|
||||
maximo_pessoa: int # Numeric(10,2)
|
||||
alterar_valor: str # Varchar(1)
|
||||
servico_caixa_id: Optional[int] = None # Opcional por ser FK e poder ser nulo
|
||||
lancar_taxa: str # Varchar(1)
|
||||
lancar_fundesp: str # Varchar(1)
|
||||
liberar_desconto: str # Varchar(1)
|
||||
fundesp_automatica: str # Varchar(1)
|
||||
lancar_valor_documento: str # Varchar(1)
|
||||
valor_fixo: str # Varchar(1)
|
||||
emolumento_id: Optional[int] = None # Opcional por ser FK e poder ser nulo
|
||||
ato_praticado: str # Varchar(1)
|
||||
selar: str # Varchar(1)
|
||||
frenteverso: str # Varchar(1)
|
||||
pagina_acrescida: str # Varchar(1)
|
||||
emolumento_obrigatorio: Decimal # Numeric(10,2)
|
||||
apresentante_selo: str # Varchar(1)
|
||||
renovacao_cartao: str # Varchar(1)
|
||||
etiqueta_unica: str # Varchar(1)
|
||||
transferencia_veiculo: str # Varchar(1)
|
||||
usar_a4: str # Varchar(1)
|
||||
averbacao: str # Varchar(1)
|
||||
descricao: str # Obrigatório
|
||||
valor: Optional[float] = None # Numeric(14,3)
|
||||
tipo_item: Optional[str] = None # Varchar(1)
|
||||
requer_autorizacao: Optional[str] = None
|
||||
requer_biometria: Optional[str] = None
|
||||
tipo_pessoa: Optional[str] = None
|
||||
tb_reconhecimentotipo_id: Optional[int] = None
|
||||
tipo_permissao_cpf: Optional[str] = None
|
||||
requer_abonador: Optional[str] = None
|
||||
requer_representante: Optional[str] = None
|
||||
situacao: Optional[str] = None
|
||||
requer_cpf: Optional[str] = None
|
||||
servico_padrao: Optional[str] = None
|
||||
maximo_pessoa: Optional[int] = None
|
||||
alterar_valor: Optional[str] = None
|
||||
servico_caixa_id: Optional[int] = None
|
||||
lancar_taxa: Optional[str] = None
|
||||
lancar_fundesp: Optional[str] = None
|
||||
liberar_desconto: Optional[str] = None
|
||||
fundesp_automatica: Optional[str] = None
|
||||
lancar_valor_documento: Optional[str] = None
|
||||
valor_fixo: Optional[str] = None
|
||||
emolumento_id: Optional[int] = None
|
||||
ato_praticado: Optional[str] = None
|
||||
selar: Optional[str] = None
|
||||
frenteverso: Optional[str] = None
|
||||
pagina_acrescida: Optional[str] = None
|
||||
emolumento_obrigatorio: Optional[Decimal] = None
|
||||
apresentante_selo: Optional[str] = None
|
||||
renovacao_cartao: Optional[str] = None
|
||||
etiqueta_unica: Optional[str] = None
|
||||
transferencia_veiculo: Optional[str] = None
|
||||
usar_a4: Optional[str] = None
|
||||
averbacao: Optional[str] = None
|
||||
|
||||
# Campos que devem ser sanitizados (strings)
|
||||
# Sanitização dos campos string (para prevenir XSS e entradas inválidas)
|
||||
@field_validator(
|
||||
'descricao', 'tipo_item', 'requer_autorizacao', 'requer_biometria',
|
||||
'tipo_pessoa', 'tipo_permissao_cpf', 'requer_abonador', 'requer_representante',
|
||||
'situacao', 'requer_cpf', 'servico_padrao', 'alterar_valor', 'lancar_taxa',
|
||||
'lancar_fundesp', 'liberar_desconto', 'fundesp_automatica',
|
||||
'lancar_valor_documento', 'valor_fixo', 'ato_praticado', 'selar',
|
||||
'frenteverso', 'pagina_acrescida', 'apresentante_selo', 'renovacao_cartao',
|
||||
'descricao', 'tipo_item', 'requer_autorizacao', 'requer_biometria',
|
||||
'tipo_pessoa', 'tipo_permissao_cpf', 'requer_abonador', 'requer_representante',
|
||||
'situacao', 'requer_cpf', 'servico_padrao', 'alterar_valor', 'lancar_taxa',
|
||||
'lancar_fundesp', 'liberar_desconto', 'fundesp_automatica',
|
||||
'lancar_valor_documento', 'valor_fixo', 'ato_praticado', 'selar',
|
||||
'frenteverso', 'pagina_acrescida', 'apresentante_selo', 'renovacao_cartao',
|
||||
'etiqueta_unica', 'transferencia_veiculo', 'usar_a4', 'averbacao'
|
||||
)
|
||||
def sanitize_fields(cls, v):
|
||||
if isinstance(v, str) and v:
|
||||
return Text.sanitize_input(v)
|
||||
return v
|
||||
|
||||
# Verifica se os campos obrigatórios foram enviados (baseado no TServicoTipoSaveSchema original e na lógica da DDL)
|
||||
|
||||
# Validação de obrigatoriedade apenas para o campo 'descricao'
|
||||
@model_validator(mode='after')
|
||||
def validate_all_fields(self):
|
||||
errors = []
|
||||
|
||||
# Consideraremos 'descricao', 'valor', 'situacao' e todos os VARCHAR(1) como obrigatórios,
|
||||
# seguindo o padrão do TCensecSaveSchema e campos que fazem sentido como requeridos em um POST.
|
||||
|
||||
required_fields = {
|
||||
'descricao': 'A descrição é obrigatória.',
|
||||
'valor': 'O valor é obrigatório.',
|
||||
'tipo_item': 'O Tipo do Item é obrigatório.',
|
||||
'requer_autorizacao': 'O Requer Autorização é obrigatório.',
|
||||
'requer_biometria': 'O Requer Biometria é obrigatório.',
|
||||
'tipo_pessoa': 'O Tipo Pessoa é obrigatório.',
|
||||
'tipo_permissao_cpf': 'O Tipo Permissão CPF é obrigatório.',
|
||||
'requer_abonador': 'O Requer Abonador é obrigatório.',
|
||||
'requer_representante': 'O Requer Representante é obrigatório.',
|
||||
'situacao': 'A situação é obrigatória.',
|
||||
'requer_cpf': 'O Requer CPF é obrigatório.',
|
||||
'servico_padrao': 'O Serviço Padrão é obrigatório.',
|
||||
'maximo_pessoa': 'O Máximo Pessoa é obrigatório.',
|
||||
'alterar_valor': 'O Alterar Valor é obrigatório.',
|
||||
'lancar_taxa': 'O Lançar Taxa é obrigatório.',
|
||||
'lancar_fundesp': 'O Lançar FUNDESP é obrigatório.',
|
||||
'liberar_desconto': 'O Liberar Desconto é obrigatório.',
|
||||
'fundesp_automatica': 'O FUNDESP Automática é obrigatório.',
|
||||
'lancar_valor_documento': 'O Lançar Valor Documento é obrigatório.',
|
||||
'valor_fixo': 'O Valor Fixo é obrigatório.',
|
||||
'ato_praticado': 'O Ato Praticado é obrigatório.',
|
||||
'selar': 'O Selar é obrigatório.',
|
||||
'frenteverso': 'O FrenteVerso é obrigatório.',
|
||||
'pagina_acrescida': 'A Página Acrescida é obrigatória.',
|
||||
'emolumento_obrigatorio': 'O Emolumento Obrigatório é obrigatório.',
|
||||
'apresentante_selo': 'O Apresentante Selo é obrigatório.',
|
||||
'renovacao_cartao': 'A Renovação Cartão é obrigatória.',
|
||||
'etiqueta_unica': 'A Etiqueta Única é obrigatória.',
|
||||
'transferencia_veiculo': 'A Transferência Veículo é obrigatória.',
|
||||
'usar_a4': 'O Usar A4 é obrigatório.',
|
||||
'averbacao': 'A Averbação é obrigatória.',
|
||||
}
|
||||
|
||||
for field_name, message in required_fields.items():
|
||||
field_value = getattr(self, field_name, None)
|
||||
|
||||
if field_value is None:
|
||||
errors.append({'input': field_name, 'message': message})
|
||||
elif isinstance(field_value, str) and len(field_value.strip()) == 0:
|
||||
errors.append({'input': field_name, 'message': message})
|
||||
|
||||
if errors:
|
||||
def validate_required_fields(self):
|
||||
if not self.descricao or not self.descricao.strip():
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=errors
|
||||
detail=[{'input': 'descricao', 'message': 'A descrição é obrigatória.'}]
|
||||
)
|
||||
|
||||
return self
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para atualizar SERVICO (PUT)
|
||||
# ----------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue