Add message history

This commit is contained in:
2026-01-02 01:14:42 +01:00
parent 08afaa19ee
commit a4c72098b3
9 changed files with 366 additions and 7 deletions

View File

@@ -1,6 +1,8 @@
package be.naaturel.boardmateapi.controllers;
import be.naaturel.boardmateapi.common.exceptions.ServiceException;
import be.naaturel.boardmateapi.common.models.Message;
import be.naaturel.boardmateapi.controllers.dtos.MessageDto;
import be.naaturel.boardmateapi.controllers.dtos.MessagePostRequestDto;
import be.naaturel.boardmateapi.controllers.dtos.ResponseBody;
import be.naaturel.boardmateapi.services.MessageService;
@@ -8,10 +10,9 @@ import be.naaturel.boardmateapi.services.WebexService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class ChatController {
@@ -44,7 +45,7 @@ public class ChatController {
return ResponseEntity.
status(HttpStatus.OK)
.body(result);
} catch (Exception e){
} catch (ServiceException e){
result.setMessage(e.getMessage());
return ResponseEntity
.status(HttpStatus.INTERNAL_SERVER_ERROR)
@@ -52,9 +53,32 @@ public class ChatController {
}
}
@GetMapping("/message/history")
public void history(){
@GetMapping("/message/history/{clientId}")
public ResponseEntity<ResponseBody<List<MessageDto>>> history(
@PathVariable String clientId,
@RequestParam(value = "$top", required = false, defaultValue = "20") int top
) {
ResponseBody<List<MessageDto>> result = ResponseBody.createEmpty();
try {
List<Message> messages = this.messageService.getHistory(clientId, top);
List<MessageDto> dtos = messages.stream()
.map(m -> {
MessageDto dto = new MessageDto();
dto.setContent(m.getContent());
dto.setTimestamp(m.getTimeStamp());
return dto;
})
.toList();
result.setSuccess(true);
result.setData(dtos);
return ResponseEntity.status(HttpStatus.OK).body(result);
} catch (ServiceException e) {
result.setMessage(e.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result);
}
}
}

View File

@@ -0,0 +1,26 @@
package be.naaturel.boardmateapi.controllers.dtos;
public class MessageDto {
private String content;
private int timestamp;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getTimestamp() {
return timestamp;
}
public void setTimestamp(int timestamp) {
this.timestamp = timestamp;
}
}

View File

@@ -1,7 +1,14 @@
package be.naaturel.boardmateapi.repository;
import be.naaturel.boardmateapi.repository.dtos.MessageDto;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import java.util.List;
public interface MessageRepo extends MongoRepository<MessageDto, String> {
List<MessageDto> findByClientId(String clientId, Pageable pageable);
}

View File

@@ -3,6 +3,9 @@ package be.naaturel.boardmateapi.repository.mappings;
import be.naaturel.boardmateapi.common.models.Message;
import be.naaturel.boardmateapi.repository.dtos.MessageDto;
import java.util.Collection;
import java.util.List;
public class MessageMapper {
public static Message toModel(MessageDto dto){
@@ -18,4 +21,8 @@ public class MessageMapper {
return dto;
}
public static List<Message> toModels(List<MessageDto> dtos){
return dtos.stream().map(MessageMapper::toModel).toList();
}
}

View File

@@ -1,12 +1,19 @@
package be.naaturel.boardmateapi.services;
import be.naaturel.boardmateapi.common.exceptions.ServiceException;
import be.naaturel.boardmateapi.common.helpers.Logger;
import be.naaturel.boardmateapi.common.models.Message;
import be.naaturel.boardmateapi.repository.MessageRepo;
import be.naaturel.boardmateapi.repository.dtos.MessageDto;
import be.naaturel.boardmateapi.repository.mappings.MessageMapper;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
@Service
public class MessageService {
@@ -23,9 +30,21 @@ public class MessageService {
MessageDto result = repo.save(dto);
return result.getId();
} catch (Exception e){
Logger.displayError(Arrays.toString(e.getStackTrace()));
throw new ServiceException("Failed to save message : " + e.getMessage(), e);
}
}
public List<Message> getHistory(String clientId, int limit) throws ServiceException {
try {
Pageable pageable = PageRequest.of(0, limit, Sort.by(Sort.Direction.DESC, "timeStamp"));
List<MessageDto> messages = repo.findByClientId(clientId, pageable);
return MessageMapper.toModels(messages);
} catch (Exception e){
Logger.displayError(Arrays.toString(e.getStackTrace()));
throw new ServiceException("Failed to retrieve messages history : " + e.getMessage(), e);
}
}
}