Skip to content

thiago-claravista/working-days-validator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Working Days Validator

Lista de conteúdo

Introdução

API de validação de dias úteis incluindo a manipulação de datas comemorativas, como feriados nacionais e facultativos.

Instalação

Para executar a aplicação, é necessário ter o Node.js instalado no ambiente de execução.

No diretório do projeto, em linha de comando, instale as dependência do projeto com npm install:

$ npm install

Execute a aplicação com o comando npm start:

$ npm start

Autenticação

Para realizar as requisições nos endpoints da API, é necessário se autenticar passando no cabeçalho da requisição um token fixo precedido da palavra 'Bearer'. O token é alcançado através da codificação da palavra passe 'Claravista@2022' utilizando base64.
É recomendável utilizar o método btoa(), nativo do JavaScript, que codifica utf-16 para base64:

btoa("exemplo");
// 'ZXhlbXBsbw=='

No cabeçalho da requisição teríamos algo parecido com:

{
  Authorization: `Bearer ${btoa("Claravista@2022")}`;
}

Formatos de Data

As datas são validadas na aplicação utilizando a expressão regular /^(\d{2})[-/](\d{2})([-/](\d{4}))?$/. Sendo assim, as datas aceitas podem conter apenas dia e mês (dd-mm ou dd/mm) ou dia, mês e ano (dd-mm-yyyy ou dd/mm/yyyy).
Exemplos de algumas datas válidas e inválidas:

Valid

  • 01-01-2022
  • 01-01
  • 01/01/2022
  • 01/01

Invalid

  • 01-01-22
  • 01-01-
  • 2022-01-01
  • 01/01/22
  • 01/01/
  • 2022/01/01

Feriados

Para a manipulação de feriados, foram desenvolvidas rotas de GET, POST, PUT e DELETE, onde as datas podem ser consultados, inseridas, alteradas e deletadas.

Consultando datas

GET
Para obter uma listagem de todas as datas presentes na aplicação, basta realizar uma chamada GET para o endpoint /holidays.
Alguns parâmetros são aceitos para filtrar a busca de datas, sendo eles os parâmetros day, month e year que podem ser informados como query params na URL. Como exemplo, se quisermos listar todos os feriados do mês de novembro de 2022 podemos efetuar a requisição passando os seguintes parâmetros:

  • /holidays?month=11&year=2022

Sendo assim, obteremos uma resposta semelhante ao objeto abaixo:

[
  {
    "day": 2,
    "month": 11,
    "year": null,
    "date": "02/11",
    "description": "Finados",
    "id": "6388c8cae77237787303f2b8"
  },
  {
    "day": 15,
    "month": 11,
    "year": null,
    "date": "15/11",
    "description": "Proclamação da República",
    "id": "6388c8cae77237787303f2b9"
  }
]

Percebe-se que mesmo especificando o ano de 2022 na busca, as datas que foram registradas sem esse dado foram retornadas, pois elas são consideradas em todos os anos.

Inserindo datas

POST

Para inserir uma data na aplicação, é necessário realizar uma chamada POST para o endpoint /holidays passando um JSON no corpo da requisição com os atributos date e description.

Caso queira inserir uma data que será considerada para todos os anos, você deve omitir o ano no valor informado no campo date e obedecer o formado dd-mm ou dd/mm.

{
  "date": "25/12",
  "description": "Natal"
}

No caso de uma data que será considerada apenas em um ano específico, ela deve obedecer o formato dd-mm-yyyy ou dd/mm/yyyy.

{
  "date": "15/04/2022",
  "description": "sexta feira santa"
}

Em caso de sucesso, será obtido uma resposta com status code 201 e um objeto JSON do registro criado.

{
  "day": 15,
  "month": 4,
  "year": 2022,
  "date": "15/04/2022",
  "description": "sexta feira santa",
  "createdAt": "2022-12-01T19:38:41.183Z",
  "updatedAt": "2022-12-01T19:38:41.183Z",
  "id": "638902c1bd015b3c5420b3fb"
}

Deletando datas

DELETE

Para deletar uma data na aplicação, é necessário realizar uma requisição DELETE para o endpoint /holidays/:id passando o id da data cadastrada, que é obtido consultando datas, como descrito acima.

  • /holidays/6387c0689115340b43fc8fc8

Em caso de sucesso, será obtido uma resposta com status code 200 e um objeto JSON do registro deletado.

Alterando datas

PUT

Para alterar uma data na aplicação, é necessário realizar uma chamada PUT para o endpoint /holidays/:id passando o id da data cadastrada, que é obtido consultando datas, como descrito acima, e um JSON no corpo da requisição contendo unico e obrigatóriamente o campo description.

  • /holidays/638902c1bd015b3c5420b3fb
{
  "description": "Sexta-feira Santa"
}

Esse tipo de operação, só permite alterações na descrição da data.
Em caso de sucesso, será obtido uma resposta com status code 200 e um JSON do objeto alterado.

{
  "day": 15,
  "month": 4,
  "year": 2022,
  "date": "15/04/2022",
  "description": "Sexta-feira Santa",
  "createdAt": "2022-12-01T19:38:41.183Z",
  "updatedAt": "2022-12-01T19:39:27.123Z",
  "id": "638902c1bd015b3c5420b3fb"
}

Validação

A rota de validação permite consultar se uma determinada data é um dia útil ou não. A API irá verificar se na data informada existe algum feriado previamente inserido na base de dados ou se a data simplesmente cairá em um final de semana (sábado ou domingo).

Validando Datas

GET

Por padrão, a API valida apenas dias úteis, invalidando datas que caem em finais de semana. Para incrementar feriados na validação, é necessário informar o parâmetro holidays=true.
Para obter a validação de uma data, é necessário informá-la como query param na URL através do atributo date, obedecendo os formatos válidos. Exemplo, verificando se a data 15/04/2022 é um dia útil.

  • /validate?date=15-11-2022&holidays=true

Nesse cenário, obteremos o seguinte retorno:

{
  "valid": false,
  "description": "Sexta-feira Santa"
}

A data acima foi cadastrada anteriormente apenas para o ano de 2022, logo, se buscarmos o mesmo dia e mês para o ano anterior (2021) o resultado esperado será diferente.

  • /validate?date=15-11-2021&holidays=true
{
  "valid": true
}

Se o ano da data informada for omitido, a API irá considerar o ano vigente do momento da requisição. No cenário acima, omitir a data nas requisições nos traria o mesmo resultado do primeiro exemplo, considerando o ano vigente como 2022.

About

API de validação de dias úteis incluindo a adição de datas comemorativas

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published