Skip to content

Commit

Permalink
#111 fix: 외부 통신시 Token을 통한 객체 Entity 조회
Browse files Browse the repository at this point in the history
- Id -> Token
  • Loading branch information
rivkode committed Jun 28, 2024
1 parent 9135eb8 commit 2f56a5e
Show file tree
Hide file tree
Showing 24 changed files with 261 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

@Repository
public interface ApplyRepository extends JpaRepository<Apply, Long>, ApplyRepositoryCustom {
Apply findByApplyToken(String applyToken);

// @Query(value = "SELECT * FROM apply WHERE user_id = :userId AND project_id = :projectId", nativeQuery = true)
// Optional<Apply> findByUserIdAndProjectId(@Param("userId") String userId, @Param("projectId") Long projectId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,11 @@ public GetApplyResponse createApply(String userToken, String projectToken) {
}

@Transactional
public void deleteApply(String userId, String applyId) {
public void deleteApply(String userId, String applyToken) {
// todo
// 사용자 권한 검증
User user = userService.getUserByToken(userId);
Long applyId = getApplyId(applyToken);
Apply apply = getApply(applyId);
validateApplyUser(user, apply);
applyRepository.delete(apply);
Expand All @@ -75,6 +76,10 @@ private void validateApplyUser(User user, Apply apply) {
}
}

public Long getApplyId(String applyToken) {
return applyRepository.findByApplyToken(applyToken).getId();
}

@Transactional
public void updateApplyStatusToAccept(String leaderId, String applyUserId, String projectId) {
Apply apply = applyRepository.findApplyByUserIdAndProjectId(applyUserId, projectId);
Expand Down Expand Up @@ -140,7 +145,7 @@ public GetListApplyUserResponse getApplyUserList(String projectId) {
return ApplyMapperEntityToDto.userListToResponse(users);
}

public Apply getApply(String applyId) {
public Apply getApply(Long applyId) {
return applyRepository.findById(applyId).orElseThrow(() -> new ApplyNotFoundException("신청내역이 존재하지 않습니다."));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@
import org.springframework.stereotype.Repository;

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

@Repository
public interface CommentRepository extends JpaRepository<Comment, Long> {
@Query(value = "SELECT comment_id FROM comment WHERE post_id = :postId", nativeQuery = true)
List<String> findCommentIdsByPostId(@Param("postId") String postId);

Comment findByCommentToken(String commentToken);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
Expand Down Expand Up @@ -63,17 +64,24 @@ public GetCommentResponse updateComment(UpdateCommentRequest request) {
}

public Comment findCommentById(String commentId) {
return commentRepository.findById(commentId)
.orElseThrow(() -> new CommentNotFoundException("존재하지 않는 댓글입니다."));
return commentRepository.findByCommentToken(commentId);
}

public void deleteComment(String commentId) {
Comment comment = findCommentById(commentId);
commentRepository.delete(comment);
}

public Long getCommentId(String commentToken) {
return commentRepository.findByCommentToken(commentToken).getId();
}

public ListResponse<GetCommentResponse> getCommentList(String postId) {
List<String> commentIds = commentRepository.findCommentIdsByPostId(postId);
List<String> commentTokens = commentRepository.findCommentIdsByPostId(postId);
List<Long> commentIds = new ArrayList<>();
for (String commentToken : commentTokens) {
commentIds.add(getCommentId(commentToken));
}

List<Comment> comments = commentRepository.findAllById(commentIds);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@
public interface NoticeRepository extends JpaRepository<Notice, Long> {
@Query(value = "SELECT notice_id FROM notice WHERE project_id = :projectId", nativeQuery = true)
List<String> findNoticeIdsByProjectId(@Param("projectId") String projectId);

Notice findByNoticeToken(String noticeToken);
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -64,12 +65,19 @@ public GetNoticeResponse getNotice(String noticeId) {
}

public Notice findNoticeById(String noticeId) {
return this.noticeRepository.findById(noticeId)
.orElseThrow(() -> new NoticeNotFoundException("존재하지 않는 공지입니다."));
return this.noticeRepository.findByNoticeToken(noticeId);
}

public Long getNoticeId(String noticeToken) {
return noticeRepository.findByNoticeToken(noticeToken).getId();
}

public ListResponse<GetNoticeResponse> getNoticeList(String projectId) {
List<String> noticeIds = noticeRepository.findNoticeIdsByProjectId(projectId);
List<String> noticeTokens = noticeRepository.findNoticeIdsByProjectId(projectId);
List<Long> noticeIds = new ArrayList<>();
for (String noticeToken : noticeTokens) {
noticeIds.add(getNoticeId(noticeToken));
}

List<Notice> notices = noticeRepository.findAllById(noticeIds);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,12 @@ public GetProjectResponse deleteProject(String userId, String projectId) {
return GetProjectResponse.builder().build();
}

public Project findProjectById(String projectId) {
public Long getProjectId(String projectToken) {
return projectRepository.findByProjectToken(projectToken).getId();
}

public Project findProjectById(String projectToken) {
Long projectId = getProjectId(projectToken);
return projectRepository.findById(projectId)
.orElseThrow(() -> new ProjectNotFoundException("존재하지 않는 프로젝트입니다."));
}
Expand Down Expand Up @@ -179,7 +184,12 @@ public Predicate toPredicate(Root<Project> projectRoot, CriteriaQuery<?> query,
}

public ListResponse<GetProjectResponse> getLikedProjectList(User user) {
List<String> projectIds = projectLikeService.findLikedProjectIds(user);
List<String> projectTokens = projectLikeService.findLikedProjectIds(user);
List<Long> projectIds = new ArrayList<>();
for (String projectToken : projectTokens) {
projectIds.add(getProjectId(projectToken));
}

List<Project> projects = projectRepository.findAllById(projectIds);

return new ListResponse(projects);
Expand Down Expand Up @@ -232,8 +242,12 @@ public ListResponse<GetProjectResponse> getRecommendListByUser(User user, Long e
int endIdx = Math.min(startIdx + 10, projectIds.size());

List<String> result = projectIds.subList(startIdx, endIdx);
List<Long> resultProjectIds = new ArrayList<>();
for (String projectToken : result) {
resultProjectIds.add(getProjectId(projectToken));
}

List<Project> projects = projectRepository.findAllById(result);
List<Project> projects = projectRepository.findAllById(resultProjectIds);


log.info("Response from FastAPI: {}", response);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,6 @@ public interface ProjectRepository extends JpaRepository<Project, Long>, Project

@Query(value = "SELECT * FROM project WHERE leader_id = :userId", nativeQuery = true)
List<Project> findAllByLeaderId(@Param("userId") String userId);

Project findByProjectToken(String projectToken);
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,7 @@ public synchronized ProjectLike update(User user, String projectId, LikeStatus s
Long projectLikeId = idGenerator.generateId();
String projectLikeToken = tokenGenerator.generateToken(IdPrefix.PROJECT_LIKE);
// Project project = projectService.findProjectById(projectId);
Project project = projectRepository.findById(projectId)
.orElseThrow();
Project project = projectRepository.findByProjectToken(projectId);
ProjectLike projectLike = ProjectLike.builder()
.id(projectLikeId)
.projectLikeToken(projectLikeToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

@Repository
public interface ProjectUserRepository extends JpaRepository<ProjectUser, Long> {
Optional<ProjectUser> findByProjectIdAndUserId(String projectId, String userId);
Optional<ProjectUser> findByProjectUserTokenAndProjectUserToken(String projectId, String userId);

@Query(value = "SELECT user_id FROM project_user WHERE project_id = :projectId", nativeQuery = true)
List<String> findProjectUserIdsByProjectId(@Param("projectId") String projectId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class ProjectUserService {
private final ProjectRepository projectRepository;

public void createProjectUser(Project project, User user) {
Optional<ProjectUser> projectUserOptional = projectUserRepository.findByProjectIdAndUserId(project.getProjectToken(), user.getUserToken());
Optional<ProjectUser> projectUserOptional = projectUserRepository.findByProjectUserTokenAndProjectUserToken(project.getProjectToken(), user.getUserToken());

if (projectUserOptional.isPresent()) {
// 이미 생성됨
Expand All @@ -51,7 +51,7 @@ public List<String> getProjectUserIds(String projectId) {
}

public void deleteProjectUser(Project project, User user) {
Optional<ProjectUser> projectUserOptional = projectUserRepository.findByProjectIdAndUserId(project.getProjectToken(), user.getUserToken());
Optional<ProjectUser> projectUserOptional = projectUserRepository.findByProjectUserTokenAndProjectUserToken(project.getProjectToken(), user.getUserToken());

if (projectUserOptional.isPresent()) {
projectUserRepository.delete(projectUserOptional.get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@

public interface ScheduleRepository extends JpaRepository<Schedule, Long> {

Schedule findByScheduleToken(String scheduleToken);
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,8 @@ public void updateSchedule(CreateScheduleRequest request, String scheduleId) {
scheduleRepository.save(schedule);
}

private Schedule findScheduleById(String scheduleId) {
return scheduleRepository.findById(scheduleId)
.orElseThrow(() -> new ScheduleNotFoundException("존재하지 않는 일정입니다."));
private Schedule findScheduleById(String scheduleToken) {
return scheduleRepository.findByScheduleToken(scheduleToken);
}

public void deleteSchedule(String scheduleId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,6 @@ public interface TicketRepository extends JpaRepository<Ticket, Long> {
+ "FROM ticket " +
"WHERE status = UPPER(:status) AND project_id = :projectId", nativeQuery = true)
Integer findLastOrderNumber(@Param("status") String status, @Param("projectId") String projectId);

Ticket findByTicketToken(String ticketToken);
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,12 @@ public ListResponse<GetTicketResponse> getTicketList(String projectId) {
* 이전 status의 ticket들의 orderNum이 큰 ticket에 대해 -1
* 수정 할 status의 ticket들 중 orderNum이 큰 ticket들에 대해 +1
*/
public ListResponse<GetTicketResponse> changeTickets(CreateTicketRequest request, User user, String ticketId) {
public ListResponse<GetTicketResponse> changeTickets(CreateTicketRequest request, User user, String ticketToken) {
// check User
List<User> authUsers = projectService.getUserListByProject(request.projectId());
checkUser(authUsers, user);

Ticket ticket = ticketRepository.findById(ticketId)
.orElseThrow(() -> new TicketNotFoundException("존재하지 않는 티켓입니다."));
Ticket ticket = ticketRepository.findByTicketToken(ticketToken);

boolean isEqualStatus = false;

Expand Down Expand Up @@ -219,8 +218,7 @@ private TicketStatus checkStatus(String status) {
}

public GetTicketResponse deleteTicket(String ticketId, User user) {
Ticket ticket = ticketRepository.findById(ticketId)
.orElseThrow(() -> new TicketNotFoundException("존재하지 않는 티켓입니다."));
Ticket ticket = ticketRepository.findByTicketToken(ticketId);

// check User
List<User> authUsers = projectService.getUserListByProject(ticket.getProject().getProjectToken());
Expand All @@ -233,8 +231,8 @@ public GetTicketResponse deleteTicket(String ticketId, User user) {
}

public void updateTicket(CreateTicketRequest request, User user, String ticketId) {
Ticket ticket = ticketRepository.findById(ticketId)
.orElseThrow(() -> new TicketNotFoundException("존재하지 않는 티켓입니다."));
Ticket ticket = ticketRepository.findByTicketToken(ticketId);

// check User
List<User> authUsers = projectService.getUserListByProject(ticket.getProject().getProjectToken());
checkUser(authUsers, user);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

@Repository
public interface TicketUserRepository extends JpaRepository<TicketUser, Long> {
Optional<TicketUser> findByTicketIdAndUserId(String id, String userId);
Optional<TicketUser> findByTicketTicketTokenAndTicketUserToken(String id, String userId);

@Query(value = "SELECT user_id FROM ticket_user WHERE ticket_id = :ticketId", nativeQuery = true)
List<String> findTicketUserIdsByTicketId(@Param("ticketId") String ticketId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class TicketUserService {
private final TokenGenerator tokenGenerator;

public void createTicketUser(Ticket ticket, User user) {
Optional<TicketUser> ticketUserOptional = ticketUserRepository.findByTicketIdAndUserId(ticket.getTicketToken(), user.getUserToken());
Optional<TicketUser> ticketUserOptional = ticketUserRepository.findByTicketTicketTokenAndTicketUserToken(ticket.getTicketToken(), user.getUserToken());

if (ticketUserOptional.isPresent()) {
// 이미 생성됨
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/com/seoultech/synergybe/domain/user/IdTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.seoultech.synergybe.domain.user;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor
public class IdTest {
@Id
private Long id;

private String text;

@Builder
public IdTest(Long id, String text) {
this.id = id;
this.text = text;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.seoultech.synergybe.domain.user;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface IdTestRepository extends JpaRepository<IdTest, Long> {
}
23 changes: 23 additions & 0 deletions src/main/java/com/seoultech/synergybe/domain/user/UUIDTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.seoultech.synergybe.domain.user;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor
public class UUIDTest {
@Id
private String id;

private String text;

@Builder
public UUIDTest(String id, String text) {
this.id = id;
this.text = text;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.seoultech.synergybe.domain.user;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UUIDTestRepository extends JpaRepository<UUIDTest, String> {
}
Loading

0 comments on commit 2f56a5e

Please sign in to comment.