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
@@ -1,8 +1,9 @@
package com.somemore.center.repository;

import com.somemore.center.domain.NEWCenter;
import com.somemore.center.repository.record.CenterOverviewInfo;
import com.somemore.center.repository.record.CenterProfileDto;

import java.util.List;
import java.util.Optional;
import java.util.UUID;

Expand All @@ -15,4 +16,12 @@ public interface NEWCenterRepository {
Optional<NEWCenter> findByUserId(UUID userId);

Optional<CenterProfileDto> findCenterProfileById(UUID centerId);

boolean existsById(UUID id);

default boolean doesNotExistById(UUID id) {
return !existsById(id);
}

List<CenterOverviewInfo> findOverviewInfosByIds(List<UUID> ids);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.somemore.center.domain.NEWCenter;
import com.somemore.center.domain.QNEWCenter;
import com.somemore.center.repository.record.CenterOverviewInfo;
import com.somemore.center.repository.record.CenterProfileDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import com.somemore.user.domain.QUserCommonAttribute;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

@Repository("newCenterRepository")
@RequiredArgsConstructor
Expand All @@ -20,6 +22,7 @@ public class NEWCenterRepositoryImpl implements NEWCenterRepository {
private final JPAQueryFactory queryFactory;

private static final QNEWCenter center = QNEWCenter.nEWCenter;
private static final QUserCommonAttribute userCommonAttribute = QUserCommonAttribute.userCommonAttribute;

@Override
public NEWCenter save(NEWCenter center) {
Expand All @@ -31,7 +34,7 @@ public Optional<NEWCenter> findById(UUID id) {
return Optional.ofNullable(
queryFactory.selectFrom(center)
.where(
center.id.eq(id),
idEq(id),
isNotDeleted()
)
.fetchOne()
Expand Down Expand Up @@ -60,13 +63,52 @@ public Optional<CenterProfileDto> findCenterProfileById(UUID centerId) {
center.homepageUrl))
.from(center)
.where(
center.id.eq(centerId),
idEq(centerId),
isNotDeleted()
)
.fetchOne()
);
}

@Override
public boolean existsById(UUID id) {
return queryFactory
.selectOne()
.from(center)
.where(
idEq(id),
isNotDeleted()
)
.fetchFirst() != null;
}

@Override
public List<CenterOverviewInfo> findOverviewInfosByIds(List<UUID> ids) {
return queryFactory
.select(Projections.constructor(
CenterOverviewInfo.class,
center.id,
userCommonAttribute.name,
userCommonAttribute.imgUrl
))
.from(center)
.join(userCommonAttribute)
.on(userCommonAttribute.userId.eq(center.userId))
.where(
idIn(ids),
isNotDeleted()
)
.fetch();
}

private static BooleanExpression idIn(List<UUID> ids) {
return center.id.in(ids);
}

private BooleanExpression idEq(UUID id) {
return center.id.eq(id);
}

private BooleanExpression isNotDeleted() {
return center.deleted.isFalse();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.somemore.domains.center.repository.mapper;
package com.somemore.center.repository.record;


import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package com.somemore.center.service;

import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER;

import com.somemore.center.domain.NEWCenter;
import com.somemore.center.dto.response.CenterProfileResponseDto;
import com.somemore.center.repository.NEWCenterRepository;
import com.somemore.center.repository.record.CenterOverviewInfo;
import com.somemore.center.repository.record.CenterProfileDto;
import com.somemore.center.usecase.NEWCenterQueryUseCase;
import com.somemore.domains.center.dto.response.PreferItemResponseDto;
Expand All @@ -11,13 +14,12 @@
import com.somemore.global.exception.NoSuchElementException;
import com.somemore.user.repository.usercommonattribute.record.UserProfileDto;
import com.somemore.user.usecase.UserQueryUseCase;
import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.UUID;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
Expand All @@ -44,12 +46,25 @@ public CenterProfileResponseDto getCenterProfileById(UUID centerId) {
CenterProfileDto centerProfileDto = centerRepository.findCenterProfileById(centerId)
.orElseThrow(() -> new NoSuchElementException(ExceptionMessage.NOT_EXISTS_CENTER));

UserProfileDto userProfileDto = userQueryUseCase.getUserProfileByUserId(centerProfileDto.userId());
UserProfileDto userProfileDto = userQueryUseCase.getUserProfileByUserId(
centerProfileDto.userId());

List<PreferItemResponseDto> preferItems = preferItemQueryUseCase.getPreferItemDtosByCenterId(centerProfileDto.id());
List<PreferItemResponseDto> preferItems = preferItemQueryUseCase.getPreferItemDtosByCenterId(
centerProfileDto.id());

return CenterProfileResponseDto.of(centerProfileDto, userProfileDto, preferItems);
}

@Override
public void validateCenterExists(UUID id) {
if (centerRepository.doesNotExistById(id)) {
throw new NoSuchElementException(NOT_EXISTS_CENTER);
}
}

@Override
public List<CenterOverviewInfo> getCenterOverviewsByIds(List<UUID> ids) {
return centerRepository.findOverviewInfosByIds(ids);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

import com.somemore.center.domain.NEWCenter;
import com.somemore.center.dto.response.CenterProfileResponseDto;

import com.somemore.center.repository.record.CenterOverviewInfo;
import java.util.List;
import java.util.UUID;

public interface NEWCenterQueryUseCase {
Expand All @@ -12,4 +13,8 @@ public interface NEWCenterQueryUseCase {
UUID getIdByUserId(UUID userId);

CenterProfileResponseDto getCenterProfileById(UUID centerId);

void validateCenterExists(UUID id);

List<CenterOverviewInfo> getCenterOverviewsByIds(List<UUID> ids);
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.somemore.domains.center.repository.center;

import com.somemore.center.repository.record.CenterOverviewInfo;
import com.somemore.domains.center.domain.Center;
import com.somemore.domains.center.repository.mapper.CenterOverviewInfo;

import java.util.List;
import java.util.Optional;
import java.util.UUID;

public interface CenterRepository {

Center save(Center center);

boolean existsById(UUID id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@
import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.somemore.center.repository.record.CenterOverviewInfo;
import com.somemore.domains.center.domain.Center;
import com.somemore.domains.center.domain.QCenter;
import com.somemore.domains.center.repository.mapper.CenterOverviewInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

@RequiredArgsConstructor
@Repository("centerRepository")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,44 +1,22 @@
package com.somemore.domains.center.service.query;

import com.somemore.domains.center.domain.Center;
import com.somemore.domains.center.dto.response.CenterProfileResponseDto;
import com.somemore.domains.center.dto.response.PreferItemResponseDto;
import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER;

import com.somemore.domains.center.repository.center.CenterRepository;
import com.somemore.domains.center.repository.mapper.CenterOverviewInfo;
import com.somemore.domains.center.usecase.query.CenterQueryUseCase;
import com.somemore.domains.center.usecase.query.PreferItemQueryUseCase;
import com.somemore.global.exception.BadRequestException;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.UUID;

import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER;

@RequiredArgsConstructor
@Transactional(readOnly = true)
@Service
public class CenterQueryService implements CenterQueryUseCase {

private final PreferItemQueryUseCase preferItemQueryUseCase;
private final CenterRepository centerRepository;

@Override
public CenterProfileResponseDto getCenterProfileByCenterId(UUID centerId) {

Center center = getCenterById(centerId);
List<PreferItemResponseDto> preferItemDtos = preferItemQueryUseCase.getPreferItemDtosByCenterId(centerId);

return CenterProfileResponseDto.of(center, preferItemDtos);
}

@Override
public List<CenterOverviewInfo> getCenterOverviewsByIds(List<UUID> centerIds) {
return centerRepository.findCenterOverviewsByIds(centerIds);
}

@Override
public void validateCenterExists(UUID id) {
if (centerRepository.doesNotExistById(id)) {
Expand All @@ -57,8 +35,4 @@ public String getNameById(UUID id) {
return name;
}

private Center getCenterById(UUID centerId) {
return centerRepository.findCenterById(centerId)
.orElseThrow(() -> new BadRequestException(NOT_EXISTS_CENTER.getMessage()));
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
package com.somemore.domains.center.usecase.query;

import com.somemore.domains.center.dto.response.CenterProfileResponseDto;
import com.somemore.domains.center.repository.mapper.CenterOverviewInfo;

import java.util.List;
import java.util.UUID;

public interface CenterQueryUseCase {
CenterProfileResponseDto getCenterProfileByCenterId(UUID centerId);

List<CenterOverviewInfo> getCenterOverviewsByIds(List<UUID> centerIds);

void validateCenterExists(UUID centerId);

String getNameById(UUID id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
import com.somemore.domains.interestcenter.dto.response.RegisterInterestCenterResponseDto;
import com.somemore.domains.interestcenter.usecase.CancelInterestCenterUseCase;
import com.somemore.domains.interestcenter.usecase.RegisterInterestCenterUseCase;
import com.somemore.global.auth.annotation.CurrentUser;
import com.somemore.global.auth.annotation.RoleId;
import com.somemore.global.common.response.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.annotation.Secured;
import org.springframework.web.bind.annotation.DeleteMapping;
Expand All @@ -17,8 +18,6 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

@RequiredArgsConstructor
@RestController
@Tag(name = "Interest Center Command API", description = "관심 기관의 등록과 취소 API를 제공합니다")
Expand All @@ -31,10 +30,11 @@ public class InterestCenterCommandApiController {
@Operation(summary = "관심기관 등록 API")
@PostMapping("/api/interest-center")
public ApiResponse<RegisterInterestCenterResponseDto> registerInterestCenter(
@CurrentUser UUID volunteerId,
@RoleId UUID volunteerId,
@Valid @RequestBody RegisterInterestCenterRequestDto requestDto) {

RegisterInterestCenterResponseDto responseDto = registerInterestCenterUseCase.registerInterestCenter(volunteerId, requestDto);
RegisterInterestCenterResponseDto responseDto = registerInterestCenterUseCase.registerInterestCenter(
volunteerId, requestDto);

return ApiResponse.ok(200, responseDto, "관심 기관 등록 성공");
}
Expand All @@ -43,7 +43,7 @@ public ApiResponse<RegisterInterestCenterResponseDto> registerInterestCenter(
@Operation(summary = "관심기관 취소 API")
@DeleteMapping("/api/interest-center/{centerId}")
public ApiResponse<String> deleteInterestCenter(
@CurrentUser UUID volunteerId,
@RoleId UUID volunteerId,
@PathVariable UUID centerId) {

cancelInterestCenterUseCase.cancelInterestCenter(volunteerId, centerId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,16 @@

import com.somemore.domains.interestcenter.dto.response.InterestCentersResponseDto;
import com.somemore.domains.interestcenter.usecase.InterestCenterQueryUseCase;
import com.somemore.global.auth.annotation.CurrentUser;
import com.somemore.global.auth.annotation.RoleId;
import com.somemore.global.common.response.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.UUID;

@RequiredArgsConstructor
@RestController
@Tag(name = "Interest Center Query API", description = "관심 기관의 조회 API를 제공합니다")
Expand All @@ -23,7 +22,7 @@ public class InterestCenterQueryApiController {
@Operation(summary = "관심기관 목록 조회 API")
@GetMapping("/api/interest-centers")
public ApiResponse<List<InterestCentersResponseDto>> getInterestCenters(
@CurrentUser UUID volunteerId) {
@RoleId UUID volunteerId) {

List<InterestCentersResponseDto> responseDtos = interestCenterQueryUseCase.getInterestCenters(
volunteerId);
Expand Down
Loading