AdminFulfillmentController.java
package com.rbctcsworld.ecommerce.admin;
import com.rbctcsworld.ecommerce.fulfillment.FulfillmentDtos.ShipRequest;
import com.rbctcsworld.ecommerce.fulfillment.FulfillmentService;
import com.rbctcsworld.ecommerce.order.OrderDtos.OrderResponse;
import com.rbctcsworld.ecommerce.returns.ReturnDtos.ResolveReturnRequest;
import com.rbctcsworld.ecommerce.returns.ReturnRequest;
import com.rbctcsworld.ecommerce.returns.ReturnService;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* Warehouse + customer-service back office (ADMIN only via SecurityConfig /api/admin/**).
* POST /api/admin/orders/{id}/ship {carrier} 200 | 400 | 404 | 409 not PAID
* POST /api/admin/orders/{id}/deliver 200 | 404 | 409 not SHIPPED
* GET /api/admin/returns?status=REQUESTED 200
* POST /api/admin/returns/{id}/approve {note?} 200 | 404 | 409 already resolved
* POST /api/admin/returns/{id}/reject {note?} 200 | 404 | 409 already resolved
*/
@RestController
@RequestMapping("/api/admin")
public class AdminFulfillmentController {
private final FulfillmentService fulfillment;
private final ReturnService returns;
public AdminFulfillmentController(FulfillmentService fulfillment, ReturnService returns) {
this.fulfillment = fulfillment;
this.returns = returns;
}
@PostMapping("/orders/{id}/ship")
public OrderResponse ship(@PathVariable Long id, @Valid @RequestBody ShipRequest r) {
return fulfillment.ship(id, r.carrier());
}
@PostMapping("/orders/{id}/deliver")
public OrderResponse deliver(@PathVariable Long id) {
return fulfillment.deliver(id);
}
@GetMapping("/returns")
public List<ReturnRequest> returns(@RequestParam(required = false) String status) {
return returns.list(status);
}
@PostMapping("/returns/{id}/approve")
public ReturnRequest approve(@PathVariable Long id, @Valid @RequestBody(required = false) ResolveReturnRequest r) {
return returns.approve(id, r == null ? null : r.note());
}
@PostMapping("/returns/{id}/reject")
public ReturnRequest reject(@PathVariable Long id, @Valid @RequestBody(required = false) ResolveReturnRequest r) {
return returns.reject(id, r == null ? null : r.note());
}
}