CRUD todo-list API usando LoopBack4 + MongoDB

Leandro Gomes
5 min readApr 14, 2021

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.

--

--

Leandro Gomes

Estudante de Engenharia Informática do Instituto Politécnico da Guarda.