You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.5 KiB
85 lines
3.5 KiB
package org.ros.chatto.controller;
|
|
|
|
import java.security.Principal;
|
|
import java.time.OffsetDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatterBuilder;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
import org.ros.chatto.dto.ChatMessageDTO;
|
|
import org.ros.chatto.model.MessageCipher;
|
|
import org.ros.chatto.service.ChatService;
|
|
import org.ros.chatto.service.UserService;
|
|
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.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.ResponseBody;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
@RestController
|
|
@RequestMapping("/api/chat")
|
|
public class ChatMessageController {
|
|
@Autowired
|
|
private ChatService chatService;
|
|
|
|
@Autowired
|
|
private UserService userService;
|
|
|
|
@PostMapping(value = "/post/message", consumes = { "application/json" })
|
|
@ResponseBody
|
|
public ResponseEntity<ChatMessageDTO> newMessage(@RequestBody ChatMessageDTO chatMessageDTO, Principal principal) {
|
|
MessageCipher messageCipher = chatMessageDTO.getMessageCipher();
|
|
String fromUser = principal.getName();
|
|
String toUser = chatMessageDTO.getToUser();
|
|
System.out.println("Message cipher = " + messageCipher);
|
|
chatService.saveNewMessage(fromUser, toUser, messageCipher);
|
|
return new ResponseEntity<ChatMessageDTO>(HttpStatus.OK);
|
|
}
|
|
|
|
@GetMapping(value = "/get/messages/{userName}")
|
|
@ResponseBody
|
|
public List<ChatMessageDTO> sendAllMessages(@PathVariable String userName, Principal principal) {
|
|
List<ChatMessageDTO> chatMessageDTOs = chatService.getAllMessages(principal.getName(), userName);
|
|
return chatMessageDTOs;
|
|
}
|
|
@GetMapping(value = "/get/messages/{userName}/{lastMessageTime}")
|
|
@ResponseBody
|
|
public List<ChatMessageDTO> sendNewMessages(@PathVariable String userName, @PathVariable String lastMessageTime, Principal principal) {
|
|
System.out.println("Last message time = " + lastMessageTime );
|
|
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
|
|
// date/time
|
|
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
|
|
// offset (hh:mm - "+00:00" when it's zero)
|
|
.optionalStart().appendOffset("+HH:MM", "+00:00").optionalEnd()
|
|
// offset (hhmm - "+0000" when it's zero)
|
|
.optionalStart().appendOffset("+HHMM", "+0000").optionalEnd()
|
|
// offset (hh - "Z" when it's zero)
|
|
.optionalStart().appendOffset("+HH", "Z").optionalEnd()
|
|
// create formatter
|
|
.toFormatter();
|
|
Date date = Date.from(OffsetDateTime.parse(lastMessageTime, formatter).toInstant());
|
|
|
|
List<ChatMessageDTO> chatMessageDTOs = chatService.getNewMessages(principal.getName(), userName, date);
|
|
return chatMessageDTOs;
|
|
}
|
|
@GetMapping("/get/users")
|
|
public List<String> getAllOtherUsers(Principal principal)
|
|
{
|
|
return userService.findAllOtherUsers(principal.getName());
|
|
}
|
|
}
|
|
|
|
//public ResponseEntity<List<ChatMessage>> getMessages(@PathVariable String userName, Principal principal) {
|
|
////List<ChatMessage> chatMessages = chatMessageRepository.getAllMessages(principal.getName(), userName);
|
|
//
|
|
//// return posts.stream()
|
|
//// .map(post -> convertToDto(post))
|
|
//// .collect(Collectors.toList());
|
|
//return new ResponseEntity<List<ChatMessage>>(chatMessages, HttpStatus.OK);
|
|
//}
|