From c7dd4f8da360442c7549c89386c528eaa1818e5c Mon Sep 17 00:00:00 2001 From: transfer_kk Date: Sun, 26 Nov 2023 02:38:59 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20#13=20program=5Fid=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/sopt/sopkerton/program/domain/Program.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/sopt/sopkerton/program/domain/Program.java b/src/main/java/org/sopt/sopkerton/program/domain/Program.java index 31ab2e4..72b041b 100644 --- a/src/main/java/org/sopt/sopkerton/program/domain/Program.java +++ b/src/main/java/org/sopt/sopkerton/program/domain/Program.java @@ -27,6 +27,7 @@ public abstract class Program extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "program_id") private Long id; @Column(nullable = false) From 04bbfd5785753c59d34f1a57af35d936cb3c0e10 Mon Sep 17 00:00:00 2001 From: transfer_kk Date: Sun, 26 Nov 2023 03:00:57 +0900 Subject: [PATCH 2/7] =?UTF-8?q?git=20commit=20-m=20"feat#13programListRequ?= =?UTF-8?q?est,=20programListResponse=20=EC=83=9D=EC=84=B1"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../program/dto/request/ProgramListRequest.java | 9 +++++++++ .../program/dto/response/ProgramListView.java | 14 ++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/main/java/org/sopt/sopkerton/program/dto/request/ProgramListRequest.java create mode 100644 src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListView.java diff --git a/src/main/java/org/sopt/sopkerton/program/dto/request/ProgramListRequest.java b/src/main/java/org/sopt/sopkerton/program/dto/request/ProgramListRequest.java new file mode 100644 index 0000000..bb3723d --- /dev/null +++ b/src/main/java/org/sopt/sopkerton/program/dto/request/ProgramListRequest.java @@ -0,0 +1,9 @@ +package org.sopt.sopkerton.program.dto.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public record ProgramListRequest( + @JsonProperty("program_type") + String programType +) { +} diff --git a/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListView.java b/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListView.java new file mode 100644 index 0000000..c330f3a --- /dev/null +++ b/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListView.java @@ -0,0 +1,14 @@ +package org.sopt.sopkerton.program.dto.response; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; + +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +public record ProgramListView( + long programId, + String title, + String registerAt, + String Region +) { + +} From 858e2ae31ff1d00405718b46c1108f50cc1f314e Mon Sep 17 00:00:00 2001 From: transfer_kk Date: Sun, 26 Nov 2023 03:01:29 +0900 Subject: [PATCH 3/7] =?UTF-8?q?git=20commit=20-m=20"feat/#13=20ProgramRepo?= =?UTF-8?q?sitory=20=EC=83=9D=EC=84=B1"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../program/infrastructure/ProgramRepository.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java diff --git a/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java b/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java new file mode 100644 index 0000000..05e5900 --- /dev/null +++ b/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java @@ -0,0 +1,8 @@ +package org.sopt.sopkerton.program.infrastructure; + +import org.sopt.sopkerton.program.domain.Program; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProgramRepository extends JpaRepository { + +} From b8ee00fc8d7367f29b7a48da35ae8a45ab27a8b8 Mon Sep 17 00:00:00 2001 From: transfer_kk Date: Sun, 26 Nov 2023 03:30:35 +0900 Subject: [PATCH 4/7] =?UTF-8?q?git=20commit=20-m=20"feat/#13=20program=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=20=ED=83=80=EC=9E=85=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/sopt/sopkerton/program/domain/Program.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sopt/sopkerton/program/domain/Program.java b/src/main/java/org/sopt/sopkerton/program/domain/Program.java index 72b041b..03ed524 100644 --- a/src/main/java/org/sopt/sopkerton/program/domain/Program.java +++ b/src/main/java/org/sopt/sopkerton/program/domain/Program.java @@ -20,7 +20,7 @@ @Getter @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) -@DiscriminatorColumn +@DiscriminatorColumn(name = "program_type") @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "programs") From c7407301feec90d48633047fa8b4c24edacf1db4 Mon Sep 17 00:00:00 2001 From: transfer_kk Date: Sun, 26 Nov 2023 03:31:11 +0900 Subject: [PATCH 5/7] =?UTF-8?q?git=20commit=20-m=20"feat/#13=20program=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B0=9C=EB=B0=9C"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ListView.java => ProgramListResponse.java} | 2 +- .../infrastructure/ProgramRepository.java | 3 +- .../program/service/ProgramService.java | 39 +++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) rename src/main/java/org/sopt/sopkerton/program/dto/response/{ProgramListView.java => ProgramListResponse.java} (90%) create mode 100644 src/main/java/org/sopt/sopkerton/program/service/ProgramService.java diff --git a/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListView.java b/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListResponse.java similarity index 90% rename from src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListView.java rename to src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListResponse.java index c330f3a..6a2b4cb 100644 --- a/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListView.java +++ b/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListResponse.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonNaming; @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) -public record ProgramListView( +public record ProgramListResponse( long programId, String title, String registerAt, diff --git a/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java b/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java index 05e5900..ad53234 100644 --- a/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java +++ b/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java @@ -1,8 +1,9 @@ package org.sopt.sopkerton.program.infrastructure; +import java.util.List; import org.sopt.sopkerton.program.domain.Program; import org.springframework.data.jpa.repository.JpaRepository; public interface ProgramRepository extends JpaRepository { - + List findByProgramType(String programType); } diff --git a/src/main/java/org/sopt/sopkerton/program/service/ProgramService.java b/src/main/java/org/sopt/sopkerton/program/service/ProgramService.java new file mode 100644 index 0000000..b4bdccd --- /dev/null +++ b/src/main/java/org/sopt/sopkerton/program/service/ProgramService.java @@ -0,0 +1,39 @@ +package org.sopt.sopkerton.program.service; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import org.sopt.sopkerton.program.domain.Program; +import org.sopt.sopkerton.program.dto.response.ProgramListResponse; +import org.sopt.sopkerton.program.infrastructure.ProgramRepository; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class ProgramService { + private final ProgramRepository programRepository; + + public List getProgramListByProgramType(String programType) { + List programs = programRepository.findByProgramType(programType); + + // Program 엔티티를 ProgramListView로 변환 + List programListResponses = programs.stream() + .map(program -> new ProgramListResponse( + program.getId(), + program.getTitle(), + formatToLocalDate(program.getRegisterAt()), + program.getRegion() + )) + .collect(Collectors.toList()); + return programListResponses; + } + + private String formatToLocalDate(LocalDateTime localDateTime) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM.dd"); + return localDateTime.format(formatter); + } + + +} From 013eb7c708c2e5cddedfb974d7740b3dc0591056 Mon Sep 17 00:00:00 2001 From: transfer_kk Date: Sun, 26 Nov 2023 04:19:36 +0900 Subject: [PATCH 6/7] =?UTF-8?q?git=20commit=20-m=20"feat/#13=20program=20L?= =?UTF-8?q?ist=20=EB=B0=98=ED=99=98=20api=20=EA=B0=9C=EB=B0=9C"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/exception/ProgramError.java | 4 +++ .../common/exception/ProgramSuccess.java | 29 +++++++++++++++++ .../common/response/ApiResponse.java | 2 ++ .../program/controller/ProgramController.java | 32 +++++++++++++++++++ .../sopkerton/program/domain/Program.java | 5 ++- .../dto/response/ProgramListResponse.java | 1 + .../infrastructure/ProgramRepository.java | 6 +++- .../program/service/ProgramService.java | 6 ++-- 8 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/sopt/sopkerton/common/exception/ProgramError.java create mode 100644 src/main/java/org/sopt/sopkerton/common/exception/ProgramSuccess.java create mode 100644 src/main/java/org/sopt/sopkerton/program/controller/ProgramController.java diff --git a/src/main/java/org/sopt/sopkerton/common/exception/ProgramError.java b/src/main/java/org/sopt/sopkerton/common/exception/ProgramError.java new file mode 100644 index 0000000..14e335b --- /dev/null +++ b/src/main/java/org/sopt/sopkerton/common/exception/ProgramError.java @@ -0,0 +1,4 @@ +package org.sopt.sopkerton.common.exception; + +public enum ProgramError { +} diff --git a/src/main/java/org/sopt/sopkerton/common/exception/ProgramSuccess.java b/src/main/java/org/sopt/sopkerton/common/exception/ProgramSuccess.java new file mode 100644 index 0000000..893ec06 --- /dev/null +++ b/src/main/java/org/sopt/sopkerton/common/exception/ProgramSuccess.java @@ -0,0 +1,29 @@ +package org.sopt.sopkerton.common.exception; + +import lombok.AllArgsConstructor; +import org.sopt.sopkerton.common.exception.base.SuccessBase; +import org.springframework.http.HttpStatus; + +@AllArgsConstructor +public enum ProgramSuccess implements SuccessBase { + PROGRAM_LIST_VIEW_SUCCESS(HttpStatus.OK, "Get Program List View Data Successful.") + ; + + private final HttpStatus status; + private final String successMessage; + + @Override + public int getHttpStatusCode() { + return this.status.value(); + } + + @Override + public HttpStatus getHttpStatus() { + return this.status; + } + + @Override + public String getSuccessMessage() { + return this.successMessage; + } +} diff --git a/src/main/java/org/sopt/sopkerton/common/response/ApiResponse.java b/src/main/java/org/sopt/sopkerton/common/response/ApiResponse.java index a64d7d3..c9523f2 100644 --- a/src/main/java/org/sopt/sopkerton/common/response/ApiResponse.java +++ b/src/main/java/org/sopt/sopkerton/common/response/ApiResponse.java @@ -3,10 +3,12 @@ import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AccessLevel; import lombok.AllArgsConstructor; +import lombok.Getter; import lombok.RequiredArgsConstructor; import org.sopt.sopkerton.common.exception.base.ErrorBase; import org.sopt.sopkerton.common.exception.base.SuccessBase; +@Getter @RequiredArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE) public class ApiResponse { diff --git a/src/main/java/org/sopt/sopkerton/program/controller/ProgramController.java b/src/main/java/org/sopt/sopkerton/program/controller/ProgramController.java new file mode 100644 index 0000000..449c87f --- /dev/null +++ b/src/main/java/org/sopt/sopkerton/program/controller/ProgramController.java @@ -0,0 +1,32 @@ +package org.sopt.sopkerton.program.controller; + +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.sopt.sopkerton.common.exception.ProgramSuccess; +import org.sopt.sopkerton.common.response.ApiResponse; +import org.sopt.sopkerton.program.dto.request.ProgramListRequest; +import org.sopt.sopkerton.program.dto.response.ProgramListResponse; +import org.sopt.sopkerton.program.service.ProgramService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/program") +public class ProgramController { + private final ProgramService programService; + + @GetMapping("") + public ResponseEntity>> programListView(@RequestParam(name = "program_type") String type) { + List programListByProgramType = programService.getProgramListByProgramType(type); + return ResponseEntity + .status(ProgramSuccess.PROGRAM_LIST_VIEW_SUCCESS.getHttpStatus()) + .body( + ApiResponse.success(ProgramSuccess.PROGRAM_LIST_VIEW_SUCCESS, programListByProgramType) + ); + } +} diff --git a/src/main/java/org/sopt/sopkerton/program/domain/Program.java b/src/main/java/org/sopt/sopkerton/program/domain/Program.java index 03ed524..40f2514 100644 --- a/src/main/java/org/sopt/sopkerton/program/domain/Program.java +++ b/src/main/java/org/sopt/sopkerton/program/domain/Program.java @@ -33,9 +33,8 @@ public abstract class Program extends BaseEntity { @Column(nullable = false) private String title; - @Enumerated(EnumType.STRING) - @Column(nullable = false) - private Category category; + private String imageUrl; + private String type; @Column(nullable = false) private String organizationName; diff --git a/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListResponse.java b/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListResponse.java index 6a2b4cb..707e054 100644 --- a/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListResponse.java +++ b/src/main/java/org/sopt/sopkerton/program/dto/response/ProgramListResponse.java @@ -8,6 +8,7 @@ public record ProgramListResponse( long programId, String title, String registerAt, + String imageUrl, String Region ) { diff --git a/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java b/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java index ad53234..158051d 100644 --- a/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java +++ b/src/main/java/org/sopt/sopkerton/program/infrastructure/ProgramRepository.java @@ -3,7 +3,11 @@ import java.util.List; import org.sopt.sopkerton.program.domain.Program; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface ProgramRepository extends JpaRepository { - List findByProgramType(String programType); + + @Query("select p from Program p where p.type = :type order by p.registerAt") + List findAllByProgramType(@Param("type")String programType); } diff --git a/src/main/java/org/sopt/sopkerton/program/service/ProgramService.java b/src/main/java/org/sopt/sopkerton/program/service/ProgramService.java index b4bdccd..bc29012 100644 --- a/src/main/java/org/sopt/sopkerton/program/service/ProgramService.java +++ b/src/main/java/org/sopt/sopkerton/program/service/ProgramService.java @@ -16,14 +16,14 @@ public class ProgramService { private final ProgramRepository programRepository; public List getProgramListByProgramType(String programType) { - List programs = programRepository.findByProgramType(programType); + List programs = programRepository.findAllByProgramType(programType); - // Program 엔티티를 ProgramListView로 변환 List programListResponses = programs.stream() .map(program -> new ProgramListResponse( program.getId(), program.getTitle(), formatToLocalDate(program.getRegisterAt()), + program.getImageUrl(), program.getRegion() )) .collect(Collectors.toList()); @@ -31,7 +31,7 @@ public List getProgramListByProgramType(String programType) } private String formatToLocalDate(LocalDateTime localDateTime) { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM.dd"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM월 dd일"); return localDateTime.format(formatter); } From fcb5d5df361bc45651548d8a1fbf39ea96534698 Mon Sep 17 00:00:00 2001 From: transfer_kk Date: Sun, 26 Nov 2023 04:25:59 +0900 Subject: [PATCH 7/7] =?UTF-8?q?git=20commit=20-m=20"feat/#13=20program=20L?= =?UTF-8?q?ist=20=EB=B0=98=ED=99=98=20api=20=EA=B0=9C=EB=B0=9C"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/sopt/sopkerton/program/domain/Program.java | 2 ++ .../program/domain/{Category.java => Status.java} | 7 ++----- 2 files changed, 4 insertions(+), 5 deletions(-) rename src/main/java/org/sopt/sopkerton/program/domain/{Category.java => Status.java} (64%) diff --git a/src/main/java/org/sopt/sopkerton/program/domain/Program.java b/src/main/java/org/sopt/sopkerton/program/domain/Program.java index 40f2514..e8fd2a3 100644 --- a/src/main/java/org/sopt/sopkerton/program/domain/Program.java +++ b/src/main/java/org/sopt/sopkerton/program/domain/Program.java @@ -35,6 +35,8 @@ public abstract class Program extends BaseEntity { private String imageUrl; private String type; + @Enumerated(value = EnumType.STRING) + private Status status; @Column(nullable = false) private String organizationName; diff --git a/src/main/java/org/sopt/sopkerton/program/domain/Category.java b/src/main/java/org/sopt/sopkerton/program/domain/Status.java similarity index 64% rename from src/main/java/org/sopt/sopkerton/program/domain/Category.java rename to src/main/java/org/sopt/sopkerton/program/domain/Status.java index 2a10653..621c9af 100644 --- a/src/main/java/org/sopt/sopkerton/program/domain/Category.java +++ b/src/main/java/org/sopt/sopkerton/program/domain/Status.java @@ -6,9 +6,6 @@ @Getter @RequiredArgsConstructor(access = AccessLevel.PRIVATE) -public enum Category { - VOLUNTEERING("봉사"), - EMPLOYMENT("취업"); - - private final String value; +public enum Status { + REGISTER, DONE; }