diff --git a/src/main/java/com/podzilla/courier/controllers/CourierController.java b/src/main/java/com/podzilla/courier/controllers/CourierController.java index 5a15093..816f7e0 100644 --- a/src/main/java/com/podzilla/courier/controllers/CourierController.java +++ b/src/main/java/com/podzilla/courier/controllers/CourierController.java @@ -1,7 +1,6 @@ package com.podzilla.courier.controllers; import com.podzilla.courier.dtos.couriers.CourierResponseDto; -import com.podzilla.courier.dtos.couriers.CreateCourierRequestDto; import com.podzilla.courier.dtos.couriers.UpdateCourierRequestDto; import com.podzilla.courier.services.courier.CourierService; import io.swagger.v3.oas.annotations.Operation; @@ -12,7 +11,6 @@ import org.slf4j.LoggerFactory; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -58,19 +56,6 @@ public ResponseEntity getCourierById( .orElse(ResponseEntity.notFound().build()); } - @PostMapping - @Operation(summary = "Create a new courier", - description = "Adds a new courier to the system.") - @ApiResponse(responseCode = "200", - description = "Courier successfully created") - public ResponseEntity createCourier( - @RequestBody(description = "Details of the courier to create") - @org.springframework.web.bind.annotation.RequestBody - final CreateCourierRequestDto courier) { - LOGGER.info("Received request to add courier"); - return ResponseEntity.ok(courierService.createCourier(courier)); - } - @PutMapping("/{id}") @Operation(summary = "Update a courier", description = "Updates details of an existing courier.") @@ -82,8 +67,7 @@ public ResponseEntity updateCourier( @Parameter(description = "ID of the courier to update") @PathVariable final String id, @RequestBody(description = "Updated courier details") - @org.springframework.web.bind.annotation.RequestBody - final UpdateCourierRequestDto courier) { + @org.springframework.web.bind.annotation.RequestBody final UpdateCourierRequestDto courier) { LOGGER.info("Received request to update courier with id {}", id); return courierService.updateCourier(id, courier) .map(ResponseEntity::ok) diff --git a/src/main/java/com/podzilla/courier/dtos/couriers/CreateCourierRequestDto.java b/src/main/java/com/podzilla/courier/dtos/couriers/CreateCourierRequestDto.java index 0a5fc54..f56dfac 100644 --- a/src/main/java/com/podzilla/courier/dtos/couriers/CreateCourierRequestDto.java +++ b/src/main/java/com/podzilla/courier/dtos/couriers/CreateCourierRequestDto.java @@ -7,6 +7,8 @@ @Getter @AllArgsConstructor public class CreateCourierRequestDto { + @NotNull(message = "Courier ID is required") + private String courierId; @NotNull(message = "Name is required") private String name; diff --git a/src/main/java/com/podzilla/courier/events/CourierRegisteredEventConsumer.java b/src/main/java/com/podzilla/courier/events/CourierRegisteredEventConsumer.java new file mode 100644 index 0000000..e2b91ac --- /dev/null +++ b/src/main/java/com/podzilla/courier/events/CourierRegisteredEventConsumer.java @@ -0,0 +1,31 @@ +package com.podzilla.courier.events; + +import com.podzilla.courier.dtos.couriers.CreateCourierRequestDto; +import com.podzilla.courier.services.courier.CourierService; +import com.podzilla.mq.EventsConstants; +import com.podzilla.mq.events.BaseEvent; +import com.podzilla.mq.events.CourierRegisteredEvent; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +@Component +public class CourierRegisteredEventConsumer { + private final CourierService courierService; + + public CourierRegisteredEventConsumer(final CourierService courierService) { + this.courierService = courierService; + } + + @RabbitListener(queues = EventsConstants.COURIER_USER_EVENT_QUEUE) + public void consumeCourierRegisteredEvent(final BaseEvent event) { + if (event instanceof CourierRegisteredEvent) { + CourierRegisteredEvent courierRegisteredEvent = (CourierRegisteredEvent) event; + CreateCourierRequestDto courier = new CreateCourierRequestDto( + courierRegisteredEvent.getCourierId(), + courierRegisteredEvent.getName(), + courierRegisteredEvent.getMobileNo() + ); + courierService.createCourier(courier); + } + } +} diff --git a/src/main/java/com/podzilla/courier/mappers/CourierMapper.java b/src/main/java/com/podzilla/courier/mappers/CourierMapper.java index 3981f6b..1f8c095 100644 --- a/src/main/java/com/podzilla/courier/mappers/CourierMapper.java +++ b/src/main/java/com/podzilla/courier/mappers/CourierMapper.java @@ -2,19 +2,19 @@ import com.podzilla.courier.dtos.couriers.CourierResponseDto; import com.podzilla.courier.dtos.couriers.CreateCourierRequestDto; -import com.podzilla.courier.dtos.couriers.UpdateCourierRequestDto; import com.podzilla.courier.models.Courier; public class CourierMapper { - public static Courier toEntity(CreateCourierRequestDto dto) { + public static Courier toEntity(final CreateCourierRequestDto dto) { Courier courier = new Courier(); courier.setName(dto.getName()); courier.setMobileNo(dto.getMobileNo()); + courier.setId(dto.getCourierId()); return courier; } - public static CourierResponseDto toCreateResponseDto(Courier courier) { + public static CourierResponseDto toCreateResponseDto(final Courier courier) { return new CourierResponseDto(courier.getId(), courier.getName(), courier.getMobileNo(), courier.getStatus()); } } diff --git a/src/main/java/com/podzilla/courier/services/delivery_task/DeliveryTaskService.java b/src/main/java/com/podzilla/courier/services/delivery_task/DeliveryTaskService.java index 5e3dacd..4dc9c77 100644 --- a/src/main/java/com/podzilla/courier/services/delivery_task/DeliveryTaskService.java +++ b/src/main/java/com/podzilla/courier/services/delivery_task/DeliveryTaskService.java @@ -160,7 +160,7 @@ public DeliveryTaskResponseDto updateDeliveryTaskLocation(final String orderId, Optional updatedDeliveryTask = deliveryTaskRepository.findByOrderId(orderId).stream().findFirst(); if (updatedDeliveryTask.isPresent()) { DeliveryTask deliveryTask = updatedDeliveryTask.get(); - deliveryTask.setCourierLongitude(latitude); + deliveryTask.setCourierLatitude(latitude); deliveryTask.setCourierLongitude(longitude); deliveryTaskRepository.save(deliveryTask); LOGGER.debug("Location updated for delivery task with order id: {}", orderId); diff --git a/src/test/java/com/podzilla/courier/CourierApplicationTests.java b/src/test/java/com/podzilla/courier/CourierApplicationTests.java index e7df220..5d3e72b 100644 --- a/src/test/java/com/podzilla/courier/CourierApplicationTests.java +++ b/src/test/java/com/podzilla/courier/CourierApplicationTests.java @@ -83,23 +83,6 @@ void getCourierByIdNotFound() throws Exception { .andExpect(status().isNotFound()); } - @Test - @DisplayName("POST /couriers → 200 OK with created courier") - void createCourier() throws Exception { - CreateCourierRequestDto req = new CreateCourierRequestDto("Daisy", "0222333444"); - CourierResponseDto resp = new CourierResponseDto("100", "Daisy", "0222333444", CourierStatus.PICKED_UP); - - Mockito.when(courierService.createCourier(Mockito.any(CreateCourierRequestDto.class))).thenReturn(resp); - - mockMvc.perform(post("/couriers") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(req)) - ) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.id", is("100"))) - .andExpect(jsonPath("$.status", is("PICKED_UP"))); - } - @Test @DisplayName("PUT /couriers/{id} → 200 OK when update succeeds") void updateCourierFound() throws Exception {