Tiny Star

🏕️내일배움캠프/📂개발자를 위한 공모전 사이트(23.08.16)

개발자를 위한 공모전 사이트 (&&) 10일 _ 실시간 1:1 채팅

청크 2023. 8. 30. 15:42

스파르타 코딩클럽_ 내일 배움 캠프 Spring 트랙 6기

[프로젝트] 개발자를 위한 공모전 사이트 (&&)

2023.08.16 ~ 2023.09.15

 

<프로젝트 정보>

개발도구 : IntelliJ

프로그래밍 언어 : Java

데이터베이스 : MySQL

프레임워크 : Spring / Spring Boot / Spring Security

와이어프레임 : Figma

ERD 설계 : ERD Cloud

Storage : AWS S3

Front : HTML / CSS / JavaScript / JQuery / Bootstrap

 

<프로젝트 내용>

1:1 채팅 기능 관련 Service class를 팀에서 구현했다.

package com.sparta.and.service;

import com.sparta.and.dto.chat.ChatroomRequestDto;
import com.sparta.and.dto.chat.ChatroomResponseDto;
import com.sparta.and.entity.Chatroom;
import com.sparta.and.entity.User;
import com.sparta.and.repository.ChatroomRepository;
import com.sparta.and.repository.UserRepository;
import com.sparta.and.security.UserDetailsImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
public class ChatroomService {
    private final UserRepository userRepository;
    private final ChatroomRepository chatroomRepository;

    public List<ChatroomResponseDto> getChatRooms(UserDetailsImpl userDetails) {
        List<Chatroom> chatroomList = chatroomRepository.findAllByFounderOrParticipant(userDetails.getUser(), userDetails.getUser());

        return chatroomList.stream().map(ChatroomResponseDto::new).toList();
    }


    public ChatroomResponseDto createChatroom(ChatroomRequestDto ChatroomRequestDto, UserDetailsImpl userDetails) {
        User participant = userRepository.findById(ChatroomRequestDto.getParticipant()).orElseThrow(() -> new IllegalArgumentException("해당되는 사용자가 없습니다."));

        Chatroom chatroom = Chatroom.builder()
                .chatroomName(ChatroomRequestDto.getChatroomName())
                .founder(userDetails.getUser())
                .participant(participant)
                .build();

        // 동일한 chatroom이 있는지 검사하는 로직 필요

        return new ChatroomResponseDto(chatroomRepository.save(chatroom));
    }


    public ChatroomResponseDto getChatRoom(Long roomId, UserDetailsImpl userDetails) {
        Chatroom chatroom = chatroomRepository.findById(roomId).orElseThrow(() -> new IllegalArgumentException("채팅방이 존재하지 않습니다."));

        return new ChatroomResponseDto(chatroom);
    }
}
    public void enter(@RequestBody ChatMessageDto message) {
        message.setMessage(message.getWriter() + "님이 채팅방에 참여하였습니다.");
        template.convertAndSend("/sub/api/chat/room/" + message.getRoomId(), message);
    }

    public void message(@RequestBody ChatMessageDto message) {
        template.convertAndSend("/sub/api/chat/room/" + message.getRoomId(), message);
    }

 

채팅 서비스 관련 테스트 위해 카카오, 구글 로그인을 동시에 진입해서 채팅이 잘 되는 지 확인해야하는 과정에서

구글 로그인 인증 실패 오류 발견

-> OAuth 동의가 안되어서 문제가 생기는 것 같아 일단 동의요청을 구글측에 했으나 아직 승인이 나지않아

동작이 잘 되는지 확인은 못했다.

 

승인이 되면 테스트 할 예정이고, 내일부터는 프론트엔드 제작 예정이다.

 

추가로 기능 구현 막바지이기도 하고 당장 다음주에 중간 점검 발표가 있기 때문에 일단 dev 브랜치에

모든 기능을 PR해서 팀원들과 코드 리뷰나 오류가 없는지 전부 확인 중이다.