Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEAT] 모든 모임 조회 api 크루 api와 연결 #458

Merged
merged 9 commits into from
Nov 23, 2024
18 changes: 18 additions & 0 deletions src/main/java/org/sopt/app/application/meeting/CrewClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.sopt.app.application.meeting;

import feign.*;
import java.util.Map;
import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableFeignClients
public interface CrewClient {

@RequestLine("GET /internal/meetings?orgId={playgroundId}&page={page}&take={take}&category={category}&isOnlyActiveGeneration={isOnlyActiveGeneration}")
CrewMeetingResponse getAllMeetings(@HeaderMap Map<String, String> headers,
@Param("playgroundId") Long playgroundId,
@Param("page") int page,
@Param("take") int take,
@Param("category") String category,
@Param("isOnlyActiveGeneration") Boolean isOnlyActiveGeneration
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.sopt.app.application.meeting;

import java.util.List;

public record CrewMeetingResponse(
List<CrewMeeting> meetings
) {
public record CrewMeeting(
Long id,
String title,
Boolean canJoinOnlyActiveGeneration,
MeetingStatus status,
String imageUrl,
String category,
List<String> joinableParts,
Boolean isBlockedMeeting
){

}
}

This file was deleted.

78 changes: 18 additions & 60 deletions src/main/java/org/sopt/app/application/meeting/MeetingResponse.java
Original file line number Diff line number Diff line change
@@ -1,73 +1,31 @@
package org.sopt.app.application.meeting;

import java.util.List;
import lombok.Builder;
import org.sopt.app.application.meeting.CrewMeetingResponse.CrewMeeting;
import org.sopt.app.domain.enums.Part;

@Builder
public record MeetingResponse(
Long meetingId,
Long id,
String title,
MeetingCategory category,
String category,
Boolean canJoinOnlyActiveGeneration,
List<String> joinableParts,
Boolean canJoinAllParts,
MeetingStatus status,
String imageUrl,
Boolean canJoinOnlyActiveGeneration
String imageUrl
) {
@Deprecated
public static MeetingResponse eventActiveDummy(Long id) {
public static MeetingResponse of(final CrewMeeting crewMeeting) {
return MeetingResponse.builder()
.meetingId(id)
.title("[35기 솝커톤] 서버 파트 신청")
.category(MeetingCategory.EVENT)
.status(MeetingStatus.ACTIVE)
.imageUrl("https://makers-web-img.s3.ap-northeast-2.amazonaws.com/meeting/2024/11/14/78d48e33-f1d7-474f-a357-117b75a8cb90.png")
.canJoinOnlyActiveGeneration(false)
.build();
}

@Deprecated
public static MeetingResponse studyRecruitingDummy(Long id) {
return MeetingResponse.builder()
.meetingId(id)
.title("모집중이고 활동 기수만 참여하는 스터디")
.category(MeetingCategory.STUDY)
.status(MeetingStatus.RECRUITING)
.imageUrl("https://makers-web-img.s3.ap-northeast-2.amazonaws.com/meeting/2024/11/14/78d48e33-f1d7-474f-a357-117b75a8cb90.png")
.canJoinOnlyActiveGeneration(true)
.build();
}

@Deprecated
public static MeetingResponse studyPreRecruitingDummy(Long id) {
return MeetingResponse.builder()
.meetingId(id)
.title("모집 이전이고 모든 기수가 참여하는 스터디")
.category(MeetingCategory.STUDY)
.status(MeetingStatus.PRE_RECRUITING)
.imageUrl("https://makers-web-img.s3.ap-northeast-2.amazonaws.com/meeting/2024/11/14/78d48e33-f1d7-474f-a357-117b75a8cb90.png")
.canJoinOnlyActiveGeneration(false)
.build();
}

@Deprecated
public static MeetingResponse studyClosedDummy(Long id) {
return MeetingResponse.builder()
.meetingId(id)
.title("모집이 끝나고 모든 기수가 참여하는 스터디")
.category(MeetingCategory.STUDY)
.status(MeetingStatus.CLOSED)
.imageUrl("https://makers-web-img.s3.ap-northeast-2.amazonaws.com/meeting/2024/11/14/78d48e33-f1d7-474f-a357-117b75a8cb90.png")
.canJoinOnlyActiveGeneration(false)
.build();
}

@Deprecated
public static MeetingResponse studyActiveDummy(Long id) {
return MeetingResponse.builder()
.meetingId(id)
.title("활동중이고 활동 기수만 참여하는 스터디")
.category(MeetingCategory.STUDY)
.status(MeetingStatus.ACTIVE)
.imageUrl("https://makers-web-img.s3.ap-northeast-2.amazonaws.com/meeting/2024/11/14/78d48e33-f1d7-474f-a357-117b75a8cb90.png")
.canJoinOnlyActiveGeneration(true)
.id(crewMeeting.id())
.title(crewMeeting.title())
.category(crewMeeting.category())
.canJoinOnlyActiveGeneration(crewMeeting.canJoinOnlyActiveGeneration())
.joinableParts(crewMeeting.joinableParts())
.canJoinAllParts(crewMeeting.joinableParts().size() == Part.values().length)
.status(crewMeeting.status())
.imageUrl(crewMeeting.imageUrl())
.build();
}
}
24 changes: 24 additions & 0 deletions src/main/java/org/sopt/app/application/meeting/MeetingService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.sopt.app.application.meeting;

import static org.sopt.app.application.playground.PlaygroundHeaderCreator.createAuthorizationHeaderByInternalPlaygroundToken;

import lombok.RequiredArgsConstructor;
import org.sopt.app.presentation.home.MeetingParamRequest;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class MeetingService {
private final CrewClient crewClient;

public CrewMeetingResponse getAllMeetings(MeetingParamRequest request) {
return crewClient.getAllMeetings(
createAuthorizationHeaderByInternalPlaygroundToken(),
request.playgroundId(),
request.page(),
request.take(),
request.category(),
false
);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package org.sopt.app.application.meeting;

public enum MeetingStatus {
RECRUITING,
PRE_RECRUITING,
CLOSED,
ACTIVE
APPLY_ABLE,
BEFORE_START,
RECRUITMENT_COMPLETE
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,13 @@
package org.sopt.app.application.playground;


import feign.HeaderMap;
import feign.Param;
import feign.RequestLine;
import java.util.List;
import java.util.Map;
import org.sopt.app.application.auth.dto.PlaygroundAuthTokenInfo.RefreshedToken;
import feign.*;
import java.util.*;
import org.sopt.app.application.playground.dto.PlaygroundProfileInfo.*;
import org.sopt.app.application.playground.dto.PlayGroundEmploymentResponse;
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;
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.PlaygroundUserFindCondition;
import org.sopt.app.application.auth.dto.PlaygroundAuthTokenInfo.RefreshedToken;
import org.sopt.app.application.playground.dto.RecommendedFriendInfo.PlaygroundUserIds;
import org.sopt.app.presentation.auth.AppAuthRequest.*;
import org.sopt.app.presentation.home.response.RecentPostsResponse;
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/org/sopt/app/common/config/ClientConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import feign.jackson.*;
import feign.okhttp.OkHttpClient;
import feign.slf4j.Slf4jLogger;
import org.sopt.app.application.meeting.CrewClient;
import org.springframework.context.annotation.*;
import org.sopt.app.application.playground.PlaygroundClient;
import org.springframework.beans.factory.annotation.Value;
Expand All @@ -13,9 +14,13 @@
@Configuration
@EnableFeignClients
public class ClientConfig {

@Value("${makers.playground.server}")
private String playgroundEndPoint;

@Value("${makers.crew.server}")
private String crewEndPoint;

@Bean
public PlaygroundClient playgroundClient() {
return Feign.builder()
Expand All @@ -27,6 +32,17 @@ public PlaygroundClient playgroundClient() {
.target(PlaygroundClient.class, playgroundEndPoint);
}

@Bean
public CrewClient crewClient() {
return Feign.builder()
.client(okHttpClient())
.encoder(encoder())
.decoder(decoder())
.logger(new Slf4jLogger(CrewClient.class))
.logLevel(feignLoggerLevel())
.target(CrewClient.class, crewEndPoint);
}

@Bean
public Encoder encoder() {
return new JacksonEncoder();
Expand Down
15 changes: 12 additions & 3 deletions src/main/java/org/sopt/app/facade/HomeFacade.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@
import lombok.RequiredArgsConstructor;
import lombok.val;
import org.sopt.app.application.app_service.*;
import org.sopt.app.application.app_service.dto.AppServiceEntryStatusResponse;
import org.sopt.app.application.app_service.dto.AppServiceInfo;
import org.sopt.app.application.app_service.dto.*;
import org.sopt.app.application.home.ActivityDurationCalculator;
import org.sopt.app.application.meeting.*;
import org.sopt.app.application.playground.PlaygroundAuthService;
import org.sopt.app.application.description.DescriptionInfo.MainDescription;
import org.sopt.app.application.description.DescriptionService;
import org.sopt.app.domain.entity.User;
import org.sopt.app.domain.enums.UserStatus;
import org.sopt.app.presentation.home.HomeDescriptionResponse;
import org.sopt.app.presentation.home.response.HomeDescriptionResponse;
import org.sopt.app.presentation.home.MeetingParamRequest;
import org.sopt.app.presentation.home.response.RecentPostsResponse;
import org.sopt.app.presentation.home.response.EmploymentPostResponse;
import org.springframework.stereotype.Service;
Expand All @@ -26,6 +27,7 @@ public class HomeFacade {
private final PlaygroundAuthService playgroundAuthService;
private final AppServiceService appServiceService;
private final AppServiceBadgeService appServiceBadgeService;
private final MeetingService meetingService;

@Transactional(readOnly = true)
@Deprecated
Expand Down Expand Up @@ -85,4 +87,11 @@ public List<EmploymentPostResponse> getHomeEmploymentPost(User user) {
return playgroundAuthService.getPlaygroundEmploymentPost(user.getPlaygroundToken());
}

public List<MeetingResponse> getAllMeetings(MeetingParamRequest request) {
return meetingService.getAllMeetings(request)
.meetings().stream()
.filter(crewMeeting -> !crewMeeting.isBlockedMeeting())
.map(MeetingResponse::of)
.toList();
}
}
16 changes: 2 additions & 14 deletions src/main/java/org/sopt/app/presentation/home/HomeController.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@
import org.sopt.app.application.meeting.MeetingResponse;
import org.sopt.app.domain.entity.User;
import org.sopt.app.facade.HomeFacade;
import org.sopt.app.presentation.home.response.RecentPostsResponse;
import org.sopt.app.presentation.home.response.EmploymentPostResponse;
import org.sopt.app.presentation.home.response.*;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -98,18 +97,7 @@ public ResponseEntity<List<MeetingResponse>> getAllMeeting(
@RequestParam(value = "category") final String category
) {
return ResponseEntity.ok(
List.of(
MeetingResponse.eventActiveDummy(1L),
MeetingResponse.studyRecruitingDummy(2L),
MeetingResponse.studyPreRecruitingDummy(3L),
MeetingResponse.studyClosedDummy(4L),
MeetingResponse.studyActiveDummy(5L),
MeetingResponse.eventActiveDummy(6L),
MeetingResponse.studyRecruitingDummy(7L),
MeetingResponse.studyPreRecruitingDummy(8L),
MeetingResponse.studyClosedDummy(9L),
MeetingResponse.studyActiveDummy(10L)
)
homeFacade.getAllMeetings(new MeetingParamRequest(user.getPlaygroundId(), page, take, category))
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.sopt.app.presentation.home;

public record MeetingParamRequest(
Long playgroundId,
int page,
int take,
String category
) {

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.app.presentation.home;
package org.sopt.app.presentation.home.response;

import lombok.*;

Expand Down
Loading