Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: make appointments #13

Merged
merged 1 commit into from
Sep 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/insomnia.json

Large diffs are not rendered by default.

27 changes: 27 additions & 0 deletions src/modules/users/infra/http/controller/AppointmentsController.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { Request, Response } from 'express';
import { container } from 'tsyringe';

import CreateAppointmentService from '@modules/users/services/CreateAppointmentService';

export default class AppointmentsController {

public async create(req: Request, res: Response): Promise<Response> {
const { id } = req.token;
const { date } = req.body;

const readUser = container.resolve(CreateAppointmentService);

const user = await readUser.execute({
id,
date
});

return res.status(201).json({
...user,
password: undefined,
pin: undefined,
pinExpires: undefined,
pedigree: undefined,
});
}
}
11 changes: 11 additions & 0 deletions src/modules/users/infra/http/routes/appointments.routes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Router } from 'express';
import ensureAuthenticated from '@shared/infra/http/middlewares/EnsureAuthenticated';
import AppointmentsController from '../controller/AppointmentsController';

const appointmentsRouter = Router();

const appointmentsController = new AppointmentsController();

appointmentsRouter.post('/register', ensureAuthenticated, appointmentsController.create);

export default appointmentsRouter;
48 changes: 48 additions & 0 deletions src/modules/users/services/CreateAppointmentService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { inject, injectable } from 'tsyringe';
import sgMail from '@sendgrid/mail';

import { Users } from '@prisma/client';

import AppError from '@shared/errors/AppError';

import IUsersRepository from '../repositories/IUsersRepository';

interface IRequest {
id: string;
date: Date;
}

@injectable()
export default class CreateAppointmentService {
constructor(
@inject('UsersRepository')
private usersRepository: IUsersRepository,
) { }

public async execute({
id, date
}: IRequest): Promise<Users> {
const user = await this.usersRepository.findById(id);
if (!user) throw new AppError('This user does not exist');

date = new Date(date);

sgMail.setApiKey(process.env.SENDGRID_API_KEY as string);
const msg = {
to: "lucas.aguiar@polijunior.com.br",
from: 'tassyla.lima@polijunior.com.br',
subject: 'Apogeo | Solicitação de consulta médica',
text: `João, o usuário ${user.name} solicitou uma consulta médica no dia ${date.getDate()}/${date.getMonth()+1}/${date.getFullYear()} às ${date.getHours()}:${date.getMinutes()}.<br><br><strong>Dados do paciente</strong><br>Nome: ${user.name}<br>Telefone: ${user.phone}<br>Email: ${user.email}<br><br><strong>Data proposta</strong><br>Data: ${date.getDate()}/${date.getMonth()}/${date.getFullYear()}<br>Horário: ${date.getHours()}:${date.getMinutes()}`,
html: `João, o usuário ${user.name} solicitou uma consulta médica no dia ${date.getDate()}/${date.getMonth()+1}/${date.getFullYear()} às ${date.getHours()}:${date.getMinutes()}.<br><br><strong>Dados do paciente</strong><br>Nome: ${user.name}<br>Telefone: ${user.phone}<br>Email: ${user.email}<br><br><strong>Data proposta</strong><br>Data: ${date.getDate()}/${date.getMonth()}/${date.getFullYear()}<br>Horário: ${date.getHours()}:${date.getMinutes()}`,
};

try {
await sgMail.send(msg);
console.log('Email sent');
} catch (error: any) {
console.error(error);
}

return user;
}
}
2 changes: 2 additions & 0 deletions src/shared/infra/http/routes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ import { Router } from 'express';
import usersRoutes from '@modules/users/infra/http/routes/users.routes';
import sessionsRoutes from '@modules/users/infra/http/routes/sessions.routes';
import pedigreesRoutes from '@modules/users/infra/http/routes/pedigrees.routes';
import appointmentsRouter from '@modules/users/infra/http/routes/appointments.routes';

const routes = Router();

routes.use('/user', usersRoutes);
routes.use('/sessions', sessionsRoutes);
routes.use('/pedigree', pedigreesRoutes);
routes.use('/appointments', appointmentsRouter);

export default routes;
Loading