Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

KAFSMongoAPI

Servidor DataSnap integrado com MongoDB Atlas para persistência de dados. Oferece endpoints RESTful para operações básicas de banco de dados.

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

Logo

KAFS Mongo API

Servidor DataSnap integrado com MongoDB Atlas para persistência de dados.

Oferece endpoints RESTful para operações básicas de banco de dados.

) )

)

⚠️ Dependências externas

*Componente utilizado nos exemplos de consumo no cliente. Não é necessário para compilar este projeto servidor.

🪟 Executar no Windows

bash
KAFSMongoDBAPI.exe -p porta -u usuario_mongodbatlas -s senha_mongodbatlas -h servidor_mongodbatlas -c resfriamento_em_milisegundos_mongodbatlas

ou somente

bash
KAFSMongoDBAPI.exe

🐧 Executar no Linux

bash
chmod +x KAFSMongoDBAPI
./KAFSMongoDBAPI -p porta -u usuario_mongodbatlas -s senha_mongodbatlas -h servidor_mongodbatlas -c resfriamento_em_milisegundos_mongodbatlas

ou somente

bash
chmod +x KAFSMongoDBAPI
./KAFSMongoDBAPI

*(-c "tempo_em_milisegundos") Todas as requisições respeitarão uma fila e um tempo determinado antes de serem executadas. Isso evita estouro de condições de planos do MongoDB Atlas.

*(-c 0) Caso determine como ZERO, não será montada fila e todas as requisições serão executadas livremente em tempo real.

*O sistema também pode ser executado sem determinar nenhuma configuração, neste caso as configurações serão requisitadas internamente na primeira execução.

⚡ Método - Ping

pascal
function TServerMethods.Ping: Boolean;

🏛️ Exemplo de consumo no cliente:

pascal
var ServidorAtivo := ServerMethods.Ping;
if ServidorAtivo then
  ShowMessage('Servidor respondendo corretamente')
else
  ShowMessage('Servidor indisponível');

⚡ Método - Timer

pascal
function TServerMethods.Timer: Int64;

🏛️ Exemplo de consumo no cliente:

pascal
var TimestampServidor := ServerMethods.Timer;
ShowMessage('Timestamp do servidor: ' + IntToStr(TimestampServidor));

⚡ Método - Inserir dados

pascal
procedure TServerMethods.InserirDadosMongoDB(const _base, _colecao: String; const _dados: TJSONArray);

🏛️ Exemplo de consumo no cliente:

pascal
var _dadosinserir := TJSONArray.Create;
var _novousuario: TJSONObject;
try
  // Primeiro documento
  _novousuario := TJSONObject.Create;
  _novousuario.AddPair('nome', 'João Silva');
  _novousuario.AddPair('email', 'joao@empresa.com');
  _novousuario.AddPair('data_nascimento', TJSONNumber.Create(831456000)); // Unix: 01/05/1996
  _novousuario.AddPair('departamento', 'TI');
  _novousuario.AddPair('salario', TJSONNumber.Create(4500.00));
  _novousuario.AddPair('ativo', TJSONBool.Create(True));
  _dadosinserir.AddElement(_novousuario);

  // Segundo documento
  _novousuario := TJSONObject.Create;
  _novousuario.AddPair('nome', 'Maria Santos');
  _novousuario.AddPair('email', 'maria@empresa.com');
  _novousuario.AddPair('data_nascimento', TJSONNumber.Create(713808000)); // Unix: 15/08/1992
  _novousuario.AddPair('departamento', 'TI');
  _novousuario.AddPair('salario', TJSONNumber.Create(5200.00));
  _novousuario.AddPair('ativo', TJSONBool.Create(True));
  _dadosinserir.AddElement(_novousuario);

  // Adicione quantos documentos forem necessários...

  // Executa inserção
  ServerMethods.InserirDadosMongoDB('nome_base', 'nome_coleção', _dadosinserir);
  ShowMessage('Dados inseridos com sucesso!');
finally
  FreeAndNil(_dadosinserir);
end;

⚡ Método - Editar dados

pascal
procedure TServerMethods.EditarDadosMongoDB(const _base, _colecao, _filtros: String; const _dados: TJSONArray);

🏛️ Exemplo de consumo no cliente:

pascal
var _filtros := '{"$and": [{"departamento": "TI"}, {"data_nascimento": {"$lte": 788918400}}]}'; // Nascidos antes de 1995
var _dadosatualizar := TJSONArray.Create;
var _camposatualizar: TJSONObject;
try
  _camposAtualizar := TJSONObject.Create;
  _camposAtualizar.AddPair('salario', TJSONNumber.Create(5500.00));
  _camposAtualizar.AddPair('nivel', 'Sênior');
  _camposAtualizar.AddPair('ultima_promocao', FormatDateTime('yyyy-mm-dd', Now));
  _dadosatualizar.AddElement(_camposatualizar);

  // Adicione quantos documentos forem necessários...

  // Executa edição
  ServerMethods.EditarDadosMongoDB('nome_base', 'nome_coleção', _filtros, _dadosatualizar);
  ShowMessage('Dados editados com sucesso!');
finally
  FreeAndNil(_dadosatualizar);
end;

⚡ Método - Buscar dados

pascal
function TServerMethods.BuscarDadosMongoDB(const _base, _colecao, _filtros, _projecoes: String): TJSONArray;

🏛️ Exemplo de consumo no cliente:

pascal
var _resultados: TJSONArray;
var _filtros := '{"departamento": "TI"}';
var _projecoes := '{"nome": 1, "email": 1, "data_nascimento": 1, "salario": 1, "nivel": 1, "_id": 0}';
var _dadosusuario: TJSONObject;
var _dataNasc: TDateTime;
try
  // Executa busca
  var _resultados := ServerMethods.BuscarDadosMongoDB('nome_base', 'nome_coleção', _filtros, _projecoes);
    
  // Varre o resultado
  for var I := 0 to _resultados.Count - 1 do
  begin
    _dadosusuario := _resultados.Items[I] as TJSONObject;
      
    ShowMessage(Format('%s (%s) - Nascimento: %s - Salário: R$ %.2f - Nível: %s', 
      [_dadosusuario.GetValue('nome').Value,
       _dadosusuario.GetValue('email').Value,
       FormatDateTime('dd/mm/yyyy', UnixToDateTime(_dadosusuario.GetValue('data_nascimento').Value.ToInteger)),
       _dadosusuario.GetValue('salario').Value.ToDouble,
       _dadosusuario.GetValue('nivel', 'Não definido')]));
  end;
    
  ShowMessage(Format('Encontrados %d funcionários de TI', [_resultados.Count]));
finally
  FreeAndNil(_resultados);
end;

📜 Exemplo de resposta:

json
[
  {
    "nome": "João Silva",
    "email": "joao@empresa.com",
    "data_nascimento": 831456000,
    "salario": 4500.00
  },
  {
    "nome": "Maria Santos",
    "email": "maria@empresa.com", 
    "data_nascimento": 713808000,
    "salario": 5500.00,
    "nivel": "Sênior"
  }
]

⚡ Método - Excluir dados

pascal
procedure TServerMethods.ExcluirDadosMongoDB(const _base, _colecao, _filtros: String);

🏛️ Exemplo de consumo no cliente:

pascal
// Excluir usuários inativos OU com salário muito baixo
var _filtros := '{"$or": [{"ativo": false}, {"salario": {"$lt": 2000}}]}';
ServerMethods.ExcluirDadosMongoDB('nome_base', 'nome_coleção', _filtros);

*A exclusão é PERMANENTE. Sempre teste os filtros com BuscarDados antes de executar ExcluirDados!


Nota: Requer configuração prévia do MongoDB Atlas através do componente TKAFSConexaoMongo ou da configuração manual de um FDConnection e das credenciais apropriadas para funcionamento completo. Todos os filtros e projeções seguem o padrão do MongoDB. Certifique-se de ter todas as unidades externas baixadas e configuradas corretamente no projeto.