Skip to content

Commit

Permalink
Merge pull request #90 from Dev-Race/feat/#79
Browse files Browse the repository at this point in the history
[#79] Feat: 문제풀이 성공 및 실패에 따른 UserRoom 상태값 변경
  • Loading branch information
JunSang1121 authored May 23, 2024
2 parents ee1f080 + df9f589 commit 09ca60e
Show file tree
Hide file tree
Showing 8 changed files with 75 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.sajang.devracebackend.dto.room.RoomEnterRequestDto;
import com.sajang.devracebackend.dto.room.RoomWaitRequestDto;
import com.sajang.devracebackend.dto.room.RoomWaitResponseDto;
import com.sajang.devracebackend.dto.userroom.CheckIsPassDto;
import com.sajang.devracebackend.dto.userroom.RoomCheckAccessResponseDto;
import com.sajang.devracebackend.dto.room.RoomCheckStateResponseDto;
import com.sajang.devracebackend.dto.userroom.SolvingPageResponseDto;
Expand Down Expand Up @@ -79,6 +80,14 @@ public void userWaitRoom(@Payload RoomWaitRequestDto roomWaitRequestDto) {
rabbitTemplate.convertAndSend(RabbitConfig.WAIT_EXCHANGE_NAME, "waitingroom." + roomWaitResponseDto.getRoomId(), roomWaitResponseDto);
}

@PutMapping("/room/{roomId}")
public ResponseEntity<ResponseData> success(
@RequestBody CheckIsPassDto checkIsPassDto,
@PathVariable(name ="roomId") Long roomId){
userRoomService.checkIsPass(checkIsPassDto,roomId);
return ResponseData.toResponseEntity(ResponseCode.UPDATE_USERROOM);
}


// ========== STOMP Test 임시 용도 ========== //
// @RabbitListener(queues = RabbitConfig.WAIT_QUEUE_NAME) // 프로듀서(백엔드)->컨슈머(프론트엔드) 과정에서 큐에 도착할 때, 메소드 자동 호출됨.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,21 @@ public UserRoom(User user, Room room) {
this.user = user;
this.room = room;
}


public void updateCode(String code) {
this.code = code;
}

public void updateIsPass(Integer isPass) {
this.isPass = isPass;
}

public void updateIsLeave(Integer isLeave) {
this.isLeave = isLeave;
}

public void updateLeaveTime(LocalDateTime leaveTime) {
this.leaveTime = leaveTime;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.sajang.devracebackend.dto.userroom;


import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class CheckIsPassDto {

private String code;
private Integer isPass;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import com.sajang.devracebackend.domain.mapping.UserRoom;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;

public interface UserRoomRepository extends JpaRepository<UserRoom, Long> {
Optional<UserRoom> findByUserAndRoom(User user, Room room);
List<UserRoom> findAllByRoom(Room room);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
import com.sajang.devracebackend.domain.Room;
import com.sajang.devracebackend.domain.User;
import com.sajang.devracebackend.dto.room.RoomEnterRequestDto;
import com.sajang.devracebackend.dto.userroom.CheckIsPassDto;
import com.sajang.devracebackend.dto.userroom.RoomCheckAccessResponseDto;
import com.sajang.devracebackend.dto.room.RoomCheckStateResponseDto;
import com.sajang.devracebackend.dto.userroom.SolvingPageResponseDto;

public interface UserRoomService {
void createUserRoom(User user, Room room);
void usersEnterRoom(Long roomId, RoomEnterRequestDto roomEnterRequestDto);
SolvingPageResponseDto loadSolvingPage(Long roomId);
RoomCheckAccessResponseDto checkAccess(Long roomId);
void checkIsPass(CheckIsPassDto checkIsPassDto, Long roomId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,6 @@ public Problem crawlAndSaveProblem(Integer problemNumber) throws IOException {
Elements contentHead = doc.select(".page-header h1"); // 문제 title 추출을 위한 page-header에 접근
Elements sampleDataElement = doc.getElementsByClass("col-md-6"); // 예제 문제쪽 요소에 따로 접근

JSONObject sampleInputJson = new JSONObject();
JSONObject sampleOutputJson = new JSONObject();

int Amount = sampleDataElement.size(); // 예제 문제 개수 추출
List<String> sampleInput = new ArrayList<>();
List<String> sampleOutput = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.sajang.devracebackend.domain.enums.RoomState;
import com.sajang.devracebackend.domain.mapping.UserRoom;
import com.sajang.devracebackend.dto.room.RoomEnterRequestDto;
import com.sajang.devracebackend.dto.userroom.CheckIsPassDto;
import com.sajang.devracebackend.dto.userroom.RoomCheckAccessResponseDto;
import com.sajang.devracebackend.dto.userroom.SolvingPageResponseDto;
import com.sajang.devracebackend.repository.ChatRepository;
Expand Down Expand Up @@ -119,4 +120,30 @@ public RoomCheckAccessResponseDto checkAccess(Long roomId) {

return roomCheckAccessResponseDto;
}

@Transactional
@Override
public void checkIsPass(CheckIsPassDto checkIsPassDto, Long roomId) {
User user = userService.findLoginUser(); // 현재 유저 데이터 가져오기
Room room = roomService.findRoom(roomId); // 현재 입장된 방 데이터 가져오기
UserRoom userRoom = userRoomRepository.findByUserAndRoom(user,room).orElseThrow( // api를 호출한 유저와 유저의 room 요소 가져오기
() -> new NoSuchUserRoomException(String.format("userId = %d & roomId = %d", user.getId(), room.getId()))
);

userRoom.updateCode(checkIsPassDto.getCode());
userRoom.updateIsPass(checkIsPassDto.getIsPass());
userRoom.updateIsLeave(1);
userRoom.updateLeaveTime(LocalDateTime.now());

if(checkIsPassDto.getIsPass() == 1){
room.updateRanking(userRoom.getUser().getNickname()); // 성공시에만 닉네임 랭킹 등록.
}

boolean isUsersLeave = userRoomRepository.findAllByRoom(room).stream()
.allMatch(users -> users.getIsLeave() == 1); //모든 유저의 isLeave를 찾아 1인지 확인
if(isUsersLeave) {
room.updateRoomState(RoomState.FINISH);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@ public List<String> convertToEntityAttribute(String dbData) { // DB의 String
if (dbData == null || dbData.equals("__null__")) {
return new ArrayList<>();
}
return Arrays.asList(dbData.split(SPLIT_CHAR)); // else 경우
return new ArrayList<>(Arrays.asList(dbData.split(SPLIT_CHAR))); // else 경우
}
}

0 comments on commit 09ca60e

Please sign in to comment.