From 4a5f9062bd9e20435ac76040148b8229cee544b3 Mon Sep 17 00:00:00 2001 From: kwonhee1 Date: Sun, 28 Sep 2025 13:05:15 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat=20project=20status=20=09feat=20add=20p?= =?UTF-8?q?roject=20status=20=09feat=20add=20project=20startAt=20=09chore?= =?UTF-8?q?=20createAt,=20expiredAt,=20deletedAt=20=EB=AA=A8=EB=91=90=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC=20=09refactor=20project=20list,=20project=20?= =?UTF-8?q?detail=20api=20:=20add=20startAt,=20status=20=09column?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NextLevel/demo/exception/ErrorCode.java | 3 +- .../NextLevel/demo/project/ProjectStatus.java | 11 +++++ .../project/controller/ProjectController.java | 44 +++++++++---------- .../project/dto/request/CreateProjectDto.java | 22 ++++------ .../RequestMainPageProjectListDto.java | 4 +- .../response/ResponseProjectDetailDto.java | 18 ++++---- .../ResponseProjectListDetailDto.java | 20 +++++---- .../project/project/entity/ProjectEntity.java | 39 ++++++++-------- .../repository/ProjectDslRepository.java | 4 +- .../SelectProjectListDslRepository.java | 4 +- .../demo/user/entity/UserEntity.java | 1 + .../java/NextLevel/demo/util/StringUtil.java | 13 ++++++ 12 files changed, 107 insertions(+), 76 deletions(-) create mode 100644 src/main/java/NextLevel/demo/project/ProjectStatus.java diff --git a/src/main/java/NextLevel/demo/exception/ErrorCode.java b/src/main/java/NextLevel/demo/exception/ErrorCode.java index 0f3a427..44bcd89 100644 --- a/src/main/java/NextLevel/demo/exception/ErrorCode.java +++ b/src/main/java/NextLevel/demo/exception/ErrorCode.java @@ -30,7 +30,8 @@ public enum ErrorCode { // project NOT_CORRECT_TAG_SIZE(HttpStatus.BAD_REQUEST, "04001","invalidated tag input") , - ERROR_EXPIRED_DATE_CONVERSION(HttpStatus.BAD_REQUEST, "04003","can not convert expired : %s"), + ERROR_EXPIRED_DATE_CONVERSION(HttpStatus.BAD_REQUEST, "04003","can not convert date : %s"), + START_MUST_BEFORE_EXPIRED(HttpStatus.BAD_REQUEST, "04004","start must be before expired"), // funding NOT_ENOUGH_POINT(HttpStatus.BAD_REQUEST, "05001","not enough point left:%s, need:%s"), diff --git a/src/main/java/NextLevel/demo/project/ProjectStatus.java b/src/main/java/NextLevel/demo/project/ProjectStatus.java new file mode 100644 index 0000000..320ef9c --- /dev/null +++ b/src/main/java/NextLevel/demo/project/ProjectStatus.java @@ -0,0 +1,11 @@ +package NextLevel.demo.project; + +public enum ProjectStatus { + PENDING, // 시작 전 + PROGRESS, // 진행 중 + STOPPED, // 중단 됨 by admin + SUCCESS, // 성공 (만료 기간 넘어감) + FAIL, // 실패 (만료 기간 넘어감) + END // 종료 + // DELETED 삭제됨 soft delete +} diff --git a/src/main/java/NextLevel/demo/project/project/controller/ProjectController.java b/src/main/java/NextLevel/demo/project/project/controller/ProjectController.java index 620ad2a..26dcc55 100644 --- a/src/main/java/NextLevel/demo/project/project/controller/ProjectController.java +++ b/src/main/java/NextLevel/demo/project/project/controller/ProjectController.java @@ -54,28 +54,28 @@ public ResponseEntity updateProject(@ModelAttribute @Valid CreateProjectDto d } // 모두 조회 - @GetMapping("/public/project/all") - public ResponseEntity getAllProjects( - @RequestParam(value = "order", required = false) String order, - @RequestParam(value = "tag", required = false) List tagId, - @RequestParam(value = "page", required = false) Integer page , - @RequestParam(value = "search", required = false) String search , - @RequestParam(value = "desc", required = false) Boolean desc) - { - Long userId = JWTUtil.getUserIdFromSecurityContextCanNULL(); - - RequestMainPageProjectListDto dto = RequestMainPageProjectListDto.builder() - .tag(tagId) - .page(page) - .order(order) - .userId(userId) - .search(search) - .desc(desc) - .build(); - - ResponseProjectListDto resultDto = projectService.getAllProjects(dto); - return ResponseEntity.status(HttpStatus.OK).body(new SuccessResponse("success" ,resultDto)); - } +// @GetMapping("/public/project/all") +// public ResponseEntity getAllProjects( +// @RequestParam(value = "order", required = false) String order, +// @RequestParam(value = "tag", required = false) List tagId, +// @RequestParam(value = "page", required = false) Integer page , +// @RequestParam(value = "search", required = false) String search , +// @RequestParam(value = "desc", required = false) Boolean desc) +// { +// Long userId = JWTUtil.getUserIdFromSecurityContextCanNULL(); +// +// RequestMainPageProjectListDto dto = RequestMainPageProjectListDto.builder() +// .tag(tagId) +// .page(page) +// .order(order) +// .userId(userId) +// .search(search) +// .desc(desc) +// .build(); +// +// ResponseProjectListDto resultDto = projectService.getAllProjects(dto); +// return ResponseEntity.status(HttpStatus.OK).body(new SuccessResponse("success" ,resultDto)); +// } @PostMapping("/public/project/all") public ResponseEntity getAllProjects( diff --git a/src/main/java/NextLevel/demo/project/project/dto/request/CreateProjectDto.java b/src/main/java/NextLevel/demo/project/project/dto/request/CreateProjectDto.java index e4a89c8..727cab7 100644 --- a/src/main/java/NextLevel/demo/project/project/dto/request/CreateProjectDto.java +++ b/src/main/java/NextLevel/demo/project/project/dto/request/CreateProjectDto.java @@ -1,17 +1,14 @@ package NextLevel.demo.project.project.dto.request; -import NextLevel.demo.exception.CustomException; -import NextLevel.demo.exception.ErrorCode; import NextLevel.demo.img.entity.ImgEntity; import NextLevel.demo.project.project.entity.ProjectEntity; -import NextLevel.demo.project.story.entity.ProjectStoryEntity; -import NextLevel.demo.project.tag.entity.ProjectTagEntity; import NextLevel.demo.user.entity.UserEntity; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; -import java.util.Set; +import NextLevel.demo.util.StringUtil; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Getter; @@ -33,10 +30,12 @@ public class CreateProjectDto { @NotEmpty private String content; @NotEmpty - private String expired; + private String expiredAt; @NotNull private Long goal; + private String startAt; // 시작일 default today + private List tags = new ArrayList<>(); private MultipartFile titleImg; @@ -44,19 +43,16 @@ public class CreateProjectDto { private List imgs = new ArrayList<>(); public ProjectEntity toProjectEntity(UserEntity user, ImgEntity titleImg) { - try { - return ProjectEntity.builder() + return ProjectEntity.builder() .id(id) .user(user) .title(title) .content(content) .titleImg(titleImg) - .expired(expired) + .expiredAt(StringUtil.toLocalDate(expiredAt)) + .startAt(startAt !=null?StringUtil.toLocalDate(startAt):LocalDate.now()) .goal(goal) .build(); - }catch (Exception e) { - e.printStackTrace(); - throw new CustomException(ErrorCode.ERROR_EXPIRED_DATE_CONVERSION, expired); - } } + } diff --git a/src/main/java/NextLevel/demo/project/project/dto/request/RequestMainPageProjectListDto.java b/src/main/java/NextLevel/demo/project/project/dto/request/RequestMainPageProjectListDto.java index 42107fa..bd1955b 100644 --- a/src/main/java/NextLevel/demo/project/project/dto/request/RequestMainPageProjectListDto.java +++ b/src/main/java/NextLevel/demo/project/project/dto/request/RequestMainPageProjectListDto.java @@ -8,8 +8,8 @@ import lombok.Setter; import lombok.ToString; -@Builder -@AllArgsConstructor +//@Builder +//@AllArgsConstructor @NoArgsConstructor @Getter @Setter diff --git a/src/main/java/NextLevel/demo/project/project/dto/response/ResponseProjectDetailDto.java b/src/main/java/NextLevel/demo/project/project/dto/response/ResponseProjectDetailDto.java index c7b6895..26ca10e 100644 --- a/src/main/java/NextLevel/demo/project/project/dto/response/ResponseProjectDetailDto.java +++ b/src/main/java/NextLevel/demo/project/project/dto/response/ResponseProjectDetailDto.java @@ -5,14 +5,12 @@ import NextLevel.demo.project.project.entity.ProjectEntity; import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.Date; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.springframework.beans.factory.annotation.Value; @Setter @Getter @@ -26,9 +24,10 @@ public class ResponseProjectDetailDto { private ImgDto titleImg; - private LocalDateTime createdAt; - private LocalDateTime expiredAt; - private Boolean isExpired; + private LocalDate createdAt; + private LocalDate startAt; + private LocalDate expiredAt; + private String status; private String authorNickName; @@ -48,15 +47,16 @@ public static ResponseProjectDetailDto of(ProjectEntity entity, Long fundingPric dto.setTitle(entity.getTitle()); dto.setContent(entity.getContent()); dto.setTitleImg(new ImgDto(entity.getTitleImg())); - dto.setCreatedAt(entity.getCreatedAt()); - dto.setExpiredAt(entity.getExpired()); + dto.setCreatedAt(entity.getCreatedAt().toLocalDate()); dto.setAuthorNickName(entity.getUser().getNickName()); dto.setGoal(entity.getGoal()); dto.setSum(fundingPrice); dto.setCompletionRate(FundingUtil.getCompletionRate(dto.sum, dto.goal)); dto.setLikeCount(entity.getLikes().size()); dto.setIsAuthor(entity.getUser().getId() == userId); - dto.setIsExpired( LocalDateTime.now().isBefore(entity.getExpired()) ); + dto.status = entity.getProjectStatus().name(); + dto.startAt = entity.getStartAt(); + dto.expiredAt = entity.getExpiredAt(); dto.setFundingCount(fundingCount); // 펀딩의 총 갯수 dto.setUserCount(null); // 조회한 조회 수, 아직 추가 예정 diff --git a/src/main/java/NextLevel/demo/project/project/dto/response/ResponseProjectListDetailDto.java b/src/main/java/NextLevel/demo/project/project/dto/response/ResponseProjectListDetailDto.java index f129427..18781a2 100644 --- a/src/main/java/NextLevel/demo/project/project/dto/response/ResponseProjectListDetailDto.java +++ b/src/main/java/NextLevel/demo/project/project/dto/response/ResponseProjectListDetailDto.java @@ -2,14 +2,13 @@ import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Date; import java.util.List; import NextLevel.demo.img.ImgDto; import NextLevel.demo.img.entity.ImgEntity; -import NextLevel.demo.project.tag.entity.ProjectTagEntity; -import NextLevel.demo.project.tag.entity.TagEntity; +import NextLevel.demo.project.ProjectStatus; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; import lombok.NoArgsConstructor; @@ -38,8 +37,10 @@ public class ResponseProjectListDetailDto { private LocalDateTime createdAt; private Boolean isLiked; - private LocalDateTime expired; - private Boolean isExpired; + private LocalDate expiredAt; + private LocalDate startAt; + + private String status; @JsonIgnore private LocalDateTime projectViewCreateAt; @@ -49,8 +50,10 @@ public ResponseProjectListDetailDto( String title, ImgEntity titleImg, LocalDateTime createdAt, - LocalDateTime expired, + LocalDate expired, + LocalDate start, long goal, + ProjectStatus status, Double completionRate, long likeCount, long userCount, @@ -66,11 +69,12 @@ public ResponseProjectListDetailDto( this.createdAt = createdAt; this.userCount = userCount; this.isLiked = isLiked != 0L; - this.isExpired = expired.isBefore(LocalDateTime.now()); - this.expired = expired; + this.expiredAt = expired; + this.startAt = start; this.viewCount = viewCount; // this.totalCount = totalCount; this.projectViewCreateAt = projectViewCreateAt; + this.status = status.name(); } } \ No newline at end of file diff --git a/src/main/java/NextLevel/demo/project/project/entity/ProjectEntity.java b/src/main/java/NextLevel/demo/project/project/entity/ProjectEntity.java index cd630fe..9b20ff1 100644 --- a/src/main/java/NextLevel/demo/project/project/entity/ProjectEntity.java +++ b/src/main/java/NextLevel/demo/project/project/entity/ProjectEntity.java @@ -1,9 +1,12 @@ package NextLevel.demo.project.project.entity; import NextLevel.demo.BasedEntity; +import NextLevel.demo.exception.CustomException; +import NextLevel.demo.exception.ErrorCode; import NextLevel.demo.funding.entity.FreeFundingEntity; import NextLevel.demo.option.OptionEntity; import NextLevel.demo.img.entity.ImgEntity; +import NextLevel.demo.project.ProjectStatus; import NextLevel.demo.project.community.entity.ProjectCommunityAskEntity; import NextLevel.demo.project.notice.entity.ProjectNoticeEntity; import NextLevel.demo.project.story.entity.ProjectStoryEntity; @@ -11,21 +14,9 @@ import NextLevel.demo.project.view.ProjectViewEntity; import NextLevel.demo.user.entity.LikeEntity; import NextLevel.demo.user.entity.UserEntity; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; -import java.text.ParseException; +import jakarta.persistence.*; + import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Set; import lombok.AccessLevel; @@ -60,7 +51,13 @@ public class ProjectEntity extends BasedEntity { private Long goal; @Column(nullable = false) - private LocalDateTime expired; + private LocalDate expiredAt; + + @Column(nullable = false) + private LocalDate startAt; + + @Enumerated(EnumType.STRING) + private ProjectStatus projectStatus; @OneToMany(mappedBy = "project", fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST}) private List tags; @@ -95,18 +92,22 @@ public void setTags(List tags) { @Builder public ProjectEntity(Long id, UserEntity user, String title, String content, - Long goal, ImgEntity titleImg, String expired, List tags, - List stories) throws ParseException { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + Long goal, ImgEntity titleImg, LocalDate expiredAt, LocalDate startAt, List tags, + List stories) { this.id = id; this.user = user; this.title = title; this.content = content; this.goal = goal; this.titleImg = titleImg; - this.expired = LocalDate.parse(expired, DateTimeFormatter.ofPattern("yyyy-MM-dd")).atTime(23, 59); //LocalDateTime.of(new SimpleDateFormat("yyyy-MM-dd").parse(expired)); + this.expiredAt = expiredAt; + this.startAt = startAt; this.tags = tags; this.stories = stories; + + this.projectStatus = startAt.isAfter(LocalDate.now()) ? ProjectStatus.PENDING : ProjectStatus.PROGRESS; + if(startAt.isAfter(expiredAt)) // start > expired + throw new CustomException(ErrorCode.START_MUST_BEFORE_EXPIRED); } @Override diff --git a/src/main/java/NextLevel/demo/project/project/repository/ProjectDslRepository.java b/src/main/java/NextLevel/demo/project/project/repository/ProjectDslRepository.java index 2b30437..8d6abb2 100644 --- a/src/main/java/NextLevel/demo/project/project/repository/ProjectDslRepository.java +++ b/src/main/java/NextLevel/demo/project/project/repository/ProjectDslRepository.java @@ -1,6 +1,7 @@ package NextLevel.demo.project.project.repository; import NextLevel.demo.funding.repository.FundingDslRepository; +import NextLevel.demo.project.ProjectStatus; import NextLevel.demo.project.project.dto.request.RequestMainPageProjectListDto; import NextLevel.demo.project.project.dto.response.ResponseProjectListDetailDto; import NextLevel.demo.project.project.dto.response.ResponseProjectListDto; @@ -32,6 +33,7 @@ public ResponseProjectListDto selectProjectDsl(RequestMainPageProjectListDto dto .builder() .where(QProjectEntity.class, (project)->whereSearch(project, dto.getSearch())) .where(QProjectEntity.class, (projectEntity)->whereTag(projectEntity, dto.getTagIds())) + .where(QProjectEntity.class, (projectEntity) -> projectEntity.projectStatus.in(ProjectStatus.PROGRESS, ProjectStatus.STOPPED)) .orderBy(QProjectEntity.class, (project)->orderByType(project, ProjectOrderType.getType(dto.getOrder()), dto.getDesc())) .limit(dto.getLimit(), dto.getPage()) .commit(dto.getUserId()); @@ -67,7 +69,7 @@ private OrderSpecifier orderByType(QProjectEntity projectEntity, ProjectOrder order = Expressions.asNumber(selectProjectRepository.likeCount(projectEntity)); break; case ProjectOrderType.EXPIRED: - order = projectEntity.expired; + order = projectEntity.expiredAt; break; case ProjectOrderType.USER: order = Expressions.asNumber(fundingDslRepository.fundingUserCount(projectEntity)); diff --git a/src/main/java/NextLevel/demo/project/select/SelectProjectListDslRepository.java b/src/main/java/NextLevel/demo/project/select/SelectProjectListDslRepository.java index 8d66360..e5e80c9 100644 --- a/src/main/java/NextLevel/demo/project/select/SelectProjectListDslRepository.java +++ b/src/main/java/NextLevel/demo/project/select/SelectProjectListDslRepository.java @@ -86,8 +86,10 @@ private List selectProjectsWithSingle ( projectEntity.title, projectEntity.titleImg, projectEntity.createdAt, - projectEntity.expired, + projectEntity.expiredAt, + projectEntity.startAt, projectEntity.goal, + projectEntity.projectStatus, // completeRate fundingDslRepository.completeRate(projectEntity), diff --git a/src/main/java/NextLevel/demo/user/entity/UserEntity.java b/src/main/java/NextLevel/demo/user/entity/UserEntity.java index fbc3ef0..04d5028 100644 --- a/src/main/java/NextLevel/demo/user/entity/UserEntity.java +++ b/src/main/java/NextLevel/demo/user/entity/UserEntity.java @@ -48,6 +48,7 @@ public class UserEntity extends BasedEntity { @Column private String areaNumber; + // Enumerated(EnumType.STRING) 추후 수정 @Column(length=5, columnDefinition = "char(6)") private String role = UserRole.SOCIAL.name(); diff --git a/src/main/java/NextLevel/demo/util/StringUtil.java b/src/main/java/NextLevel/demo/util/StringUtil.java index 43569d0..ee79bac 100644 --- a/src/main/java/NextLevel/demo/util/StringUtil.java +++ b/src/main/java/NextLevel/demo/util/StringUtil.java @@ -3,12 +3,25 @@ import NextLevel.demo.exception.CustomException; import NextLevel.demo.exception.ErrorCode; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + public class StringUtil { public static final String PHONE_NUMBER_FORMAT = "^010-\\d{4}-\\d{4}$"; public static final String AREA_NUMBER_FORMAT = "^\\d{2,3}-\\d{3,4}-\\d{4}$"; private static final String NO_FORMAT = "^\\d{11}$"; + public static LocalDate toLocalDate(String date) { + try { + // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + return LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); //LocalDateTime.of(new SimpleDateFormat("yyyy-MM-dd").parse(expired)); + }catch (Exception e) { + e.printStackTrace(); + throw new CustomException(ErrorCode.ERROR_EXPIRED_DATE_CONVERSION, date); + } + } + public static String setGetterName(String columnName) { String firstChar = columnName.substring(0, 1).toUpperCase(); return "set" + firstChar + columnName.substring(1); From d8aea4c02e0f97667ab96d785009acfc8998f903 Mon Sep 17 00:00:00 2001 From: kwonhee1 Date: Mon, 29 Sep 2025 13:36:48 +0900 Subject: [PATCH 2/7] feat my page project list --- build.gradle | 1 + settings.gradle | 5 ++ .../demo/funding/dto/funding dto.txt | 21 ++++++++ .../funding/dto/response/FreeFundingDto.java | 30 ++++++++++++ .../dto/response/FundingResponseDto.java | 17 ------- .../dto/response/OptionFundingDto.java | 34 +++++++++++++ .../dto/response/OptionFundingListDto.java | 49 +++++++++++++++++++ .../dto/response/ProjectFundingDto.java | 16 ++++++ .../dto/response/ProjectTotalFundingDto.java | 47 ++++++++++++++++++ .../dto/response/ResponseCouponDto.java | 2 + .../funding/entity/FreeFundingEntity.java | 3 +- .../demo/funding/service/FundingService.java | 7 +++ .../demo/option/OptionController.java | 2 +- ...{ResponseOptionDto.java => OptionDto.java} | 6 +-- .../NextLevel/demo/option/OptionEntity.java | 3 +- .../NextLevel/demo/option/OptionService.java | 4 +- .../ProjectListDetailWithFundingDto.java | 35 +++++++++++++ .../response/ProjectListWithFundingDto.java | 26 ++++++++++ .../ResponseProjectListDetailDto.java | 29 ++++++----- .../SelectProjectListDslRepository.java | 24 ++++----- .../user/controller/MypageController.java | 39 +++++++++++++++ .../demo/user/controller/UserController.java | 6 --- .../request/RequestMyPageProjectListDto.java | 5 ++ .../repository/UserProjectDslRepository.java | 8 +++ .../service/MypageProjectSelectService.java | 34 +++++++++++++ .../demo/user/service/UserService.java | 14 ------ 26 files changed, 393 insertions(+), 74 deletions(-) create mode 100644 src/main/java/NextLevel/demo/funding/dto/funding dto.txt create mode 100644 src/main/java/NextLevel/demo/funding/dto/response/FreeFundingDto.java delete mode 100644 src/main/java/NextLevel/demo/funding/dto/response/FundingResponseDto.java create mode 100644 src/main/java/NextLevel/demo/funding/dto/response/OptionFundingDto.java create mode 100644 src/main/java/NextLevel/demo/funding/dto/response/OptionFundingListDto.java create mode 100644 src/main/java/NextLevel/demo/funding/dto/response/ProjectFundingDto.java create mode 100644 src/main/java/NextLevel/demo/funding/dto/response/ProjectTotalFundingDto.java rename src/main/java/NextLevel/demo/option/{ResponseOptionDto.java => OptionDto.java} (71%) create mode 100644 src/main/java/NextLevel/demo/project/project/dto/response/ProjectListDetailWithFundingDto.java create mode 100644 src/main/java/NextLevel/demo/project/project/dto/response/ProjectListWithFundingDto.java create mode 100644 src/main/java/NextLevel/demo/user/controller/MypageController.java create mode 100644 src/main/java/NextLevel/demo/user/service/MypageProjectSelectService.java diff --git a/build.gradle b/build.gradle index b4043e5..a9ba99a 100644 --- a/build.gradle +++ b/build.gradle @@ -58,6 +58,7 @@ dependencies { // email implementation("com.sun.mail:javax.mail:1.6.2") + } tasks.named('test') { diff --git a/settings.gradle b/settings.gradle index 0a383dd..1e4fdcc 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,6 @@ +pluginManagement { + plugins { + id 'org.jetbrains.kotlin.jvm' version '2.2.0' + } +} rootProject.name = 'demo' diff --git a/src/main/java/NextLevel/demo/funding/dto/funding dto.txt b/src/main/java/NextLevel/demo/funding/dto/funding dto.txt new file mode 100644 index 0000000..c6fadbe --- /dev/null +++ b/src/main/java/NextLevel/demo/funding/dto/funding dto.txt @@ -0,0 +1,21 @@ +project 별 funding 정보 dto : my page 메이커 +project dto : project total funding dto + project funding dto (기본 정보) + option funding list dto : input ( OptionEntity(with List ) ) + option 정렬, option funding 날짜 정렬 + option dto + List