- Añade GET /api/denuncias/{id}/gestiona-fields para exponer los campos diarios requeridos por la integración con Gestiona.
- Devuelve un DTO cerrado con fecha, canal, resumen, datos de hechos, protección, sexo y preferencias de notificación.
- Adapta el login contra GlobalLeaks al nuevo flujo DPoP exigido desde la versión 5.0.94.
- Genera proof DPoP con clave EC P-256 efímera y lo envía en la cabecera DPoP junto a X-Token.
- Mejora el mensaje de error cuando GlobalLeaks rechaza el proof DPoP.
150 lines
4.9 KiB
C#
150 lines
4.9 KiB
C#
using GestionaDenuncias.Shared.Models;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace ApiDenuncias.Services
|
|
{
|
|
public interface IGestionaService
|
|
{
|
|
// =========================
|
|
// Expedientes (files)
|
|
// =========================
|
|
|
|
/// <summary>
|
|
/// Crea un expediente resolviendo el procedimiento externo desde el catalogo de Gestiona y devuelve los links 'file' y 'file-open'.
|
|
/// </summary>
|
|
Task<GestionaCreateFileResponse> CreateFileAsync(
|
|
string subject,
|
|
string documentSeries,
|
|
string siaCode
|
|
);
|
|
|
|
/// <summary>
|
|
/// Abre el expediente (lo pone en OPEN_EDITABLE), asigna título, clasificación y lo vincula al grupo indicado.
|
|
/// </summary>
|
|
Task OpenFileAsync(
|
|
string fileUrl,
|
|
string? fileOpenUrl,
|
|
string assignedGroupCode,
|
|
bool confidential,
|
|
string freeTitle
|
|
);
|
|
|
|
/// <summary>
|
|
/// Reemplaza los grupos/usuarios asignados al expediente. No modifica la unidad gestora.
|
|
/// </summary>
|
|
Task AssignFileAsync(
|
|
string fileUrl,
|
|
string assignedGroupCode
|
|
);
|
|
|
|
// =========================
|
|
// Documentos
|
|
// =========================
|
|
|
|
/// <summary>
|
|
/// Crea un recurso de upload, sube bytes y devuelve la URI de upload.
|
|
/// </summary>
|
|
Task<string> CreateUploadAsync(
|
|
byte[] contentBytes,
|
|
string fileName
|
|
);
|
|
|
|
/// <summary>
|
|
/// Crea el documento (metadata) y sube el contenido PDF a la raíz o a una carpeta.
|
|
/// </summary>
|
|
Task UploadDocumentAsync(
|
|
string fileUrl,
|
|
byte[] contentBytes,
|
|
string fileName
|
|
);
|
|
|
|
/// <summary>
|
|
/// Crea una carpeta de nombre 'folderName' en la raíz del expediente y devuelve su GUID.
|
|
/// </summary>
|
|
Task<Guid> CreateFolderAsync(
|
|
string fileUrl,
|
|
string folderName
|
|
);
|
|
|
|
// =========================
|
|
// Terceros
|
|
// =========================
|
|
|
|
/// <summary>
|
|
/// Busca un tercero por NIF. Devuelve su ID y href si existe, null si no existe.
|
|
/// </summary>
|
|
Task<(string Id, string SelfHref)> BuscarTerceroPorNifAsync(string nif);
|
|
|
|
/// <summary>
|
|
/// Crea un tercero en Gestiona y devuelve su ID y href.
|
|
/// </summary>
|
|
Task<(string Id, string SelfHref)> CrearTerceroAsync(ThirdPartyIdentityData thirdParty);
|
|
|
|
/// <summary>
|
|
/// Obtiene la lista de terceros ya enlazados a un expediente.
|
|
/// </summary>
|
|
Task<HashSet<string>> ObtenerTercerosEnlazadosAsync(string fileUrl);
|
|
|
|
/// <summary>
|
|
/// Enlaza un tercero ya existente (por su href) a un expediente.
|
|
/// </summary>
|
|
Task EnlazarTerceroExistenteAsync(string fileUrl, string thirdSelfHref);
|
|
|
|
/// <summary>
|
|
/// Usa el NIF tal cual viene.
|
|
/// Si es anónimo o vacío ? no crea ni enlaza.
|
|
/// Si no existe, lo crea.
|
|
/// Si no está enlazado al expediente, lo enlaza.
|
|
/// </summary>
|
|
Task<GestionaEnsureThirdResponse> AsegurarTerceroYEnlazarAsync(string fileUrl, ThirdPartyIdentityData thirdParty);
|
|
|
|
|
|
|
|
// =========================
|
|
// CONSULTAS OPERATIVAS
|
|
// =========================
|
|
|
|
/// <summary>
|
|
/// Devuelve el JSON crudo del listado operativo de expedientes, sin recorrer histórico paginado.
|
|
/// </summary>
|
|
Task<string> ListarExpedientesJsonAsyncBasico(int maxPages = 1);
|
|
|
|
/// <summary>
|
|
/// Busca directamente un expediente cuyo asunto sea "Denuncia {idDenuncia}-CD".
|
|
/// Devuelve URL, número de expediente y título si lo encuentra; null si no.
|
|
/// </summary>
|
|
Task<GestionaExpedienteInfo?> BuscarExpedientePorIdEnAsuntoAsync(int idDenuncia);
|
|
|
|
/// <summary>
|
|
/// Busca un expediente por su numero/codigo visible de Gestiona, por ejemplo "151/2025".
|
|
/// </summary>
|
|
Task<GestionaExpedienteInfo?> BuscarExpedientePorCodigoAsync(string codigoExpediente);
|
|
|
|
/// <summary>
|
|
/// Obtiene los metadatos visibles de un expediente concreto.
|
|
/// </summary>
|
|
Task<GestionaExpedienteInfo?> ObtenerExpedienteAsync(string fileUrl);
|
|
|
|
/// <summary>
|
|
/// Obtiene la última entrada de auditoría del expediente, si Gestiona devuelve contenido.
|
|
/// </summary>
|
|
Task<GestionaAuditInfo?> ObtenerUltimaAuditoriaExpedienteAsync(string fileUrl);
|
|
|
|
Task<List<ExpedienteTerceroDto>> ObtenerExpedientesPorTerceroAsync(
|
|
string nif,
|
|
DateTimeOffset? desde = null,
|
|
DateTimeOffset? hasta = null,
|
|
int maxPages = 1,
|
|
int maxResults = 30,
|
|
int maxParallel = 6
|
|
);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|