Pular para o conteúdo principal

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",
},
};
CampoTipoDescrição
IDstringIdentificador único do anexo
BASE64stringConteúdo do anexo em formato Base64
ISVIDEObooleanIndica 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?",
},
};
CampoTipoDescrição
VIDEOSANTESrecordVideosData[]Lista de vídeos do cenário "antes"
VIDEOSDEPOISrecordVideosData[]Lista de vídeos do cenário "depois"

Schema de Vídeos (recordVideosData)​

CampoTipoDescrição
NUVIDEOstring?Identificador único do vídeo no servidor
SIZEdouble?Tamanho do arquivo em bytes
FILENAMEstring?Nome do arquivo de vídeo
TYPEstring?Tipo do vídeo (antes/depois)

Relacionamentos​

Os vídeos são armazenados em duas camadas:

  1. O conteúdo binário (Base64) é armazenado na tabela attachmentImage
  2. Os metadados do vídeo são armazenados na tabela recordVideosData
  3. A relação entre registros e vídeos é estabelecida através dos arrays VIDEOSANTES e VIDEOSDEPOIS na tabela recordsData

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