CRUD todo-list API usando LoopBack4 + MongoDB
Usando a CMD vamos criar o nosso projeto ao qual podemos chamar por exemplo app-todo-list, execuntando o seguinte código na CMD
lb4 app-todo-list-mongodb
Depois preenchemos os dados como na figura seguinte
depois de estar o projeto criado executamos na CMD o seguinte comando para entrarmos na pasta do projeto
cd app-todo-list-mongodb
Agora vamos começar a definir as propriedades do nosso modelo, para isso vamos executar o seguinte comando
lb4 model
E depois preencher os dados do nosso modelo como na figura seguinte
Assim deve ficar o nosso ficheiro todo.model.ts que está na pasta models, que por sua vez está na pasta src
import {Entity, model, property} from '@loopback/repository';@model()
export class Todo extends Entity {
@property({
type: 'number',
id: true,
generated: true,
})
id?: number;@property({
type: 'string',
required: true,
})
title: string;@property({
type: 'string',
})
desc?: string;@property({
type: 'boolean',
})
isComplete?: boolean;@property({
type: 'string',
})
remindAtAddress?: string;@property({
type: 'string',
})
remindAtGeo?: string;@property({
type: 'any',
})
tag?: any;constructor(data?: Partial<Todo>) {
super(data);
}
}export interface TodoRelations {
// describe navigational properties here
}export type TodoWithRelations = Todo & TodoRelations;
Agora vamos criar a datasource usando o seguinte comando
lb4 datasource
Preenchemos os dados
O nome da datasource e selecionamos a forma como queremos guardar os dados da nossa API, para este exemplo vamos guardar na MongoDB selecionando a seguinte opção na CMD
Preenchemos os dados da seguinte forma
Vamos agora definir o repositório, inserindo o seguinte comando na CMD
lb4 repository
E seguir os seguintes passos e executar, para que seja criado
Vamos agora definir o controller para que seja criado, usando o seguinte comando na CMD
lb4 controller
A MongoDB, gera um _idObject, que utiliza como chave primaria, para podermos ficar com um id numérico, inteiro e sequencial, temos que fazer algumas alterações no ficheiro todo.model.ts e no ficheiro todo.ontroller.ts
Começando pelo todo.model.ts, temos que alterar a propriedade id, para que este não seja gerado automaticamente e para que comece em 1, a propriedade id deverá ficar assim
Passamos agora ao todo.controller.js, onde temos que alterar a função create, de maneira a obrigar o _id a ser numérico, a função create deverá ficar da seguinte forma
Na primeira linha que está assinalada a vermelho retiramos o id que estava dentro das plicas, para não omitir o id, depois o bloco de código assinalado a vermelho é onde primeiro guardamos na variável todoId o ultimo id inserido, depois se o todoId não for null, passamos o id da variável todoId para uma variável aux1 do tipo string, depois para podermos incrementar essa variável, temos que fazer o parse para inteiro e guardar numa variável aux , depois incrementamos a variável aux e por fim atribuímos o valor da variável aux ao campo id da nossa coleção Todo, senão forçamos o todo.id a ser igual a 1 e se estiver tudo bem feito só na criação do primeiro registo é que vai executar o else que força o id da nossa coleção a ser 1. As linhas assinaladas a verde foram usadas para debug.
Poderíamos ter definido o id como string e assim pesquisávamos pelo id que aparece na mongoDB, mas o ObjectId criado pelo mongoDB é a chave primária e é única, mas não nos permite ordenar por id, nem saber qual foi o primeiro documento inserido, com estas pequenas alterações no código a nossa base de dados fica mais organizada e funcional, para o exemplo que estamos a desenvolver.
Para ativar o servidor executamos o seguinte comando
npm start
De seguida inserimos o seguinte url no browser
http://localhost:3000/explorer/#/
Este será o resultado, onde temos todas as funções da nossa API
Vamos inserir um novo documento
Agora vamos ao mongoDBCompass ver se foi inserido
Inserimos mais um todo por exemplo
Vamos ver o resultado no MongoDBCompass
Agora vamos pesquisar por um id, por exemplo o do ultimo todo que inserimos e o resultado será
E assim criamos uma todo-list API que usa a mongoDB para guardar os nossos documentos.
Este projeto está disponível no repositório do github.