Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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/kwTree/**", "/kwTree/**", "/api/tree/**", "/tree/**"};

@Bean
public PasswordEncoder passwordEncoder() {
Expand Down
22 changes: 22 additions & 0 deletions src/main/java/kwthon_1team/kwthon/controller/MailController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package kwthon_1team.kwthon.controller;

import kwthon_1team.kwthon.domian.dto.response.MailBoxResponseDto;
import kwthon_1team.kwthon.service.MailService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MailController {

private final MailService mailService;

public MailController(MailService mailService) {
this.mailService = mailService;
}

@GetMapping("/kwTree/mailBoxList")
public MailBoxResponseDto getMailBoxList() {
return mailService.getMailBoxList(); // studentId를 전달하지 않음
}
}
31 changes: 31 additions & 0 deletions src/main/java/kwthon_1team/kwthon/controller/TreeController.java
Original file line number Diff line number Diff line change
@@ -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<TreeResponseDto> 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);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package kwthon_1team.kwthon.domian.dto.response;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.List;

@Getter
@AllArgsConstructor
public class MailBoxResponseDto {
private int status;
private String message;
private MailBoxDataDto data;

@Getter
@AllArgsConstructor
public static class MailBoxDataDto {
private List<MailDto> mails;
}
}
15 changes: 15 additions & 0 deletions src/main/java/kwthon_1team/kwthon/domian/dto/response/MailDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package kwthon_1team.kwthon.domian.dto.response;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class MailDto {
private String mailDate;
private String mailName;
private Long senderId;
private String name; // 송신자 이름
private Long photoId;
private String photoUrl;
}
Original file line number Diff line number Diff line change
@@ -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;
}

}
Original file line number Diff line number Diff line change
@@ -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;
}

}
2 changes: 1 addition & 1 deletion src/main/java/kwthon_1team/kwthon/domian/entity/Mail.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class Mail {
@JoinColumn (name = "sender")
private Member sender;

@ManyToOne (fetch = FetchType.LAZY) // 여기가... 문제
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name = "receiver")
private Member receiver;

Expand Down
8 changes: 1 addition & 7 deletions src/main/java/kwthon_1team/kwthon/domian/entity/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,12 @@ public class Member {
@Column (nullable = false)
private String name;

@Column
@Column (name = "email", unique = true)
private String email;

@Column
private String password;

@Column
private Boolean isPublic;

@Column
private Integer authentication; // 이메일 인증번호

@Column (nullable = false)
private Integer treeLevel = 0;

Expand Down
16 changes: 16 additions & 0 deletions src/main/java/kwthon_1team/kwthon/repository/MailRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package kwthon_1team.kwthon.repository;

import kwthon_1team.kwthon.domian.entity.Mail;
import kwthon_1team.kwthon.domian.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;

@Repository
public interface MailRepository extends JpaRepository<Mail, Long> {
// 공개된 메일만 조회
List<Mail> findByIsPublic(boolean isPublic);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
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, Long> {
Member findByStudentId(Long studentId); // studentId로 수정
}
65 changes: 65 additions & 0 deletions src/main/java/kwthon_1team/kwthon/service/MailService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package kwthon_1team.kwthon.service;

import kwthon_1team.kwthon.domian.dto.response.MailBoxResponseDto;
import kwthon_1team.kwthon.domian.dto.response.MailDto;
import kwthon_1team.kwthon.domian.entity.Mail;
import kwthon_1team.kwthon.domian.entity.Member;
import kwthon_1team.kwthon.repository.MailRepository;
import kwthon_1team.kwthon.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;
import java.util.Random;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class MailService {

private final MailRepository mailRepository;
private final MemberRepository memberRepository; // MemberRepository 추가

// studentId 파라미터 없이 전체 메일을 반환
public MailBoxResponseDto getMailBoxList() {
// public 메일 조회
List<Mail> mails = mailRepository.findByIsPublic(true);

if (mails.isEmpty()) {
return new MailBoxResponseDto(404, "메일 정보를 찾을 수 없습니다.", null);
}

// MailDto로 변환
List<MailDto> mailDtos = mails.stream()
.map(mail -> {
// 송신자 이름 가져오기
String senderName = memberRepository.findByStudentId(mail.getSender().getStudentId()).getName();

// 사진 중 하나 랜덤으로 선택
String randomPhotoUrl = getRandomPhotoUrl(mail);
Long randomPhotoId = getRandomPhotoId(mail);

return new MailDto(
mail.getMailDate().toString(),
mail.getMailTitle(),
mail.getSender().getStudentId(),
senderName,
randomPhotoId, // 랜덤 사진 ID
randomPhotoUrl // 랜덤 사진 URL
);
})
.collect(Collectors.toList());

MailBoxResponseDto.MailBoxDataDto data = new MailBoxResponseDto.MailBoxDataDto(mailDtos);
return new MailBoxResponseDto(200, "광운 메일 정보를 불러왔습니다", data);
}

private String getRandomPhotoUrl(Mail mail) {
return mail.getPhotos().isEmpty() ? null : mail.getPhotos().get((int) (Math.random() * mail.getPhotos().size())).getPhotoUrl();
}

private Long getRandomPhotoId(Mail mail) {
return mail.getPhotos().isEmpty() ? null : mail.getPhotos().get((int) (Math.random() * mail.getPhotos().size())).getPhotoId();
}
}
40 changes: 40 additions & 0 deletions src/main/java/kwthon_1team/kwthon/service/TreeService.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
4 changes: 4 additions & 0 deletions src/main/resources/application-db.properties
Original file line number Diff line number Diff line change
@@ -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
17 changes: 17 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -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