MessageController.java

package com.example.messaging.api;

import com.example.messaging.messaging.MessagePublisher;
import com.example.messaging.persistence.MessageRepository;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
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.RestController;

@RestController
@RequestMapping("/messages")
public class MessageController {
    private final MessagePublisher messagePublisher;
    private final MessageRepository messageRepository;

    public MessageController(MessagePublisher messagePublisher, MessageRepository messageRepository) {
        this.messagePublisher = messagePublisher;
        this.messageRepository = messageRepository;
    }

    @PostMapping
    public ResponseEntity<Void> post(@Valid @RequestBody MessageRequest request) {
        messagePublisher.publish(request.messageId(), request.payload().toString());
        return ResponseEntity.accepted().build();
    }

    @GetMapping("/{messageId}")
    public ResponseEntity<MessageStatusResponse> status(@PathVariable String messageId) {
        boolean persisted = messageRepository.findByMessageId(messageId).isPresent();
        if (!persisted) {
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok(new MessageStatusResponse(messageId, "PERSISTED"));
    }
}