Skip to content

Commit

Permalink
feat : 미션 인증 상태 조회 api 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
seungueonn committed Dec 20, 2023
1 parent 603eef3 commit 5c5a9e7
Show file tree
Hide file tree
Showing 11 changed files with 213 additions and 48 deletions.
7 changes: 7 additions & 0 deletions src/docs/asciidoc/MissionArchive-API.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,10 @@ operation::mission-archive-controller-test/미션_인증물_좋아요[snippets='

---


[[MissionArchive-미션상태조회]]
== 미션 상태 조회
operation::mission-archive-controller-test/미션_상태_조회[snippets='http-request,path-parameters,request-fields,http-response,response-fields']

---

2 changes: 2 additions & 0 deletions src/main/java/com/moing/backend/BackendApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;

@EnableAsync
@EnableFeignClients
@SpringBootApplication
@EnableJpaAuditing
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.moing.backend.domain.missionArchive.application.dto.res;

import lombok.*;

@ToString
@AllArgsConstructor
@Builder
@NoArgsConstructor
@Getter
public class MyArchiveStatus {
private boolean end;
private String status;
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,15 @@ public MissionArchiveStatusRes getMissionDoneStatus(Long missionId) {
}


public MyArchiveStatus getMissionArchiveStatus(String userSocialId,Long missionId , Long teamId) {

Long memberId = memberGetService.getMemberBySocialId(userSocialId).getMemberId();

return missionArchiveQueryService.findMissionStatusById(memberId, missionId, teamId);

}




}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.moing.backend.domain.mission.application.dto.res.SingleMissionBoardRes;
import com.moing.backend.domain.mission.domain.entity.constant.MissionStatus;
import com.moing.backend.domain.missionArchive.application.dto.res.MissionArchivePhotoRes;
import com.moing.backend.domain.missionArchive.application.dto.res.MyArchiveStatus;
import com.moing.backend.domain.missionArchive.domain.entity.MissionArchive;
import com.moing.backend.domain.missionArchive.domain.entity.MissionArchiveStatus;
import org.springframework.stereotype.Repository;
Expand Down Expand Up @@ -35,4 +36,7 @@ public interface MissionArchiveCustomRepository {

Optional<List<Member>> findHavingRemainMissionsByQuerydsl() ;


MyArchiveStatus findMissionStatusById(Long memberId, Long missionId, Long teamId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.moing.backend.domain.mission.domain.entity.constant.MissionType;
import com.moing.backend.domain.mission.domain.entity.constant.MissionWay;
import com.moing.backend.domain.missionArchive.application.dto.res.MissionArchivePhotoRes;
import com.moing.backend.domain.missionArchive.application.dto.res.MyArchiveStatus;
import com.moing.backend.domain.missionArchive.domain.entity.MissionArchive;
import com.moing.backend.domain.missionArchive.domain.entity.MissionArchiveStatus;
import com.moing.backend.domain.missionArchive.domain.entity.QMissionArchive;
Expand All @@ -20,6 +21,7 @@
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.core.types.dsl.CaseBuilder;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQuery;
Expand Down Expand Up @@ -454,6 +456,32 @@ public Optional<List<Member>> findHavingRemainMissionsByQuerydsl() {

}

@Override
public MyArchiveStatus findMissionStatusById(Long memberId, Long missionId, Long teamId) {

return queryFactory
.select(Projections.constructor(MyArchiveStatus.class,
mission.status.eq(MissionStatus.END),
new CaseBuilder()
.when(mission.status.eq(MissionStatus.WAIT).or(mission.status.eq(MissionStatus.ONGOING)))
.then(missionArchive.status.stringValue().coalesce(mission.status.stringValue()))
.otherwise(missionArchive.status.stringValue().coalesce("FAIL"))

)).distinct()
.from(mission)
.leftJoin(missionArchive)
.on(
missionArchive.mission.eq(mission),
missionArchive.member.memberId.eq(memberId))
.where(
mission.team.teamId.eq(teamId),
mission.id.eq(missionId)
)
.fetchFirst();

}




}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.moing.backend.domain.mission.domain.entity.constant.MissionStatus;
import com.moing.backend.domain.mission.domain.repository.MissionRepository;
import com.moing.backend.domain.missionArchive.application.dto.res.MissionArchivePhotoRes;
import com.moing.backend.domain.missionArchive.application.dto.res.MyArchiveStatus;
import com.moing.backend.domain.missionArchive.domain.entity.MissionArchive;
import com.moing.backend.domain.missionArchive.domain.repository.MissionArchiveRepository;
import com.moing.backend.domain.missionArchive.exception.NotFoundMissionArchiveException;
Expand Down Expand Up @@ -129,6 +130,10 @@ public boolean findDoneTodayArchive(Long memberId, Long missionId) {
return missionArchiveRepository.findMyArchivesToday(memberId, missionId);
}

public MyArchiveStatus findMissionStatusById(Long memberId, Long missionId, Long teamId) {
return missionArchiveRepository.findMissionStatusById(memberId, missionId, teamId);
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -25,36 +25,6 @@ public class MissionArchiveScheduleQueryService {
public List<Member> getRemainMissionPeople() {
return missionArchiveRepository.findHavingRemainMissionsByQuerydsl().orElseThrow();

// return Optional.of(maps.stream()
// .map(map -> {
// Object memberIdObject = map.get("memberId");
// Long memberId = ((BigInteger) memberIdObject).longValue();
//
// Object fcmObject = map.get("fcmToken");
// String fcmToken = fcmObject.toString();
//
// return MemberIdAndToken.builder()
// .fcmToken(fcmToken)
// .memberId(memberId)
// .build();
// })
// .collect(Collectors.toList()));

// return null;

// return maps.stream()
// .map(map -> {
// String fcmToken = Optional.ofNullable(map.get("fcmToken")).map(Object::toString).orElse("undef");
// Long memberId = map.get("memberId");
//
// return MemberIdAndToken.builder()
// .fcmToken(fcmToken)
// .memberId(memberId)
// .build();
//
// })
// .collect(Collectors.toList());

}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@
import com.moing.backend.domain.member.domain.entity.Member;
import com.moing.backend.domain.mission.application.dto.res.GatherRepeatMissionRes;
import com.moing.backend.domain.missionArchive.application.dto.req.MissionArchiveReq;
import com.moing.backend.domain.missionArchive.application.dto.res.MissionArchiveRes;
import com.moing.backend.domain.missionArchive.application.dto.res.MissionArchiveStatusRes;
import com.moing.backend.domain.missionArchive.application.dto.res.MyMissionArchiveRes;
import com.moing.backend.domain.missionArchive.application.dto.res.PersonalArchiveRes;
import com.moing.backend.domain.missionArchive.application.dto.res.*;
import com.moing.backend.domain.missionArchive.application.service.*;


Expand Down Expand Up @@ -152,4 +149,13 @@ public ResponseEntity<SuccessResponse<MissionArchiveStatusRes>> getMyMissionDone
}


@GetMapping("/mission-status")
public ResponseEntity<SuccessResponse<MyArchiveStatus>> getMyMissionStatus(@AuthenticationPrincipal User user,
@PathVariable("teamId") Long teamId,
@PathVariable("missionId") Long missionId) {
return ResponseEntity.ok(SuccessResponse.create(MISSION_ARCHIVE_PEOPLE_STATUS_SUCCESS.getMessage(), this.missionArchiveReadUseCase.getMissionArchiveStatus(user.getSocialId(), missionId,teamId)));
}



}
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
//package com.moing.backend.domain.missionArchive.domain.repository;
//
//import com.moing.backend.domain.history.application.dto.response.MemberIdAndToken;
//import com.moing.backend.domain.member.domain.entity.Member;
//import com.moing.backend.domain.mission.application.dto.res.FinishMissionBoardRes;
//import com.moing.backend.domain.mission.application.dto.res.SingleMissionBoardRes;
//import com.moing.backend.domain.mission.application.service.MissionRemindAlarmUseCase;
//import com.moing.backend.domain.mission.domain.entity.Mission;
//import com.moing.backend.domain.mission.domain.entity.constant.MissionStatus;
//import com.moing.backend.domain.mission.domain.repository.MissionRepository;
//import com.moing.backend.domain.missionArchive.application.dto.req.MissionArchiveReq;
//import com.moing.backend.domain.missionArchive.application.dto.res.MissionArchiveRes;
//import com.moing.backend.domain.missionArchive.application.dto.res.MyArchiveStatus;
//import com.moing.backend.domain.missionArchive.application.dto.res.PersonalArchiveRes;
//import com.moing.backend.domain.missionArchive.application.mapper.MissionArchiveMapper;
//import com.moing.backend.domain.missionArchive.application.service.MissionArchiveCreateUseCase;
//import com.moing.backend.domain.missionArchive.application.service.MissionArchiveReadUseCase;
//import com.moing.backend.domain.missionArchive.domain.entity.MissionArchive;
//import com.moing.backend.domain.missionArchive.domain.service.MissionArchiveScheduleQueryService;
//import com.querydsl.jpa.impl.JPAQueryFactory;
//import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -37,19 +47,13 @@
// @Autowired
// MissionArchiveScheduleQueryService missionArchiveScheduleQueryService;
//
// @Autowired
// MissionArchiveCreateUseCase missionArchiveCreateUseCase;
//
// @Test
// void findPeopleRemainMission() {
// @Autowired
// MissionArchiveReadUseCase missionArchiveReadUseCase;
//
// //System.out.println("!!!"+ missionArchiveRepository.findHavingRemainMissions().get().size());
//
// List<MemberIdAndToken> remainMissionPeople = missionArchiveScheduleQueryService.getRemainMissionPeople().orElseThrow();
// for (MemberIdAndToken remainMissionPerson : remainMissionPeople) {
// System.out.println("!!"+remainMissionPerson.getFcmToken() + " " + remainMissionPerson.getMemberId());
//
// }
// missionRemindAlarmUseCase.sendRemindMissionAlarm();
// }
//
//
// @Test
Expand All @@ -70,4 +74,78 @@
// System.out.println(singleMissionBoardRes.getTitle());
// }
// }
//
// @Test
// void findMissionStatus() {
// MissionArchive missionArchive = missionArchiveRepository.findById(198L).orElseThrow();
// MissionArchiveRes missionArchiveRes = MissionArchiveMapper.mapToMissionArchiveRes(missionArchive,33L);
// System.out.println(missionArchiveRes.toString());
// }
//
// @Test
// void createMissionArchive() {
// System.out.println(missionArchiveCreateUseCase.createArchive("KAKAO@tester02", 211L, MissionArchiveReq.builder()
// .status("SKIP")
// .archive("hihi")
// .build()));
//
// System.out.println();
//
//
// }
//
//
// @Test
// void findRemainPeople() {
//
// List<Member> members = missionRepository.findRepeatMissionPeopleByStatus(MissionStatus.WAIT).orElseThrow();
// for (Member member : members) {
// System.out.println(member.getNickName());
// } }
//
//// @Test
//// void report() {
////
//// reportCreateUseCase.createReport("KAKAO@tester02", 550L, "MISSION");
////
//// List<Long> teams = new ArrayList<>();
//// teams.add(48L);
//// List<MissionArchivePhotoRes> top5ArchivesByTeam = missionArchiveRepository.findTop5ArchivesByTeam(teams).orElseThrow();
////
//// System.out.println(top5ArchivesByTeam.get(0).getPhoto().get(0).toString());
////
//// }
//
//
// @Test
// void catHeartList() {
//
// List<PersonalArchiveRes> personalArchive = missionArchiveReadUseCase.getPersonalArchive("[email protected]", 234L);
// for (PersonalArchiveRes personalArchiveRes : personalArchive) {
// System.out.println(personalArchiveRes);
// }
// }
//
// @Test
// void finishiMissions() {
// List<FinishMissionBoardRes> finishMissionBoardResList = missionArchiveRepository.findFinishMissionsByStatus(33L, 48L).orElseThrow();
// for (FinishMissionBoardRes finishMissionBoardRes : finishMissionBoardResList) {
// System.out.println(finishMissionBoardRes.toString());
// }
// }
//
// @Test
// void finishArchives() {
// List<MissionArchive> missionArchives = missionArchiveRepository.findMyArchives(33L, 323L).orElseThrow();
// for (MissionArchive missionArchive : missionArchives) {
// System.out.println(missionArchive.toString());
// }
// }
//
// @Test
// void isstatus() {
//
// MyArchiveStatus missionStatusById = missionArchiveRepository.findMissionStatusById(51L, 323L, 48L);
// System.out.println(missionStatusById);
// }
//}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@
import com.moing.backend.config.CommonControllerTest;
import com.moing.backend.domain.missionArchive.application.dto.req.MissionArchiveHeartReq;
import com.moing.backend.domain.missionArchive.application.dto.req.MissionArchiveReq;
import com.moing.backend.domain.missionArchive.application.dto.res.MissionArchiveRes;
import com.moing.backend.domain.missionArchive.application.dto.res.MissionArchiveStatusRes;
import com.moing.backend.domain.missionArchive.application.dto.res.MyMissionArchiveRes;
import com.moing.backend.domain.missionArchive.application.dto.res.PersonalArchiveRes;
import com.moing.backend.domain.missionArchive.application.dto.res.*;
import com.moing.backend.domain.missionArchive.application.service.*;
import com.moing.backend.domain.missionArchive.presentation.MissionArchiveController;
import com.moing.backend.domain.missionHeart.application.dto.MissionHeartRes;
Expand Down Expand Up @@ -497,6 +494,52 @@ public class MissionArchiveControllerTest extends CommonControllerTest {
}


@Test
public void 미션_상태_조회() throws Exception {
//given

MyArchiveStatus output = MyArchiveStatus.builder()
.end(Boolean.TRUE)
.status("WAIT/ONGOING/COMPLETE/SKIP/FAIL")
.build();

given(missionArchiveReadUseCase.getMissionArchiveStatus(any(),any(),any())).willReturn(output);

Long teamId = 1L;
Long missionId = 1L;
//when
ResultActions actions = mockMvc.perform(RestDocumentationRequestBuilders.
get("/api/team/{teamId}/missions/{missionId}/archive/mission-status",teamId,missionId)
.header("Authorization", "Bearer ACCESS_TOKEN")
.contentType(MediaType.APPLICATION_JSON)

);

//then
actions
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(
restDocs.document(
requestHeaders(
headerWithName("Authorization").description("접근 토큰")
),
pathParameters(
parameterWithName("teamId").description("팀 아이디"),
parameterWithName("missionId").description("미션 아이디")
),
responseFields(
fieldWithPath("isSuccess").description("true"),
fieldWithPath("message").description(MISSION_ARCHIVE_PEOPLE_STATUS_SUCCESS.getMessage()),
fieldWithPath("data.end").description("미션 종료 여부"),
fieldWithPath("data.status").description("미션 인증 상태 ")
)
)
)
.andReturn();

}





Expand Down

0 comments on commit 5c5a9e7

Please sign in to comment.