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/#67/스페이스 가입 view api #72

Merged
merged 2 commits into from
Aug 11, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
2 changes: 1 addition & 1 deletion src/main/java/space/space_spring/dao/SpaceDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import space.space_spring.dto.space.GetSpaceJoinDto;
import space.space_spring.entity.Space;

@Repository
Expand All @@ -22,5 +23,4 @@ public Space saveSpace(String spaceName, String spaceImgUrl) {
public Space findSpaceBySpaceId(Long spaceId) {
return em.find(Space.class, spaceId);
}

}
7 changes: 7 additions & 0 deletions src/main/java/space/space_spring/dao/UserSpaceDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,11 @@ private List<UserInfoInSpace> mapToUserInfoInSpace(List<Object[]> results) {
return userInfoInSpaceList;
}

public int calculateSpaceMemberNum(Space space) {
String jpql = "SELECT COUNT(us) FROM UserSpace us WHERE us.space = :space AND us.status = 'ACTIVE'";
TypedQuery<Long> query = em.createQuery(jpql, Long.class);
query.setParameter("space", space);

return query.getSingleResult().intValue();
}
}
29 changes: 29 additions & 0 deletions src/main/java/space/space_spring/dto/space/GetSpaceJoinDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package space.space_spring.dto.space;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.time.LocalDateTime;

@Getter
@AllArgsConstructor
public class GetSpaceJoinDto {

private String spaceProfileImg;

private String spaceName;

private LocalDateTime createdAt;
Comment on lines +12 to +16
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아래 static class Response 와 중복되는 필드를 갖는데 어떤 의미인지 궁금합니다

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Space 엔티티의 필드로부터 스페이스 이름, 썸네일 url, LocalDateTime 형태의 스페이스 생성일 이렇게 3개의 정보를 얻을 수 있는데, response를 구성하기 위해서는 추가적으로 스페이스 가입 멤버 수가 필요하고 또한 스페이스 생성일을 format 처리도 필요해서 dto의 필드와 dto 내부 Response 클래스의 필드를 구분하였습니다!!


@Getter
@AllArgsConstructor
public static class Response {
private String spaceProfileImg;

private String spaceName;

private String createdAt; // 스페이스 개설일의 정보를 yyyy년 mm월 dd일 형식으로 변환한 문자열

private int memberNum;
}
}
31 changes: 31 additions & 0 deletions src/main/java/space/space_spring/service/SpaceService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@
import space.space_spring.dao.SpaceDao;
import space.space_spring.dao.UserDao;
import space.space_spring.dao.UserSpaceDao;
import space.space_spring.dto.space.GetSpaceJoinDto;
import space.space_spring.dto.space.response.GetUserInfoBySpaceResponse;
import space.space_spring.entity.Space;
import space.space_spring.entity.User;
import space.space_spring.entity.UserSpace;
import space.space_spring.util.space.SpaceUtils;

import java.time.format.DateTimeFormatter;


@Service
@RequiredArgsConstructor
Expand Down Expand Up @@ -43,4 +46,32 @@ public GetUserInfoBySpaceResponse findUserInfoBySpace(Long spaceId) {
// TODO 2. 스페이스의 모든 유저 정보 return
return new GetUserInfoBySpaceResponse(userSpaceDao.findUserInfoInSpace(spaceBySpaceId));
}

@Transactional
public GetSpaceJoinDto.Response findSpaceJoin(Long spaceId) {
// TODO 1. spaceId로 Space find
Space spaceBySpaceId = spaceUtils.findSpaceBySpaceId(spaceId);

// TODO 2. Space 엔티티에서 썸네일 이미지, 이름, 생성일 데이터 get
GetSpaceJoinDto getSpaceJoinDto = new GetSpaceJoinDto(
spaceBySpaceId.getSpaceProfileImg(),
spaceBySpaceId.getSpaceName(),
spaceBySpaceId.getCreatedAt()
);

// TODO 3. 해당 스페이스의 멤버 수 get
int memberNum = userSpaceDao.calculateSpaceMemberNum(spaceBySpaceId);

// TODO 4. 스페이스 생성일 형식 'yyyy년 mm월 dd일' 로 변경
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일");
String spaceCreatedDate = getSpaceJoinDto.getCreatedAt().format(formatter);

// TODO 5. return
return new GetSpaceJoinDto.Response(
getSpaceJoinDto.getSpaceProfileImg(),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p2: spaceBySpaceId.getSpaceProfileImg()를 바로 넘기지 않고 dto로 한 번 래핑하신 이유가 있을까요??

Copy link
Collaborator Author

@seongjunnoh seongjunnoh Aug 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Space 엔티티의 필드로부터 스페이스 이름, 썸네일 url, LocalDateTime 형태의 스페이스 생성일 이렇게 3개의 정보를 얻을 수 있는데, response를 구성하기 위해서는 추가적으로 스페이스 가입 멤버 수가 필요하고 또한 스페이스 생성일을 format 처리도 필요해서 dto의 필드와 dto 내부 Response 클래스의 필드를 구분하였습니다!!
따라서 Space 엔티티에서 얻은 spaceProfileImg 정보를 dto의 필드값으로 가지고 있는 상태여서, return 타입을 구성할 때 dto의 spaceProfileImg 를 사용하였습니다

getSpaceJoinDto.getSpaceName(),
spaceCreatedDate,
memberNum
);
}
}