CustomerRestController.java

package com.example.orderplatform.customers.api;

import com.example.orderplatform.customers.application.CustomerApplicationService;
import com.example.orderplatform.generated.api.CustomersApi;
import com.example.orderplatform.generated.model.CustomerCreateRequest;
import com.example.orderplatform.generated.model.CustomerResponse;
import java.net.URI;
import java.util.UUID;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;

@RestController
class CustomerRestController implements CustomersApi {

    private final CustomerApplicationService customers;

    CustomerRestController(CustomerApplicationService customers) {
        this.customers = customers;
    }

    @Override
    public ResponseEntity<CustomerResponse> createCustomer(CustomerCreateRequest request) {
        CustomerSnapshot customer = customers.createCustomer(request.getFullName(), request.getEmail());
        return ResponseEntity
                .created(URI.create("/customers/" + customer.id()))
                .body(toResponse(customer));
    }

    @Override
    public ResponseEntity<CustomerResponse> getCustomer(UUID customerId) {
        return ResponseEntity.ok(toResponse(customers.getRequiredCustomer(customerId)));
    }

    private CustomerResponse toResponse(CustomerSnapshot customer) {
        return new CustomerResponse()
                .id(customer.id())
                .email(customer.email())
                .fullName(customer.fullName())
                .status(CustomerResponse.StatusEnum.valueOf(customer.status()));
    }
}