diff --git a/packages/v1/administrativo/repositories/ato_documento/ato_documento_save_multiple_repository.py b/packages/v1/administrativo/repositories/ato_documento/ato_documento_save_multiple_repository.py index 680daac..14503f9 100644 --- a/packages/v1/administrativo/repositories/ato_documento/ato_documento_save_multiple_repository.py +++ b/packages/v1/administrativo/repositories/ato_documento/ato_documento_save_multiple_repository.py @@ -36,22 +36,20 @@ class SaveMultipleRepository: Salva um único documento após localizar o Ato Principal correspondente via código de selo. """ + # 1️ — Obtém e valida o código de selo codigo_selo = getattr(doc_schema, "codigo_selo", None) - - # 1️ Verifica se o campo 'codigo_selo' foi informado if not codigo_selo or codigo_selo.strip() == "": raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="O campo 'codigo_selo' é obrigatório para associar o documento.", ) - # 2️ Busca o ato principal correspondente ao código do selo + # 2️ — Localiza o ato principal correspondente ato_principal = ( db.query(AtoPrincipal) .filter(AtoPrincipal.codigo_selo == codigo_selo) .first() ) - if not ato_principal: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, @@ -60,18 +58,18 @@ class SaveMultipleRepository: ato_principal_id = ato_principal.ato_principal_id - # 3️ Extrai e prepara os dados do schema + # 3️ — Extrai os dados do documento, removendo o campo 'codigo_selo' doc_data = doc_schema.model_dump( exclude_unset=True, - exclude={"arquivo"}, # não envia base64 ao banco + exclude={"arquivo", "codigo_selo"}, # <- Removemos aqui ) - # 4️ Processa o arquivo Base64 (se informado) + # 4️ — Processa o arquivo base64 (se houver) base64_content = getattr(doc_schema, "arquivo", None) file_url_path = None if base64_content: - # Gera nome de arquivo, se não informado + # Define o nome do arquivo if not doc_schema.nome_documento: timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") unique_id = uuid.uuid4().hex[:8] @@ -84,12 +82,11 @@ class SaveMultipleRepository: base64_content, file_name, ato_principal_id, UPLOAD_DIR, GROUP_SIZE ) - # 5️ Atribui o caminho salvo (ou None) + # 5️ — Atribui o caminho salvo doc_data["url"] = file_url_path - # 6️ Criptografa os metadados do documento + # 6️ — Criptografa os metadados do documento campos_criptografar = ["url", "nome_documento", "tipo_documento"] - for campo in campos_criptografar: valor = doc_data.get(campo) if isinstance(valor, str) and valor.strip(): @@ -97,63 +94,8 @@ class SaveMultipleRepository: else: doc_data[campo] = None - # 7️ Cria o registro no banco + # 7️ — Cria o registro do documento vinculado ao ato principal new_documento = AtoDocumento(**doc_data, ato_principal_id=ato_principal_id) db.add(new_documento) return new_documento - - # ------------------------------------------------------- - # Método principal — grava múltiplos documentos - # ------------------------------------------------------- - def execute(self, documentos: List[AtoDocumentoSaveMultipleSchema]): - db = SessionLocal() - results = [] - - if not AES_KEY: - db.close() - raise Exception("A chave AES (aeskey) não está configurada.") - - for doc_schema in documentos: - codigo_selo_log = getattr(doc_schema, "codigo_selo", "SELO_INDISPONÍVEL") - - try: - new_doc = self._save_documento(db, doc_schema) - db.commit() - - results.append( - { - "success": True, - "message": "Documento salvo com sucesso.", - "data": { - "codigo_selo": codigo_selo_log, - "ato_principal_id": new_doc.ato_principal_id, - }, - } - ) - - except HTTPException as he: - db.rollback() - results.append( - { - "success": False, - "error": he.detail, - "data": {"codigo_selo": codigo_selo_log}, - } - ) - - except Exception as e: - db.rollback() - print(f"ERRO AO SALVAR DOCUMENTO (SELO {codigo_selo_log}): {e}") - traceback.print_exc() - - results.append( - { - "success": False, - "error": "Erro interno ao salvar o documento.", - "data": {"codigo_selo": codigo_selo_log}, - } - ) - - db.close() - return results