Skip to content

Commit

Permalink
[MERGE] 플레이그라운드 게시물 반환 기능 + 채용 정보 조회 사용자 정보 추가 - #434 (#453)
Browse files Browse the repository at this point in the history
  • Loading branch information
rlarlgnszx authored Nov 21, 2024
2 parents 44d1a4a + e15328b commit 921253e
Show file tree
Hide file tree
Showing 8 changed files with 115 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static org.sopt.app.application.playground.PlaygroundHeaderCreator.createDefaultHeader;

import io.jsonwebtoken.ExpiredJwtException;
import jakarta.persistence.EntityNotFoundException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
Expand All @@ -19,6 +20,7 @@
import org.sopt.app.application.auth.dto.PlaygroundAuthTokenInfo.RefreshedToken;
import org.sopt.app.application.playground.dto.PlayGroundEmploymentResponse;
import org.sopt.app.application.playground.dto.PlayGroundPostCategory;
import org.sopt.app.application.playground.dto.PlayGroundPostDetailResponse;
import org.sopt.app.application.playground.dto.PlaygroundPostInfo.PlaygroundPost;
import org.sopt.app.application.playground.dto.PlaygroundPostInfo.PlaygroundPostResponse;
import org.sopt.app.application.playground.dto.PlaygroundProfileInfo.ActiveUserIds;
Expand All @@ -29,6 +31,7 @@
import org.sopt.app.application.playground.dto.PlaygroundProfileInfo.PlaygroundMain;
import org.sopt.app.application.playground.dto.PlaygroundProfileInfo.PlaygroundProfile;
import org.sopt.app.application.playground.dto.PlaygroundProfileInfo.UserActiveInfo;
import org.sopt.app.application.playground.dto.PostWithMemberInfo;
import org.sopt.app.common.exception.BadRequestException;
import org.sopt.app.common.exception.UnauthorizedException;
import org.sopt.app.common.response.ErrorCode;
Expand Down Expand Up @@ -199,12 +202,41 @@ public List<RecentPostsResponse> getRecentPosts(String playgroundToken) {
.join();
}
}

public List<RecentPostsResponse> getRecentPostsWithMemberInfo(String playgroundToken) {
List<RecentPostsResponse> recentPosts = getRecentPosts(playgroundToken);
return getPostsWithMemberInfo(playgroundToken, recentPosts);
}

public List<EmploymentPostResponse> getPlaygroundEmploymentPost(String accessToken) {
Map<String, String> requestHeader = createAuthorizationHeaderByUserPlaygroundToken(accessToken);
PlayGroundEmploymentResponse postInfo = playgroundClient.getPlaygroundEmploymentPost(requestHeader,16,10,0);
return postInfo.posts().stream()
.map(EmploymentPostResponse::of)
.collect(Collectors.toList());
.map(EmploymentPostResponse::of).toList();
}

public List<EmploymentPostResponse> getPlaygroundEmploymentPostWithMemberInfo(String playgroundToken) {
List<EmploymentPostResponse> employmentPosts = getPlaygroundEmploymentPost(playgroundToken);
return getPostsWithMemberInfo(playgroundToken, employmentPosts);
}

private <T extends PostWithMemberInfo> T addMemberInfoToPost(T post, PlayGroundPostDetailResponse postDetail) {
if (postDetail.member() != null) {
return (T) post.withMemberDetail(postDetail.member().name(), postDetail.member().profileImage());
} else if (postDetail.anonymousProfile() != null) {
return (T) post.withMemberDetail(postDetail.anonymousProfile().nickname(), postDetail.anonymousProfile().profileImgUrl());
}
throw new EntityNotFoundException("Member not found");
}

private <T extends PostWithMemberInfo> List<T> getPostsWithMemberInfo(String playgroundToken, List<T> posts) {
final Map<String, String> accessToken = createAuthorizationHeaderByUserPlaygroundToken(playgroundToken);
List<T> mutablePosts = new ArrayList<>();
for (T post : posts) {
Long postId = post.getId();
PlayGroundPostDetailResponse postDetail = playgroundClient.getPlayGroundPostDetail(accessToken, postId);
mutablePosts.add(addMemberInfoToPost(post, postDetail));
}
return mutablePosts;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.util.Map;
import org.sopt.app.application.auth.dto.PlaygroundAuthTokenInfo.RefreshedToken;
import org.sopt.app.application.playground.dto.PlayGroundEmploymentResponse;
import org.sopt.app.application.playground.dto.PlayGroundPostDetailResponse;
import org.sopt.app.application.playground.dto.PlaygroundPostInfo.PlaygroundPostResponse;
import org.sopt.app.application.playground.dto.PlaygroundProfileInfo.ActiveUserIds;
import org.sopt.app.application.playground.dto.PlaygroundProfileInfo.OwnPlaygroundProfile;
Expand Down Expand Up @@ -61,4 +62,8 @@ PlayGroundEmploymentResponse getPlaygroundEmploymentPost(@HeaderMap Map<String,
@Param int categoryId,
@Param int limit,
@Param int cursor);

@RequestLine("GET /api/v1/community/posts/{postId}")
PlayGroundPostDetailResponse getPlayGroundPostDetail(@HeaderMap Map<String, String> headers,
@Param Long postId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.sopt.app.application.playground.dto;

public record PlayGroundPostDetailResponse(
Member member, AnonymousProfile anonymousProfile
) {
public record Member(
String name,
String profileImage
) {
}

public record AnonymousProfile(
String nickname,
String profileImgUrl
) {
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package org.sopt.app.application.playground.dto;

public interface PostWithMemberInfo {
Object withMemberDetail(String name, String profileImage);
Long getId();
}
11 changes: 2 additions & 9 deletions src/main/java/org/sopt/app/facade/HomeFacade.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,18 +73,11 @@ private boolean isServiceVisibleToUser(AppServiceInfo appServiceInfo, User user)
}

public List<RecentPostsResponse> getRecentPosts(User user) {
return playgroundAuthService.getRecentPosts(user.getPlaygroundToken()).stream()
.map(post -> RecentPostsResponse.builder()
.id(post.getId())
.title(post.getTitle())
.category(post.getCategory())
.isHotPost(post.isHotPost())
.build()
).toList();
return playgroundAuthService.getRecentPostsWithMemberInfo(user.getPlaygroundToken());
}

public List<EmploymentPostResponse> getHomeEmploymentPost(User user) {
return playgroundAuthService.getPlaygroundEmploymentPost(user.getPlaygroundToken());
return playgroundAuthService.getPlaygroundEmploymentPostWithMemberInfo(user.getPlaygroundToken());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public ResponseEntity<List<AppServiceEntryStatusResponse>> getAppService(
}


@Operation(summary = "최근 채용탭 10개 조회")
@Operation(summary = "최근 게시물 카테고리별 조회")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "success"),
@ApiResponse(responseCode = "401", description = "token error", content = @Content),
Expand All @@ -70,6 +70,7 @@ public ResponseEntity<List<RecentPostsResponse>> getRecentPost(
homeFacade.getRecentPosts(user));
}

@Operation(summary = "최근 채용탭 10개 조회")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "success"),
@ApiResponse(responseCode = "401", description = "token error", content = @Content),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
package org.sopt.app.presentation.home.response;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.sopt.app.application.playground.dto.PlayGroundEmploymentResponse.EmploymentPost;
import org.sopt.app.application.playground.dto.PostWithMemberInfo;

@Getter
@Builder
public class EmploymentPostResponse {
private final Long id;
private final String categoryName;
private final String title;
private final String content;
private final List<String> images;
@AllArgsConstructor
@NoArgsConstructor
public class EmploymentPostResponse implements PostWithMemberInfo {
private Long id;
private String categoryName;
private String profileImage;
private String name;
private String title;
private String content;
private List<String> images;

public static EmploymentPostResponse of(EmploymentPost employmentPost) {
return EmploymentPostResponse.builder()
Expand All @@ -23,4 +30,16 @@ public static EmploymentPostResponse of(EmploymentPost employmentPost) {
.images(employmentPost.images())
.build();
}

public EmploymentPostResponse withMemberDetail(String name, String profileImage) {
return EmploymentPostResponse.builder()
.id(this.id)
.categoryName(this.categoryName)
.name(name)
.profileImage(profileImage)
.title(this.title)
.content(this.content)
.images(this.images)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,25 @@

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.sopt.app.application.playground.dto.PlaygroundPostInfo.PlaygroundPostResponse;
import org.sopt.app.application.playground.dto.PostWithMemberInfo;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RecentPostsResponse {
@Getter
@NoArgsConstructor
public class RecentPostsResponse implements PostWithMemberInfo {
private Long id;
private String title;
private String profileImage;
private String name;
private String category;
private String content;
private boolean isHotPost;

private Boolean isHotPost;


public static RecentPostsResponse of(PlaygroundPostResponse playgroundPostResponse) {
return RecentPostsResponse.builder()
.id(playgroundPostResponse.postId())
Expand All @@ -26,4 +30,17 @@ public static RecentPostsResponse of(PlaygroundPostResponse playgroundPostRespon
.isHotPost(true)
.build();
}

public RecentPostsResponse withMemberDetail(String name, String profileImage) {
return RecentPostsResponse.builder()
.id(this.id)
.title(this.title)
.profileImage(profileImage)
.name(name)
.category(this.category)
.content(this.content)
.isHotPost(this.isHotPost)
.build();
}

}

0 comments on commit 921253e

Please sign in to comment.