Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http,
)
.authorizeHttpRequests(auth -> auth
.requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.requestMatchers(HttpMethod.GET,
"/api/v1/projects",
"/api/v1/projects/*"
).permitAll()
.requestMatchers(
"/swagger-ui/**",
"/v3/api-docs/**",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.hotsix.server.project.dto.ProjectRequestDto;
import com.hotsix.server.project.dto.ProjectResponseDto;
import com.hotsix.server.project.dto.ProjectStatusUpdateRequestDto;
import com.hotsix.server.project.dto.ProjectSummaryResponse;
import com.hotsix.server.project.service.ProjectService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
Expand Down Expand Up @@ -125,4 +126,12 @@ public CommonResponse<Long> getProjectCreatorId(
Long creatorId = projectService.getProjectCreatorId(projectId);
return CommonResponse.success(creatorId);
}

@GetMapping("/me")
@Operation(summary = "내 프로젝트 목록 조회", description = "로그인한 사용자의 모든 프로젝트를 상태별로 반환합니다.")
public CommonResponse<List<ProjectSummaryResponse>> getMyProjects() {
List<ProjectSummaryResponse> myProjects = projectService.getProjectsByUser();
return CommonResponse.success(myProjects);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.hotsix.server.project.dto;

import com.hotsix.server.project.entity.Project;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
@AllArgsConstructor
public class ProjectSummaryResponse {
private Long projectId;
private String title;
private String status;
private String deadline;

public static ProjectSummaryResponse from(Project project) {
return ProjectSummaryResponse.builder()
.projectId(project.getProjectId())
.title(project.getTitle())
.status(project.getStatus().name())
.deadline(project.getDeadline().toString())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,7 @@ public interface ProjectRepository extends JpaRepository<Project, Long> {
@Query("SELECT p FROM Project p " +
"WHERE (p.initiator = :user OR p.participant = :user) AND p.status = :status")
List<Project> findByInitiatorOrParticipantAndStatus(@Param("user") User user, @Param("status") Status status);

List<Project> findByInitiatorOrParticipant(User initiator, User participant);
}

Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,17 @@


import com.hotsix.server.aws.manager.AmazonS3Manager;
import com.hotsix.server.project.dto.ProjectStatusUpdateRequestDto;
import com.hotsix.server.global.Rq.Rq;
import com.hotsix.server.project.dto.*;
import com.hotsix.server.project.entity.Category;
import com.hotsix.server.project.entity.ProjectImage;
import com.hotsix.server.project.exception.ProjectErrorCase;
import com.hotsix.server.proposal.dto.ProposalFileResponseDto;
import jakarta.persistence.EntityNotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.hotsix.server.project.dto.ProjectFileResponseDto;

import com.hotsix.server.global.exception.ApplicationException;
import com.hotsix.server.project.dto.ProjectRequestDto;
import com.hotsix.server.project.dto.ProjectResponseDto;
import com.hotsix.server.project.dto.ProjectStatusUpdateRequestDto;
import com.hotsix.server.project.entity.Project;
import com.hotsix.server.project.entity.Status;
Expand All @@ -35,6 +33,7 @@

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

@Service
@RequiredArgsConstructor
Expand All @@ -46,6 +45,7 @@ public class ProjectService {
private final UserRepository userRepository;
private final AmazonS3Manager amazonS3Manager;
private final BookmarkService bookmarkService;
private final Rq rq;

@Transactional
public ProjectResponseDto registerProject(Long currentUserId, ProjectRequestDto dto, List<MultipartFile> images) {
Expand Down Expand Up @@ -293,4 +293,12 @@ public Long getProjectCreatorId(Long projectId) {
return project.getInitiator().getUserId();
}

public List<ProjectSummaryResponse> getProjectsByUser() {
User actor = rq.getUser();
List<Project> projects = projectRepository.findByInitiatorOrParticipant(actor, actor);

return projects.stream()
.map(ProjectSummaryResponse::from)
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -162,5 +162,4 @@ public CommonResponse<String> uploadProfileImage(@RequestParam("file") Multipart
imageUrl
);
}

}