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

Feature/9 기관 프로필 조회 기능 구현 #32

Merged
merged 20 commits into from
Nov 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
6c708a3
feat: 예외 메시지 상수를 enum으로 관리하도록 개선
7zrv Nov 22, 2024
e708f74
feat: 선호물품 등록 기능 구현
7zrv Nov 22, 2024
7006605
feat: 기관 존재 여부 검증 기능 추가
7zrv Nov 22, 2024
c9dbfb6
feat: 기관 프로필 조회 기능 구현
7zrv Nov 23, 2024
6344643
Merge branch 'main' into feature/9-get-center-prefer-item
7zrv Nov 23, 2024
32d7f18
chore: sonar 커버리지 설정 변경
7zrv Nov 23, 2024
f03ebf6
Merge branch 'main' into feature/9-get-center-prefer-item
7zrv Nov 23, 2024
20854da
chore: 파일 마지막 라인에 개행 추가
7zrv Nov 24, 2024
10130f2
Merge branch 'main' into feature/9-get-center-prefer-item
7zrv Nov 24, 2024
e8db6e0
Fix: 코드 리뷰 사항 반영
7zrv Nov 24, 2024
6bf6af5
feat: 예외 메시지 상수를 enum으로 관리하도록 개선
7zrv Nov 22, 2024
e032760
feat: 선호물품 등록 기능 구현
7zrv Nov 22, 2024
dbcea2d
feat: 기관 존재 여부 검증 기능 추가
7zrv Nov 22, 2024
84a0473
feat: 기관 프로필 조회 기능 구현
7zrv Nov 23, 2024
ccceed4
chore: sonar 커버리지 설정 변경
7zrv Nov 23, 2024
ddaa78d
chore: 파일 마지막 라인에 개행 추가
7zrv Nov 24, 2024
0003089
Fix: 코드 리뷰 사항 반영
7zrv Nov 24, 2024
e2aa112
Merge remote-tracking branch 'origin/feature/9-get-center-prefer-item…
7zrv Nov 24, 2024
038d453
Refactor: 코드 리뷰 사항 반영
7zrv Nov 25, 2024
22ff39a
Merge branch 'main' into feature/9-get-center-prefer-item
7zrv Nov 25, 2024
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
66 changes: 66 additions & 0 deletions src/main/java/com/somemore/center/domain/Center.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package com.somemore.center.domain;

import com.somemore.global.common.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

import java.util.UUID;


@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
public class Center extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.UUID)
@Column(nullable = false, length = 16)
private UUID id;

@Column(name = "name", nullable = false)
private String name;

@Column(name = "contact_number", nullable = false)
private String contactNumber;

@Column(name = "img_url", nullable = false)
private String imgUrl;

@Column(name = "introduce", columnDefinition = "TEXT", nullable = false)
private String introduce;

@Column(name = "homepage_link", nullable = false)
private String homepageLink;

@Column(name = "account_id", nullable = false)
private String accountId;

@Column(name = "account_pw", nullable = false)
private String accountPw;


@Builder
private Center(String name, String contactNumber, String imgUrl, String introduce, String homepageLink, String accountId, String accountPw) {

this.name = name;
this.contactNumber = contactNumber;
this.imgUrl = imgUrl;
this.introduce = introduce;
this.homepageLink = homepageLink;
this.accountId = accountId;
this.accountPw = accountPw;
}

public static Center create(String name, String contactNumber, String imgUrl, String introduce, String homepageLink, String accountId, String accountPw) {
return Center.builder()
.name(name)
.contactNumber(contactNumber)
.imgUrl(imgUrl)
.introduce(introduce)
.homepageLink(homepageLink)
.accountId(accountId)
.accountPw(accountPw)
.build();
}

}
38 changes: 38 additions & 0 deletions src/main/java/com/somemore/center/domain/PreferItem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.somemore.center.domain;

import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.UUID;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
public class PreferItem {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "center_id", nullable = false)
private UUID centerId;

@Column(name = "item_name", nullable = false)
private String itemName;

@Builder
private PreferItem(UUID centerId, String itemName) {
this.centerId = centerId;
this.itemName = itemName;
}

public static PreferItem create(UUID centerId, String itemName) {
return PreferItem.builder()
.centerId(centerId)
.itemName(itemName)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.somemore.center.dto.request;


import com.somemore.center.domain.PreferItem;

import java.util.UUID;


public record PreferItemCreateRequestDto(

UUID centerId,
String itemName

) {
public PreferItem createPreferItem() {
return PreferItem.create(centerId, itemName);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.somemore.center.dto.response;

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.somemore.center.domain.Center;
import com.somemore.center.domain.PreferItem;
import lombok.Builder;

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

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
@Builder
public record CenterProfileResponseDto(
UUID centerId,
String name,
String contactNumber,
String imgUrl,
String introduce,
String homepageLink,
List<PreferItemResponseDto> preferItems
) {
public static CenterProfileResponseDto of(Center center, List<PreferItemResponseDto> preferItemDtos) {
return CenterProfileResponseDto.builder()
.centerId(center.getId())
.name(center.getName())
.contactNumber(center.getContactNumber())
.imgUrl(center.getImgUrl())
.introduce(center.getIntroduce())
.homepageLink(center.getHomepageLink())
.preferItems(preferItemDtos)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.somemore.center.dto.response;

import com.somemore.center.domain.PreferItem;
import lombok.Builder;

import java.util.UUID;

@Builder
public record PreferItemResponseDto (
Long id,
UUID centerId,
String itemName
){
public static PreferItemResponseDto from(PreferItem preferItem) {
return PreferItemResponseDto.builder()
.id(preferItem.getId())
.centerId(preferItem.getCenterId())
.itemName(preferItem.getItemName())
.build();
}
}
20 changes: 20 additions & 0 deletions src/main/java/com/somemore/center/repository/CenterRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.somemore.center.repository;

import com.somemore.center.domain.Center;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

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

@Repository
public interface CenterRepository extends JpaRepository<Center, UUID> {

boolean existsById(UUID id);

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

Optional<Center> findCenterById(UUID id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.somemore.center.repository;

import com.somemore.center.domain.PreferItem;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

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

@Repository
public interface PreferItemRepository extends JpaRepository<PreferItem, Long> {

List<PreferItem> findByCenterId(UUID centerId);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.somemore.center.service.command;

import com.somemore.center.dto.request.PreferItemCreateRequestDto;
import com.somemore.center.repository.PreferItemRepository;
import com.somemore.center.usecase.command.CreatePreferItemUseCase;
import com.somemore.center.usecase.query.CenterQueryUseCase;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@RequiredArgsConstructor
@Transactional
@Service
public class CreatePreferItemService implements CreatePreferItemUseCase {

private final CenterQueryUseCase centerQueryUseCase;
private final PreferItemRepository preferItemRepository;

@Override
public void createPreferItem(PreferItemCreateRequestDto requestDto) {

centerQueryUseCase.validateCenterExists(requestDto.centerId());

preferItemRepository.save(requestDto.createPreferItem());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.somemore.center.service.query;

import com.somemore.center.domain.Center;
import com.somemore.center.dto.response.CenterProfileResponseDto;
import com.somemore.center.dto.response.PreferItemResponseDto;
import com.somemore.center.repository.CenterRepository;
import com.somemore.center.usecase.query.CenterQueryUseCase;
import com.somemore.center.usecase.query.PreferItemQueryUseCase;
import com.somemore.global.exception.BadRequestException;
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 void validateCenterExists(UUID id) {
if (centerRepository.doesNotExistById(id)) {
throw new BadRequestException(NOT_EXISTS_CENTER.getMessage());
}
}

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
@@ -0,0 +1,38 @@
package com.somemore.center.service.query;

import com.somemore.center.domain.PreferItem;
import com.somemore.center.dto.response.PreferItemResponseDto;
import com.somemore.center.repository.PreferItemRepository;
import com.somemore.center.usecase.query.PreferItemQueryUseCase;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

@RequiredArgsConstructor
@Transactional(readOnly = true)
@Service
public class PreferItemQueryService implements PreferItemQueryUseCase {

private final PreferItemRepository preferItemRepository;

@Override
public List<PreferItemResponseDto> getPreferItemDtosByCenterId(UUID centerId) {
List<PreferItem> preferItems = getPreferItemsByCenterId(centerId);
return preferItemConvertToDtos(preferItems);
}

//프론트와 의논후 private으로 전환 예정
@Override
public List<PreferItem> getPreferItemsByCenterId(UUID centerId) {
return preferItemRepository.findByCenterId(centerId);
}

private static List<PreferItemResponseDto> preferItemConvertToDtos(List<PreferItem> preferItems) {
return preferItems.stream()
.map(PreferItemResponseDto::from)
.toList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.somemore.center.usecase.command;

import com.somemore.center.dto.request.PreferItemCreateRequestDto;

public interface CreatePreferItemUseCase {

void createPreferItem(PreferItemCreateRequestDto requestDto);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.somemore.center.usecase.query;

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

import java.util.UUID;

public interface CenterQueryUseCase {

CenterProfileResponseDto getCenterProfileByCenterId(UUID centerId);
void validateCenterExists(UUID centerId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.somemore.center.usecase.query;

import com.somemore.center.domain.PreferItem;
import com.somemore.center.dto.response.PreferItemResponseDto;

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

public interface PreferItemQueryUseCase {
List<PreferItemResponseDto> getPreferItemDtosByCenterId(UUID centerId);
List<PreferItem> getPreferItemsByCenterId(UUID centerId);
}
Loading