Skip to content

Commit

Permalink
added a service for create appointment
Browse files Browse the repository at this point in the history
  • Loading branch information
santanacostamarco committed May 4, 2020
1 parent 78360a8 commit 9e62b25
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 13 deletions.
28 changes: 15 additions & 13 deletions src/routes/appointments.router.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Router } from 'express';
import { startOfHour, parseISO } from 'date-fns';
import { parseISO } from 'date-fns';
import AppointmentsRepository from '../repositories/AppointmentsRepository';
import CreateAppointmentService from '../services/CreateAppointmentService';

const router = Router();

Expand All @@ -13,20 +14,21 @@ router.get('/', (request, response) => {
router.post('/', (request, response) => {
const { provider, date } = request.body;

const parsedDate = startOfHour(parseISO(date));
try {
const parsedDate = parseISO(date);

if (appointmentsRepository.findByDate(parsedDate)) {
return response
.status(400)
.json({ message: 'This date is already booked.' });
}

const appointment = appointmentsRepository.create({
provider,
date: parsedDate,
});
const createAppointment = new CreateAppointmentService(
appointmentsRepository,
);
const appointment = createAppointment.execute({
provider,
date: parsedDate,
});

return response.json(appointment);
return response.json(appointment);
} catch (err) {
return response.status(400).json({ error: err.message });
}
});

export default router;
40 changes: 40 additions & 0 deletions src/services/CreateAppointmentService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { startOfHour } from 'date-fns';
import AppointmentsRepository from '../repositories/AppointmentsRepository';
import Appointment from '../models/Appointment';

interface CreateAppointmentServiceInterface {
provider: string;

date: Date;
}

class CreateAppointmentService {
private appointmentsRepository: AppointmentsRepository;

constructor(appointmentRepository: AppointmentsRepository) {
this.appointmentsRepository = appointmentRepository;
}

public execute({
provider,
date,
}: CreateAppointmentServiceInterface): Appointment {
const appointmentDate = startOfHour(date);

if (this.appointmentsRepository.findByDate(appointmentDate)) {
throw Error('This date is already booked.');
// return response
// .status(400)
// .json({ message: 'This date is already booked.' });
}

const appointment = this.appointmentsRepository.create({
provider,
date: appointmentDate,
});

return appointment;
}
}

export default CreateAppointmentService;

0 comments on commit 9e62b25

Please sign in to comment.