diff --git a/.gitignore b/.gitignore index 04c5090..63ca745 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ out/ ### VS Code ### .vscode/ src/main/resources/application.properties +src/main/resources/application.yml diff --git a/src/main/java/com/gdsc/pknu/backend/controller/user/MajorListResult.java b/src/main/java/com/gdsc/pknu/backend/controller/user/MajorListResult.java new file mode 100644 index 0000000..942838e --- /dev/null +++ b/src/main/java/com/gdsc/pknu/backend/controller/user/MajorListResult.java @@ -0,0 +1,15 @@ +package com.gdsc.pknu.backend.controller.user; + +import java.util.List; +import com.gdsc.pknu.backend.domain.major.Major; +import lombok.Getter; + +@Getter +public class MajorListResult { + + private List majorList; + + public MajorListResult(List majorList) { + this.majorList = majorList; + } +} \ No newline at end of file diff --git a/src/main/java/com/gdsc/pknu/backend/controller/user/MajorRestController.java b/src/main/java/com/gdsc/pknu/backend/controller/user/MajorRestController.java new file mode 100644 index 0000000..b828bd5 --- /dev/null +++ b/src/main/java/com/gdsc/pknu/backend/controller/user/MajorRestController.java @@ -0,0 +1,26 @@ +package com.gdsc.pknu.backend.controller.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.gdsc.pknu.backend.controller.ApiRes; +import com.gdsc.pknu.backend.service.MajorService; + + +@RestController +@RequestMapping("api/major") +public class MajorRestController { + + @Autowired + private final MajorService majorService; + + public MajorRestController(MajorService majorService) { + this.majorService = majorService; + } + + @GetMapping() + public ApiRes getMajorList() { + return ApiRes.SUCCESS(new MajorListResult(majorService.getMajorList())); + } +} diff --git a/src/main/java/com/gdsc/pknu/backend/domain/member/Major.java b/src/main/java/com/gdsc/pknu/backend/domain/major/Major.java similarity index 56% rename from src/main/java/com/gdsc/pknu/backend/domain/member/Major.java rename to src/main/java/com/gdsc/pknu/backend/domain/major/Major.java index 9bd3f16..78f4cc4 100644 --- a/src/main/java/com/gdsc/pknu/backend/domain/member/Major.java +++ b/src/main/java/com/gdsc/pknu/backend/domain/major/Major.java @@ -1,17 +1,24 @@ -package com.gdsc.pknu.backend.domain.member; - +package com.gdsc.pknu.backend.domain.major; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import lombok.AllArgsConstructor; +import lombok.*; +import lombok.NoArgsConstructor; + @Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor + public class Major { @Id @GeneratedValue @Column(name = "major_id") private Long id; - private String majorName; } diff --git a/src/main/java/com/gdsc/pknu/backend/domain/major/MajorRepository.java b/src/main/java/com/gdsc/pknu/backend/domain/major/MajorRepository.java new file mode 100644 index 0000000..8c9ef4b --- /dev/null +++ b/src/main/java/com/gdsc/pknu/backend/domain/major/MajorRepository.java @@ -0,0 +1,8 @@ +package com.gdsc.pknu.backend.domain.major; + +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MajorRepository extends JpaRepository { + List findAll(); +} \ No newline at end of file diff --git a/src/main/java/com/gdsc/pknu/backend/service/MajorService.java b/src/main/java/com/gdsc/pknu/backend/service/MajorService.java new file mode 100644 index 0000000..3e7eb02 --- /dev/null +++ b/src/main/java/com/gdsc/pknu/backend/service/MajorService.java @@ -0,0 +1,22 @@ +package com.gdsc.pknu.backend.service; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.gdsc.pknu.backend.domain.major.Major; +import com.gdsc.pknu.backend.domain.major.MajorRepository; + +@Service +public class MajorService { + + @Autowired + private final MajorRepository majorRepository; + + public MajorService(MajorRepository majorRepository) { + this.majorRepository = majorRepository; + } + + public List getMajorList() { + return majorRepository.findAll(); + } +} diff --git a/src/test/java/com/gdsc/pknu/backend/controller/MajorRestControllerTest.java b/src/test/java/com/gdsc/pknu/backend/controller/MajorRestControllerTest.java new file mode 100644 index 0000000..7bb90d6 --- /dev/null +++ b/src/test/java/com/gdsc/pknu/backend/controller/MajorRestControllerTest.java @@ -0,0 +1,47 @@ +package com.gdsc.pknu.backend.controller; + +import java.util.ArrayList; +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MockMvc; +import com.gdsc.pknu.backend.controller.user.MajorRestController; +import com.gdsc.pknu.backend.domain.major.Major; +import com.gdsc.pknu.backend.service.MajorService; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; + +@WebMvcTest(MajorRestController.class) +public class MajorRestControllerTest { + + @Autowired + MockMvc mockMvc; + + @MockBean + MajorService majorService; + + @Test + @DisplayName("학과 목록 불러오기 테스트") + void get_major_list() throws Exception { + + // 서비스 리턴 값 지정 + List majors = new ArrayList<>(); + majors.add(Major.builder() + .id(1L) + .majorName("기린공학과").build()); + majors.add(Major.builder() + .id(2L) + .majorName("향유고래어학과").build()); + + when(majorService.getMajorList()).thenReturn(majors); + + mockMvc.perform(get("/api/major")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.majorList[1].majorName").value("향유고래어학과")); + } + +} diff --git a/src/test/java/com/gdsc/pknu/backend/domain/major/MajorRepositoryTest.java b/src/test/java/com/gdsc/pknu/backend/domain/major/MajorRepositoryTest.java new file mode 100644 index 0000000..0229122 --- /dev/null +++ b/src/test/java/com/gdsc/pknu/backend/domain/major/MajorRepositoryTest.java @@ -0,0 +1,28 @@ +package com.gdsc.pknu.backend.domain.major; + +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; + +@DataJpaTest +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +class MajorRepositoryTest{ + + @Autowired + private MajorRepository majorRepository; + + @Test + @DisplayName("학과 정보 리스트 불러오기") + void get_major_list(){ + // given + + // when + List majors = majorRepository.findAll(); + // then + assert(majors.size() == 79); + assert(majors.get(78).getMajorName().equals("공공안전경찰학과")); + } +}