Schemas do Banco de Dados
Última atualização: 30 de julho de 2024
Visão Geral
Este documento descreve os schemas do banco de dados local Realm utilizados no aplicativo Promoter, com foco nas estruturas que suportam o armazenamento de vídeos e imagens.
Schemas Principais
Schema de Anexos (attachments.ts)
O schema attachmentImage foi adaptado para suportar tanto imagens quanto vídeos através da adição do campo ISVIDEO.
export const attachmentImage: Realm.ObjectSchema = {
name: "attachmentImage",
primaryKey: "ID",
properties: {
ID: "string",
BASE64: "string",
ISVIDEO: "bool",
},
};
| Campo | Tipo | Descrição |
|---|---|---|
| ID | string | Identificador único do anexo |
| BASE64 | string | Conteúdo do anexo em formato Base64 |
| ISVIDEO | boolean | Indica se o anexo é um vídeo (true) ou imagem (false) |
Schema de Registros (records.ts)
O schema recordsData foi estendido para incluir informações sobre vídeos associados aos registros.
export const recordsData: Realm.ObjectSchema = {
name: "recordsData",
primaryKey: "NUPRM",
properties: {
// Campos existentes
NUPRM: "string",
DTPRM: "date",
// ...
// Novos campos para vídeos
VIDEOSANTES: "recordVideosData[]",
VIDEOSDEPOIS: "recordVideosData[]",
},
};
export const recordVideosData: Realm.ObjectSchema = {
name: "recordVideosData",
properties: {
NUVIDEO: "string?",
SIZE: "double?",
FILENAME: "string?",
TYPE: "string?",
},
};
| Campo | Tipo | Descrição |
|---|---|---|
| VIDEOSANTES | recordVideosData[] | Lista de vídeos do cenário "antes" |
| VIDEOSDEPOIS | recordVideosData[] | Lista de vídeos do cenário "depois" |
Schema de Vídeos (recordVideosData)
| Campo | Tipo | Descrição |
|---|---|---|
| NUVIDEO | string? | Identificador único do vídeo no servidor |
| SIZE | double? | Tamanho do arquivo em bytes |
| FILENAME | string? | Nome do arquivo de vídeo |
| TYPE | string? | Tipo do vídeo (antes/depois) |
Relacionamentos
Os vídeos são armazenados em duas camadas:
- O conteúdo binário (Base64) é armazenado na tabela
attachmentImage - Os metadados do vídeo são armazenados na tabela
recordVideosData - A relação entre registros e vídeos é estabelecida através dos arrays
VIDEOSANTESeVIDEOSDEPOISna tabelarecordsData
Operações Comuns
Inserção de Vídeo
// Exemplo de inserção de vídeo no banco de dados
const saveVideoToDatabase = (id: string, base64: string) => {
realm.write(() => {
realm.create("attachmentImage", {
ID: id,
BASE64: base64,
ISVIDEO: true,
});
});
};
Recuperação de Vídeo
// Exemplo de recuperação de vídeo do banco de dados
const getVideoFromDatabase = (id: string) => {
return realm.objectForPrimaryKey("attachmentImage", id);
};
Associação de Vídeo a um Registro
// Exemplo de associação de vídeo a um registro
realm.write(() => {
const record = realm.objectForPrimaryKey("recordsData", NUPRM);
record.VIDEOSANTES.push({
NUVIDEO: videoId,
SIZE: videoSize,
FILENAME: `video_${Date.now()}.mp4`,
TYPE: "before",
});
});
Considerações de Performance
- Os vídeos em Base64 podem ocupar muito espaço no banco de dados local
- Recomenda-se implementar uma estratégia de limpeza para remover vídeos antigos ou já sincronizados
- Para melhorar a performance, considere armazenar apenas os metadados no banco de dados e os arquivos de vídeo no sistema de arquivos