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