Fase 3 · PostgreSQL · Flyway · JPA · SHA-256
A Fase 3 introduz persistência desacoplada para transcrições, permitindo reutilização futura baseada em hash SHA-256 do áudio.
A estratégia prepara o sistema para:
| Camada | Responsabilidade |
|---|---|
| Domain | Entidade Transcription e regras de deduplicação |
| Application | Use cases de persistência e recuperação |
| Port | TranscriptionGateway desacoplado do banco |
| Adapter | Implementação JPA/PostgreSQL |
| Infrastructure | Datasource, Flyway e pool de conexões |
Cada áudio será convertido para um hash SHA-256 determinístico.
audio bytes
↓
SHA-256
↓
audioHash
↓
consulta persistência
↓
reutiliza ou processa IA
O hash será utilizado futuramente como:
O sistema agora possui um serviço dedicado para geração determinística do audioHash utilizando SHA-256 hexadecimal baseado no conteúdo binário do áudio.
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(audioBytes);
return HexFormat.of().formatHex(hash);
O hash será utilizado futuramente para deduplicação de transcrições, reuso inteligente e integração com mecanismos de cache.
O sistema agora possui um caso de uso dedicado para recuperação de transcrições utilizando audioHash.
Optional<Transcription> result =
gateway.findByAudioHash(audioHash);
O fluxo prepara a aplicação para deduplicação futura antes do envio para processamento de IA.
A persistência agora possui implementação concreta utilizando Spring Data JPA e PostgreSQL.
@Entity
@Table(name = "transcriptions")
public class TranscriptionEntity {
@Id
@Column(nullable = false, updatable = false)
private UUID id;
@Column(name = "audio_hash", nullable = false, unique = true, length = 64)
private String audioHash;
@Column(name = "transcription", nullable = false, columnDefinition = "TEXT")
private String transcription;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
}
A entidade JPA permanece separada da entidade de domínio preservando o isolamento arquitetural.
Foi criada a primeira migration Flyway responsável pela estrutura inicial da persistência de transcrições.
CREATE TABLE transcriptions
(
id UUID NOT NULL,
audio_hash VARCHAR(64) NOT NULL,
transcription TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
CONSTRAINT pk_transcriptions PRIMARY KEY (id),
CONSTRAINT uq_transcriptions_audio_hash UNIQUE (audio_hash)
);
O índice único em audio_hash prepara a aplicação para deduplicação eficiente.
| Campo | Tipo | Descrição |
|---|---|---|
| id | UUID | Identificador da transcrição |
| audio_hash | VARCHAR(64) | Hash SHA-256 único |
| transcription | TEXT | Conteúdo transcrito |
| created_at | TIMESTAMP | Data de persistência |
HTTP Request
↓
GetTranscriptionByHashUseCase
↓
TranscriptionGateway
↓
PostgreSQL
(se não existir)
Processar IA
↓
SaveTranscriptionUseCase
↓
Persistir resultado
| Versão | Item |
|---|---|
| 3.1.0 | Setup PostgreSQL + JPA + Flyway |
| 3.2.0 | Entidade de domínio e portas |
| 3.3.0 | Serviço de geração SHA-256 |
| 3.4.0 | SaveTranscriptionUseCase |
| 3.5.0 | GetTranscriptionByHashUseCase |
| 3.6.0 | Migration Flyway inicial |
| 3.7.0 | Adapter JPA + Repository PostgreSQL |
| 3.8.0 | Endpoints de persistência e recuperação |