import de.juplo.kafka.chat.backend.domain.ChatHome;
import de.juplo.kafka.chat.backend.domain.Chatroom;
+import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.time.Clock;
import java.time.LocalDateTime;
-import java.util.Collection;
import java.util.Optional;
import java.util.UUID;
+import java.util.stream.Stream;
@RestController
{
private final ChatHome chatHome;
private final Clock clock;
+ private final StorageStrategy storageStrategy;
@PostMapping("create")
- public Chatroom create(@RequestBody String name)
+ public ChatroomTo create(@RequestBody String name)
{
- return chatHome.createChatroom(name);
+ return ChatroomTo.from(chatHome.createChatroom(name));
}
@GetMapping("list")
- public Collection<Chatroom> list()
+ public Stream<ChatroomTo> list()
{
- return chatHome.list();
+ return chatHome.list().map(chatroom -> ChatroomTo.from(chatroom));
}
@GetMapping("get/{chatroomId}")
- public Optional<Chatroom> get(@PathVariable UUID chatroomId)
+ public Optional<ChatroomTo> get(@PathVariable UUID chatroomId)
{
- return chatHome.getChatroom(chatroomId);
+ return chatHome.getChatroom(chatroomId).map(chatroom -> ChatroomTo.from(chatroom));
}
@PutMapping("put/{chatroomId}/{username}/{messageId}")
.log()
.map(message -> MessageTo.from(message));
}
+
+ @PostMapping("/store")
+ public void store()
+ {
+ storageStrategy.writeChatrooms(Flux.fromStream(chatHome.list()));
+ }
}