refactor: DRY for logging-category from io.projectreactor
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / storage / mongodb / MongoDbStorageStrategy.java
1 package de.juplo.kafka.chat.backend.storage.mongodb;
2
3 import de.juplo.kafka.chat.backend.domain.ChatRoomInfo;
4 import de.juplo.kafka.chat.backend.domain.Message;
5 import de.juplo.kafka.chat.backend.implementation.StorageStrategy;
6 import lombok.RequiredArgsConstructor;
7 import lombok.extern.slf4j.Slf4j;
8 import reactor.core.publisher.Flux;
9
10 import java.util.UUID;
11
12
13 @RequiredArgsConstructor
14 @Slf4j
15 public class MongoDbStorageStrategy implements StorageStrategy
16 {
17   private final ChatRoomRepository chatRoomRepository;
18   private final MessageRepository messageRepository;
19
20
21   @Override
22   public Flux<ChatRoomInfo> writeChatRoomInfo(Flux<ChatRoomInfo> chatRoomInfoFlux)
23   {
24     return chatRoomInfoFlux
25         .map(ChatRoomTo::from)
26         .map(chatRoomRepository::save)
27         .map(ChatRoomTo::toChatRoomInfo);
28   }
29
30   @Override
31   public Flux<ChatRoomInfo> readChatRoomInfo()
32   {
33     return Flux
34         .fromIterable(chatRoomRepository.findAll())
35         .map(ChatRoomTo::toChatRoomInfo);
36   }
37
38   @Override
39   public Flux<Message> writeChatRoomData(UUID chatRoomId, Flux<Message> messageFlux)
40   {
41     return messageFlux
42         .map(message -> MessageTo.from(chatRoomId, message))
43         .map(messageRepository::save)
44         .map(MessageTo::toMessage);
45   }
46
47   @Override
48   public Flux<Message> readChatRoomData(UUID chatRoomId)
49   {
50     return Flux
51         .fromIterable(messageRepository.findByChatRoomIdOrderBySerialAsc(chatRoomId.toString()))
52         .map(MessageTo::toMessage);
53   }
54 }