Skip to content
Merged
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 @@ -9,6 +9,7 @@
import com.example.nexus.app.post.controller.dto.response.PostDetailResponse;
import com.example.nexus.app.post.controller.dto.response.PostMainViewDetailResponse;
import com.example.nexus.app.post.controller.dto.response.PostRightSidebarResponse;
import com.example.nexus.app.post.controller.dto.response.PostScreenerQuestionResponse;
import com.example.nexus.app.post.controller.dto.response.PostSummaryResponse;
import com.example.nexus.app.post.controller.dto.response.SimilarPostResponse;
import com.example.nexus.app.post.service.PostService;
Expand Down Expand Up @@ -193,4 +194,14 @@ public ResponseEntity<ApiResponse<PostRightSidebarResponse>> getPostRightSidebar

return ResponseEntity.ok(ApiResponse.onSuccess(response));
}

@Override
@GetMapping("/{postId}/questions")
public ResponseEntity<ApiResponse<PostScreenerQuestionResponse>> getPostScreenerQuestion(
@PathVariable Long postId) {

PostScreenerQuestionResponse response = postService.findQuestions(postId);

return ResponseEntity.ok(ApiResponse.onSuccess(response));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -251,4 +251,13 @@ ResponseEntity<ApiResponse<PostRightSidebarResponse>> getPostRightSidebar(
@Parameter(description = "게시글 ID", required = true)
@PathVariable Long postId
);

@Operation(
summary = "게시글 추가 조건 조회",
description = "게시글의 추가 요구사항을 조회합니다."
)
ResponseEntity<ApiResponse<PostScreenerQuestionResponse>> getPostScreenerQuestion(
@Parameter(description = "게시글 ID", required = true)
@PathVariable Long postId
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ public record PostCreateRequest(
@Schema(description = "최대 나이", example = "35")
Integer ageMax,

@Schema(description = "추가 요구사항", example = "모바일 앱 사용 경험이 있으신 분")
String additionalRequirements,
@Schema(description = "추가 조건", example = "[\"모바일 앱 사용 경험이 있으신 분\", \"ios\"]")
List<String> screenerQuestions,

@Schema(description = "리워드 타입", example = "GIFT_CARD")
RewardType rewardType,
Expand Down Expand Up @@ -141,7 +141,7 @@ public PostRequirement toPostRequirementEntity(Post post) {
.genderRequirement(genderRequirement)
.ageMin(ageMin)
.ageMax(ageMax)
.additionalRequirements(additionalRequirements)
.screenerQuestions(screenerQuestions)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ public record PostUpdateRequest(
@Schema(description = "최대 나이", example = "40")
Integer ageMax,

@Schema(description = "추가 요구사항", example = "마케팅 업무 경험자 우대")
String additionalRequirements,
@Schema(description = "추가 조건", example = "[\"모바일 앱 사용 경험이 있으신 분\", \"ios\"]")
List<String> screenerQuestions,

@Schema(description = "리워드 타입", example = "CASH")
RewardType rewardType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.example.nexus.app.post.domain.PostRequirement;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;

public record PostRequirementResponse(
@Schema(description = "최대 참여자 수")
Expand All @@ -17,7 +18,7 @@ public record PostRequirementResponse(
Integer ageMax,

@Schema(description = "추가 요구사항")
String additionalRequirements
List<String> screenerQuestions
) {

public static PostRequirementResponse from(PostRequirement requirement) {
Expand All @@ -26,7 +27,7 @@ public static PostRequirementResponse from(PostRequirement requirement) {
requirement.getGenderRequirement(),
requirement.getAgeMin(),
requirement.getAgeMax(),
requirement.getAdditionalRequirements()
requirement.getScreenerQuestions()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ public static PostRightSidebarResponse from(Post post, User user) {
if (!targetBuilder.isEmpty()) targetBuilder.append(", ");
targetBuilder.append(post.getRequirement().getAgeMax()).append("세 이하");
}
if (post.getRequirement().getAdditionalRequirements() != null && !post.getRequirement().getAdditionalRequirements().isBlank()) {
if (post.getRequirement().getScreenerQuestions() != null && !post.getRequirement().getScreenerQuestions().isEmpty()) {
if (!targetBuilder.isEmpty()) targetBuilder.append(", ");
targetBuilder.append(post.getRequirement().getAdditionalRequirements());
targetBuilder.append(post.getRequirement().getScreenerQuestions());
}
if (!targetBuilder.isEmpty()) {
participationTarget = targetBuilder.toString();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.example.nexus.app.post.controller.dto.response;

import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;

@Schema(description = "게시글 추가 조건")
public record PostScreenerQuestionResponse(
@Schema(description = "추가 조건", example = "[\"모바일 앱 사용 경험이 있으신 분\", \"ios\"]")
List<String> screenerQuestions
) {

public static PostScreenerQuestionResponse of(List<String> questions) {
return new PostScreenerQuestionResponse(questions);
}
}
10 changes: 10 additions & 0 deletions src/main/java/com/example/nexus/app/post/domain/Post.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
import com.example.nexus.app.global.code.status.ErrorStatus;
import com.example.nexus.app.global.exception.GeneralException;
import com.example.nexus.app.reward.domain.PostReward;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.BatchSize;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
Expand Down Expand Up @@ -54,18 +56,21 @@ public class Post {
@Enumerated(EnumType.STRING)
@CollectionTable(name = "post_main_category", joinColumns = @JoinColumn(name = "post_id"))
@Column(name = "main_category", nullable = false)
@BatchSize(size = 100)
private Set<MainCategory> mainCategory;

@ElementCollection
@Enumerated(EnumType.STRING)
@CollectionTable(name = "post_platform_category", joinColumns = @JoinColumn(name = "post_id"))
@Column(name = "platform_category")
@BatchSize(size = 100)
private Set<PlatformCategory> platformCategory;

@ElementCollection
@Enumerated(EnumType.STRING)
@CollectionTable(name = "post_genres", joinColumns = @JoinColumn(name = "post_id"))
@Column(name = "genre")
@BatchSize(size = 100)
private Set<GenreCategory> genreCategories = new HashSet<>();

@Enumerated(EnumType.STRING)
Expand All @@ -86,18 +91,23 @@ public class Post {
@Column(name = "team_member_count")
private Integer teamMemberCount;

@JsonIgnore
@OneToOne(mappedBy = "post", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private PostSchedule schedule;

@JsonIgnore
@OneToOne(mappedBy = "post", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private PostRequirement requirement;

@JsonIgnore
@OneToOne(mappedBy = "post", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private PostReward reward;

@JsonIgnore
@OneToOne(mappedBy = "post", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private PostFeedback feedback;

@JsonIgnore
@OneToOne(mappedBy = "post", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private PostContent postContent;

Expand Down
19 changes: 16 additions & 3 deletions src/main/java/com/example/nexus/app/post/domain/PostContent.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
package com.example.nexus.app.post.domain;

import jakarta.persistence.*;
import jakarta.persistence.CollectionTable;
import jakarta.persistence.Column;
import jakarta.persistence.ElementCollection;
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.OneToOne;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import java.util.ArrayList;
import java.util.List;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.ArrayList;
import org.hibernate.annotations.BatchSize;

@Entity
@Table(name = "post_contents", uniqueConstraints = @UniqueConstraint(columnNames = "post_id"))
Expand All @@ -30,6 +42,7 @@ public class PostContent {
@ElementCollection
@CollectionTable(name = "post_media_urls", joinColumns = @JoinColumn(name = "post_content_id"))
@Column(name = "media_url")
@BatchSize(size = 100)
private List<String> mediaUrls = new ArrayList<>();

@Builder
Expand Down
25 changes: 20 additions & 5 deletions src/main/java/com/example/nexus/app/post/domain/PostFeedback.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,27 @@
package com.example.nexus.app.post.domain;

import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import jakarta.persistence.CollectionTable;
import jakarta.persistence.Column;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.BatchSize;

@Entity
@Table(name = "post_feedbacks", uniqueConstraints = @UniqueConstraint(columnNames = "post_id"))
Expand All @@ -30,12 +43,14 @@ public class PostFeedback {
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "post_feedback_items", joinColumns = @JoinColumn(name = "post_feedback_id"))
@Column(name = "feedback_item")
@BatchSize(size = 100)
private List<String> feedbackItems = new ArrayList<>();

@ElementCollection(fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "post_privacy_item", joinColumns = @JoinColumn(name = "post_feedback_id"))
@Column(name = "privacy_item")
@BatchSize(size = 100)
private Set<PrivacyItem> privacyItems = new HashSet<>();

private String privacyPurpose;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,23 @@
package com.example.nexus.app.post.domain;

import jakarta.persistence.*;
import jakarta.persistence.CollectionTable;
import jakarta.persistence.Column;
import jakarta.persistence.ElementCollection;
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.OneToOne;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import java.util.ArrayList;
import java.util.List;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.BatchSize;

@Entity
@Table(name = "post_requirements", uniqueConstraints = @UniqueConstraint(columnNames = "post_id"))
Expand Down Expand Up @@ -31,18 +45,23 @@ public class PostRequirement {
@Column(name = "age_max")
private Integer ageMax;

@Column(name = "additional_requirements", columnDefinition = "TEXT")
private String additionalRequirements;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "post_screener_questions", joinColumns = @JoinColumn(name = "post_requirement_id"))
@Column(name = "screener_question")
@BatchSize(size = 100)
private List<String> screenerQuestions = new ArrayList<>();

@Builder
public PostRequirement(Post post, Integer maxParticipants, String genderRequirement,
Integer ageMin, Integer ageMax, String additionalRequirements) {
Integer ageMin, Integer ageMax, List<String> screenerQuestions) {
this.post = post;
this.maxParticipants = maxParticipants;
this.genderRequirement = genderRequirement;
this.ageMin = ageMin;
this.ageMax = ageMax;
this.additionalRequirements = additionalRequirements;
if (screenerQuestions != null) {
this.screenerQuestions = new ArrayList<>(screenerQuestions);
}
}

public void updateMaxParticipants(Integer maxParticipants) {
Expand All @@ -61,7 +80,10 @@ public void updateAgeMax(Integer ageMax) {
this.ageMax = ageMax;
}

public void updateAdditionalRequirements(String additionalRequirements) {
this.additionalRequirements = additionalRequirements;
public void updateScreenerQuestions(List<String> screenerQuestions) {
this.screenerQuestions.clear();
if (screenerQuestions != null) {
this.screenerQuestions.addAll(screenerQuestions);
}
}
}
14 changes: 11 additions & 3 deletions src/main/java/com/example/nexus/app/post/domain/PostSchedule.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
package com.example.nexus.app.post.domain;

import jakarta.persistence.*;
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.OneToOne;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import java.time.LocalDateTime;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Entity
@Table(name = "post_schedules", uniqueConstraints = @UniqueConstraint(columnNames = "post_id"))
@Getter
Expand Down
Loading