Story 3 and Story 4 finished

This commit is contained in:
Matthias Engelien
2024-09-11 22:43:38 +02:00
parent 97d86cd11a
commit a2164a0eb3
9 changed files with 264 additions and 36 deletions

View File

@@ -3,31 +3,68 @@
*/
package de.etecture.ga.api;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.Assert;
import de.etecture.ga.dto.Termin;
import de.etecture.ga.dto.TerminRequest;
import de.etecture.ga.dto.mapper.AppointmentTerminMapper;
import de.etecture.ga.model.Appointment;
import de.etecture.ga.service.AppointmentService;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
*
*/
@AllArgsConstructor
@Controller
@Slf4j
public class GarageApiController implements WerkstattApi {
private final AppointmentService appointmentService;
@Override
public ResponseEntity<Termin> getTermin(String werkstattId, String terminId) {
// TODO Auto-generated method stub
return WerkstattApi.super.getTermin(werkstattId, terminId);
public ResponseEntity<Termin> getTermin(@NotNull String werkstattId, @NotNull String terminId) {
Assert.isTrue(NumberUtils.isParsable(werkstattId), "werkstattId ungültig");
Assert.isTrue(NumberUtils.isParsable(terminId), "terminId ungültig");
Optional<Appointment> appointment = appointmentService.getAppointment(Long.parseLong(terminId),
Long.parseLong(werkstattId));
return ResponseEntity.of(appointment.map(AppointmentTerminMapper::toTermin));
}
@Override
public ResponseEntity<List<Termin>> getTermine(String werkstattId, @Valid String von, @Valid String bis,
public ResponseEntity<List<Termin>> getTermine(@NotNull String werkstattId, @Valid String von, @Valid String bis,
@Valid String leistungsId) {
// TODO Auto-generated method stub
return WerkstattApi.super.getTermine(werkstattId, von, bis, leistungsId);
Assert.isTrue(NumberUtils.isParsable(werkstattId), "werkstattId ungültig");
long garageId = Long.parseLong(werkstattId);
Optional<Long> serviceId = NumberUtils.isParsable(leistungsId) ? Optional.of(Long.parseLong(leistungsId))
: Optional.empty();
Optional<Date> appointmentsFrom = Optional.ofNullable(parseLocalDateTime(von));
Optional<Date> appointmentsTill = Optional.ofNullable(parseLocalDateTime(bis));
log.info("Filter appointments by garage {}, serviceId {}, from {}, till {}", garageId, serviceId,
appointmentsFrom, appointmentsTill);
return ResponseEntity
.ok(appointmentService.getAppointments(garageId, serviceId, appointmentsFrom, appointmentsTill).stream()
.map(AppointmentTerminMapper::toTermin).toList());
}
@Override
@@ -43,4 +80,18 @@ public class GarageApiController implements WerkstattApi {
return WerkstattApi.super.postTermin(werkstattId, termin);
}
private Date parseLocalDateTime(String dateTimeString) {
if (StringUtils.isNotBlank(dateTimeString)) {
try {
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy hh:mm");
return format.parse(dateTimeString);
} catch (ParseException e) {
log.error("Invalid data to parse", e);
}
}
return null;
}
}