Skip to content

Commit

Permalink
chore: Marcar uma notificação como lida
Browse files Browse the repository at this point in the history
Cenário: O provedor de serviços acessou o sistema, verificou as notificações e
        clicou no botão de marcar notificação como lida.
        - O sistema deve verificar se o usuário é um provedor de serviço
  • Loading branch information
dzvid committed Sep 9, 2019
1 parent d42381b commit e26339f
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 1 deletion.
39 changes: 39 additions & 0 deletions src/app/controllers/NotificationController.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,45 @@ class NotificationController {

return res.json(notifications);
}

/**
* Marca uma notificação como lida pelo provedor de serviço
* @param {string} req.id - id da notificação armazenada
* @param {*} res
*/
async update(req, res) {
// TODO - Validar o id da notificação usando o Yup

// Verificamos se o usuário logado é um prestador de serviços
const checkIsProvider = await User.findOne({
where: { id: req.userId, provider: true },
});

if (!checkIsProvider) {
return res
.status(401)
.json({ error: 'Invalid provider, cant update notification status' });
}

// TODO - Verificar se o agendamento está sendo lido pelo provedor de serviços correto
// Provider David não pode ler as notificacoes do provider Leo, no momento, basta o provider
// estar logado e alterar o id da notificacao para o de um outro provider e o sistema marcará
// como lido, esse comportamento esta errado, pode ser feito no bloco de codigo que verifica
// se o usuario é um provider comparando o provider id com o req.userId.

// TODO - Tratar verificacao de id de notificacao invalido/mal formado via try/catch
// e.g: id = 5d76b0a89a64d877d2002376, ok
// id = 5d76b0a89a64d877d200237 erro (tem um digito a menos)

// Consultamos o id, atualizamos seu valor e retornamos o novo valor do registro
const notification = await Notification.findByIdAndUpdate(
req.params.id,
{ read: true },
{ new: true }
);

return res.json(notification);
}
}

export default new NotificationController();
3 changes: 3 additions & 0 deletions src/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ routes.get('/schedule', ScheduleController.index);
// Rota para listar as notificações de um usuário (prestador de serviço)
routes.get('/notifications', NotificationController.index);

// Rota para marcar notificação como lida
routes.put('/notifications/:id', NotificationController.update);

// Rota de upload de arquivos (imagem de avatar do usuario)
routes.post('/files', upload.single('file'), FileController.store);

Expand Down
4 changes: 3 additions & 1 deletion steps.txt
Original file line number Diff line number Diff line change
Expand Up @@ -463,4 +463,6 @@ chore: Criar rota para listar notificações do prestador de serviço.
- A rota (funcionalidade) só deve ser acessada por prestadores de serviços.
- As notificações devem ser ordenadas da mais recente para a mais antiga.

12.1
-----------------------

Aula - Listando notificações do usuário (prestador de serviço)

0 comments on commit e26339f

Please sign in to comment.