Skip to content

Commit

Permalink
Merge pull request #16 from KAKAO-TOUR-API-CONTEST/devyj
Browse files Browse the repository at this point in the history
Devyj
  • Loading branch information
yyujin1231 authored Aug 22, 2024
2 parents ee1a01d + e57089b commit 35e72f0
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 69 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.example.ai_jeju.controller;

import com.example.ai_jeju.domain.ChatRoom;
import com.example.ai_jeju.repository.ChatRoomRepository;
import com.example.ai_jeju.service.ChatService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
Expand All @@ -13,18 +13,16 @@
@RequestMapping("/chat")
public class ChatRoomController {

private final ChatRoomRepository chatRoomRepository;

private final ChatService chatService;

@GetMapping("/rooms")
public List<ChatRoom> room() {
return chatRoomRepository.findAllRoom();
return chatService.findAllRooms();
}


@GetMapping("/room/{roomId}")
public ChatRoom roomInfo(@PathVariable("roomId") String roomId) {
return chatRoomRepository.findRoomById(roomId);
return chatService.findRoomById(roomId);
}

@Controller
Expand All @@ -36,4 +34,4 @@ public String chatRooms() {
return "chatrooms";
}
}
}
}
30 changes: 12 additions & 18 deletions src/main/java/com/example/ai_jeju/domain/ChatRoom.java
Original file line number Diff line number Diff line change
@@ -1,39 +1,33 @@
package com.example.ai_jeju.domain;

import com.example.ai_jeju.dto.ChatMessageDto;
import com.example.ai_jeju.service.ChatService;
import lombok.Builder;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import lombok.Data;
import org.springframework.web.socket.WebSocketSession;

import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;

@Data
@Entity
public class ChatRoom {

private static final AtomicInteger idCounter = new AtomicInteger(0);
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String roomId;
private String name;

// 기본 생성자
public ChatRoom() {
this.roomId = String.valueOf(idCounter.incrementAndGet());
}

// 이름과 ID를 인자로 받는 생성자
// 이름과 roomId를 인자로 받는 생성자
public ChatRoom(String roomId, String name) {
this.roomId = roomId;
this.name = name;
}

public static ChatRoom create(String name) {
ChatRoom chatRoom = new ChatRoom();
chatRoom.roomId = String.valueOf(idCounter.incrementAndGet());
chatRoom.name = name;
return chatRoom;
public static ChatRoom create(String roomId, String name) {
return new ChatRoom(roomId, name);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,34 +1,12 @@
package com.example.ai_jeju.repository;


import com.example.ai_jeju.domain.ChatRoom;
import com.example.ai_jeju.domain.User;
import jakarta.annotation.PostConstruct;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.*;
import java.util.Optional;

@Repository
public class ChatRoomRepository {

private Map<String, ChatRoom> chatRoomMap;

@PostConstruct
private void init() {
chatRoomMap = new LinkedHashMap<>();

// RoomId를 1, 2, 3으로 설정하여 방 생성
chatRoomMap.put("1", new ChatRoom("1", "Room 1"));
chatRoomMap.put("2", new ChatRoom("2", "Room 2"));
chatRoomMap.put("3", new ChatRoom("3", "Room 3"));
}

public List<ChatRoom> findAllRoom() {
return new ArrayList<>(chatRoomMap.values());
}

public ChatRoom findRoomById(String id) {
return chatRoomMap.get(id);
}
}
public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {
Optional<ChatRoom> findByRoomId(String roomId);
}
44 changes: 26 additions & 18 deletions src/main/java/com/example/ai_jeju/service/ChatService.java
Original file line number Diff line number Diff line change
@@ -1,35 +1,45 @@
package com.example.ai_jeju.service;


import com.example.ai_jeju.domain.ChatMessage;
import com.example.ai_jeju.domain.ChatRoom;
import com.example.ai_jeju.dto.ChatMessageDto;
import com.example.ai_jeju.repository.ChatMessageRepository;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.example.ai_jeju.repository.ChatRoomRepository;
import jakarta.annotation.PostConstruct;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Slf4j
@Data
@Service
@RequiredArgsConstructor
public class ChatService {

@Autowired
private ChatMessageRepository chatMessageRepository;


private final ChatRoomRepository chatRoomRepository;

@PostConstruct
public void init() {
// 데이터베이스에 이미 채팅방이 존재하는지 확인
if (chatRoomRepository.count() == 0) {
// 방 3개를 고정적으로 생성하여 데이터베이스에 저장
chatRoomRepository.save(new ChatRoom("1", "Room 1"));
chatRoomRepository.save(new ChatRoom("2", "Room 2"));
chatRoomRepository.save(new ChatRoom("3", "Room 3"));
}
}

public List<ChatRoom> findAllRooms() {
return chatRoomRepository.findAll();
}

public ChatRoom findRoomById(String roomId) {
return chatRoomRepository.findByRoomId(roomId).orElse(null);
}

public List<ChatMessage> getAllMessages(String roomId) {
return chatMessageRepository.findByRoomIdOrderByIdAsc(roomId);
}
Expand All @@ -42,6 +52,4 @@ public List<ChatMessage> previousMessages(String roomId, Long lastMessageId) {
// 특정 ID 이전의 해당 채팅방 메시지 10개 가져오기
return chatMessageRepository.findTop10ByRoomIdAndIdLessThanOrderByIdDesc(roomId, lastMessageId);
}


}
}

0 comments on commit 35e72f0

Please sign in to comment.