diff --git a/src/main/java/kwthon_1team/kwthon/config/SecurityConfig.java b/src/main/java/kwthon_1team/kwthon/config/SecurityConfig.java index 1d1a069..59e4922 100644 --- a/src/main/java/kwthon_1team/kwthon/config/SecurityConfig.java +++ b/src/main/java/kwthon_1team/kwthon/config/SecurityConfig.java @@ -15,7 +15,7 @@ @EnableWebSecurity public class SecurityConfig { private final String[] possibleAccess = {"/api/auth/signUp", "/api/auth/emailVerification", "/api/auth/login", - "/api/error", "/api", "/error", "/auth/**"}; + "/api/error", "/api", "/error", "/auth/**", "/api/tree/**", "/tree/**"}; @Bean public PasswordEncoder passwordEncoder() { diff --git a/src/main/java/kwthon_1team/kwthon/controller/TreeController.java b/src/main/java/kwthon_1team/kwthon/controller/TreeController.java new file mode 100644 index 0000000..d0b274f --- /dev/null +++ b/src/main/java/kwthon_1team/kwthon/controller/TreeController.java @@ -0,0 +1,31 @@ +package kwthon_1team.kwthon.controller; + +import kwthon_1team.kwthon.common.BaseErrorResponse; +import kwthon_1team.kwthon.domian.dto.response.TreeResponseDto; +import kwthon_1team.kwthon.exception.BaseException; +import kwthon_1team.kwthon.service.TreeService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/tree") +public class TreeController { + + private final TreeService treeService; + + public TreeController(TreeService treeService) { + this.treeService = treeService; + } + + @GetMapping("/{studentId}") + public ResponseEntity getTreeInfo(@PathVariable Long studentId) { + try { + TreeResponseDto responseDto = treeService.getTreeInfo(studentId); + return new ResponseEntity<>(responseDto, HttpStatus.valueOf(responseDto.getStatus())); + } catch (Exception e) { + TreeResponseDto errorResponse = new TreeResponseDto(500, "서버 오류가 발생했습니다. 잠시 후 다시 시도해 주세요.", null); + return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR); + } + } +} \ No newline at end of file diff --git a/src/main/java/kwthon_1team/kwthon/domian/dto/response/TreeDataDto.java b/src/main/java/kwthon_1team/kwthon/domian/dto/response/TreeDataDto.java new file mode 100644 index 0000000..0ef3db5 --- /dev/null +++ b/src/main/java/kwthon_1team/kwthon/domian/dto/response/TreeDataDto.java @@ -0,0 +1,13 @@ +package kwthon_1team.kwthon.domian.dto.response; + +import lombok.*; + +@Data +public class TreeDataDto { + private int treeLevel; + + public TreeDataDto(int treeLevel) { + this.treeLevel = treeLevel; + } + +} diff --git a/src/main/java/kwthon_1team/kwthon/domian/dto/response/TreeResponseDto.java b/src/main/java/kwthon_1team/kwthon/domian/dto/response/TreeResponseDto.java new file mode 100644 index 0000000..6a767d6 --- /dev/null +++ b/src/main/java/kwthon_1team/kwthon/domian/dto/response/TreeResponseDto.java @@ -0,0 +1,17 @@ +package kwthon_1team.kwthon.domian.dto.response; + +import lombok.*; + +@Data +public class TreeResponseDto { + private int status; + private String message; + private TreeDataDto data; + + public TreeResponseDto(int status, String message, TreeDataDto data) { + this.status = status; + this.message = message; + this.data = data; + } + +} \ No newline at end of file diff --git a/src/main/java/kwthon_1team/kwthon/repository/MemberRepository.java b/src/main/java/kwthon_1team/kwthon/repository/MemberRepository.java index 4822d86..2baabf6 100644 --- a/src/main/java/kwthon_1team/kwthon/repository/MemberRepository.java +++ b/src/main/java/kwthon_1team/kwthon/repository/MemberRepository.java @@ -3,7 +3,10 @@ import kwthon_1team.kwthon.domian.entity.Member; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; @Repository public interface MemberRepository extends JpaRepository { + Member findByStudentId(Long studentId); // studentId로 수정 } + diff --git a/src/main/java/kwthon_1team/kwthon/service/TreeService.java b/src/main/java/kwthon_1team/kwthon/service/TreeService.java new file mode 100644 index 0000000..9c5b5e7 --- /dev/null +++ b/src/main/java/kwthon_1team/kwthon/service/TreeService.java @@ -0,0 +1,40 @@ +package kwthon_1team.kwthon.service; + +import kwthon_1team.kwthon.domian.dto.response.TreeDataDto; +import kwthon_1team.kwthon.domian.dto.response.TreeResponseDto; +import kwthon_1team.kwthon.domian.entity.Member; +import kwthon_1team.kwthon.repository.MemberRepository; +import org.springframework.stereotype.Service; + +@Service +public class TreeService { + + private final MemberRepository memberRepository; + + public TreeService(MemberRepository memberRepository) { + this.memberRepository = memberRepository; + } + + public TreeResponseDto getTreeInfo(Long studentId) { + // 접근 권한 검증 로직 + boolean hasAccess = checkAccessPermission(String.valueOf(studentId)); + if (!hasAccess) { + return new TreeResponseDto(403, "이 트리 정보에 대한 접근 권한이 없습니다.", null); + } + + // 트리 데이터를 데이터베이스에서 불러오기 + Member member = memberRepository.findByStudentId(studentId); // memberId로 조회 + if (member == null) { + return new TreeResponseDto(404, "트리 정보를 찾을 수 없습니다.", null); + } + + // 트리 레벨을 TreeDataDto로 반환 + TreeDataDto treeData = new TreeDataDto(member.getTreeLevel()); + return new TreeResponseDto(200, "내 트리 정보를 불러왔습니다", treeData); + } + + private boolean checkAccessPermission(String memberId) { // String으로 변경 + // 접근 권한 검증 로직 + return memberId != null && !memberId.isEmpty(); + } +} \ No newline at end of file diff --git a/src/main/resources/application-db.properties b/src/main/resources/application-db.properties new file mode 100644 index 0000000..3010120 --- /dev/null +++ b/src/main/resources/application-db.properties @@ -0,0 +1,4 @@ +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.url=jdbc:mysql://localhost:3306/kwtree?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true +spring.datasource.username=root +spring.datasource.password=1234 \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..424c51e --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,17 @@ +spring.application.name=kwthon + +#properties +spring.profiles.include=db, email, S3 + +# Security : temporary password +spring.security.user.password=1 + +server.port=8080 +server.address=0.0.0.0 + +#hibernate +spring.jpa.properties.hibernate.format_sql=true +spring.jpa.properties.hibernate.show_sql=true +spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect +spring.jpa.hibernate.ddl-auto=update +spring.session.store-type=jdbc \ No newline at end of file