Skip to content

Commit

Permalink
fix : merge 오류 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
kjh418 committed Oct 3, 2024
2 parents 6fbc4cb + 3047313 commit 71a6753
Show file tree
Hide file tree
Showing 9 changed files with 105 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ public class UserEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // 자동 증가하는 ID (기본 키)
private Long userId;

@Column(nullable = false, unique = true, length = 8)
private String userCode; // 사용자 고유 코드 (예: 학번)
private String userCode;

@Column(nullable = false, length = 20)
private String userName; // 사용자 이름
private String userName;

public UserEntity(String userCode, String userName) {
this.userCode = userCode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import hhplus.lecture.infrastructure.persistence.InstructorEntity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface InstructorRepository extends JpaRepository<InstructorEntity, String> {
public interface InstructorRepository extends JpaRepository<InstructorEntity, Long> {

// 코드번호로 강사 조회
InstructorEntity findByInstructorCode(String instructorCode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import java.time.LocalDate;
import java.util.List;

public interface LectureItemRepository extends JpaRepository<LectureItemEntity, String> {
public interface LectureItemRepository extends JpaRepository<LectureItemEntity, Long> {

// 특강 정보
@Lock(LockModeType.PESSIMISTIC_WRITE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import hhplus.lecture.infrastructure.persistence.LectureEntity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface LectureRepository extends JpaRepository<LectureEntity, String> {
public interface LectureRepository extends JpaRepository<LectureEntity, Long> {

// 강의 조회
LectureEntity findByLectureCode(String lectureCode);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
package hhplus.lecture.interfaces.controller;

import hhplus.lecture.application.service.LectureService;
import hhplus.lecture.application.service.RegistrationService;
import hhplus.lecture.interfaces.dto.lecture.LectureDto;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

@RestController
@RequestMapping("/lectures")
public class LectureController {
private final LectureService lectureService;
private final RegistrationService registrationService;

// 특강 목록 구현
@GetMapping
Expand All @@ -21,8 +20,15 @@ public ResponseEntity<List<LectureDto>> getLectures() {
return ResponseEntity.ok(lectureDtos);
}

public LectureController(LectureService lectureService, RegistrationService registrationService) {
// 신청 가능한 특강 목록
@GetMapping("/date/{targetDate}")
public ResponseEntity<List<LectureDto>> getAvailableLecturesByDate(@PathVariable String targetDate) {
LocalDate date = LocalDate.parse(targetDate);
List<LectureDto> availableLectures = lectureService.getAvailableLecturesByDate(date);
return ResponseEntity.ok(availableLectures);
}

public LectureController(LectureService lectureService) {
this.lectureService = lectureService;
this.registrationService = registrationService;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package hhplus.lecture.interfaces.controller;

import hhplus.lecture.application.service.RegistrationService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
@RequestMapping("/api")
public class RegistrationController {

private final RegistrationService registrationService;

@PostMapping("/lectures/{lectureItemCode}/register")
public ResponseEntity<String> registerForLecture(
@PathVariable String lectureItemCode,
@RequestBody Map<String, String> requestBody) {

String userCode = requestBody.get("userCode");

boolean success = registrationService.registerLecture(userCode, lectureItemCode);
if (success) {
return ResponseEntity.ok("등록 성공");
} else {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("등록 실패");
}
}


public RegistrationController(RegistrationService registrationService) {
this.registrationService = registrationService;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package hhplus.lecture.interfaces.controller;

import hhplus.lecture.application.service.UserService;
import hhplus.lecture.interfaces.dto.user.UserResponseDto;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/users")
public class UserController {

private final UserService userService;

// 사용자가 신청한 강의 조회
@GetMapping("/{userCode}/lectures")
public ResponseEntity<UserResponseDto> getUserRegisteredLectures(@PathVariable String userCode) {
UserResponseDto userResponse = userService.getUserAndRegisteredLectures(userCode);
return ResponseEntity.ok(userResponse);
}

public UserController(UserService userService) {
this.userService = userService;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ public class LectureDto {
private LocalDate lectureDate; // 강의 날짜
private int maxCapacity; // 정원


public LectureDto(String lectureCode, String lectureItemCode, String lectureName, String instructorCode, String instructorName, LocalDate lectureDate, int maxCapacity) {
this.lectureCode = lectureCode;
this.lectureItemCode = lectureItemCode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import hhplus.lecture.domain.model.RegistrationStatus;
import hhplus.lecture.infrastructure.persistence.LectureItemEntity;
import hhplus.lecture.infrastructure.persistence.RegistrationEntity;
import hhplus.lecture.infrastructure.repository.LectureItemRepository;
import hhplus.lecture.infrastructure.repository.RegistrationRepository;
import org.junit.jupiter.api.Test;
Expand All @@ -11,6 +12,8 @@
import org.mockito.junit.jupiter.MockitoExtension;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.argThat;
Expand Down Expand Up @@ -67,4 +70,28 @@ class RegistrationServiceTest {
registration.getStatus() == RegistrationStatus.APPROVAL
));
}

@Test
void 동일한_신청자는_동일한_강의에_대해_한_번의_수강_신청만_성공해야한다() {
// given: 특정 강의와 사용자 설정
String lectureItemCode = "LE001";
String userCode = "00001";

// 이미 신청한 등록 정보 설정
RegistrationEntity existingRegistration = new RegistrationEntity(userCode, lectureItemCode, RegistrationStatus.APPROVAL, LocalDateTime.now());
List<RegistrationEntity> existingRegistrations = List.of(existingRegistration);

// mock 설정
when(registrationRepository.findByUserCode(userCode)).thenReturn(existingRegistrations);

// when: 동일한 강의에 대해 다시 신청 시도
boolean result = registrationService.registerLecture(userCode, lectureItemCode);

// then: 신청 실패 확인
assertThat(result).isFalse();

// verify: repository의 findByUserCode 메서드가 호출되었는지 확인
verify(registrationRepository).findByUserCode(userCode);
}

}

0 comments on commit 71a6753

Please sign in to comment.