Skip to content
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package com.somemore.domains.center.controller;
package com.somemore.center.controller;

import com.somemore.domains.center.dto.request.PreferItemCreateRequestDto;
import com.somemore.domains.center.dto.response.PreferItemCreateResponseDto;
import com.somemore.domains.center.usecase.command.CreatePreferItemUseCase;
import com.somemore.domains.center.usecase.command.DeletePreferItemUseCase;
import com.somemore.global.auth.annotation.UserId;
import com.somemore.center.dto.request.PreferItemCreateRequestDto;
import com.somemore.center.dto.response.PreferItemCreateResponseDto;
import com.somemore.center.usecase.CreatePreferItemUseCase;
import com.somemore.center.usecase.DeletePreferItemUseCase;
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 @@ -18,8 +19,6 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

@RequiredArgsConstructor
@RestController
@RequestMapping("/api/preferItem")
Expand All @@ -31,10 +30,11 @@ public class PreferItemCommandApiController {

@Secured("ROLE_CENTER")
@Operation(summary = "기관 선호물품 등록 API")
@PostMapping()
@PostMapping
public ApiResponse<PreferItemCreateResponseDto> registerPreferItem(
@Valid @RequestBody PreferItemCreateRequestDto requestDto,
@UserId UUID centerId) {
@RoleId UUID centerId
) {

PreferItemCreateResponseDto responseDto = createPreferItemUseCase.createPreferItem(centerId,
requestDto);
Expand All @@ -45,7 +45,10 @@ public ApiResponse<PreferItemCreateResponseDto> registerPreferItem(
@Secured("ROLE_CENTER")
@Operation(summary = "기관 선호물품 삭제 API")
@DeleteMapping("/{preferItemId}")
public ApiResponse<String> deletePreferItem(@UserId UUID centerId, @PathVariable Long preferItemId) {
public ApiResponse<String> deletePreferItem(
@RoleId UUID centerId,
@PathVariable Long preferItemId
) {

deletePreferItemUseCase.deletePreferItem(centerId, preferItemId);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
package com.somemore.domains.center.domain;
package com.somemore.center.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.util.UUID;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.UUID;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package com.somemore.domains.center.dto.request;
package com.somemore.center.dto.request;

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.somemore.domains.center.domain.PreferItem;
import com.somemore.center.domain.PreferItem;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;

import java.util.UUID;

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
Expand All @@ -16,6 +15,7 @@ public record PreferItemCreateRequestDto(
String itemName

) {

public PreferItem toEntity(UUID centerId) {
return PreferItem.create(centerId, itemName);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.somemore.center.repository.record.CenterProfileDto;
import com.somemore.domains.center.dto.response.PreferItemResponseDto;
import com.somemore.user.repository.usercommonattribute.record.UserProfileDto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;

import java.util.List;
import java.util.UUID;
import lombok.Builder;

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
@Builder
Expand Down Expand Up @@ -39,7 +37,9 @@ public record CenterProfileResponseDto(
@Schema(description = "선호 물품 리스트")
List<PreferItemResponseDto> preferItems
) {
public static CenterProfileResponseDto of(CenterProfileDto centerProfileDto, UserProfileDto userProfileDto, List<PreferItemResponseDto> preferItems) {

public static CenterProfileResponseDto of(CenterProfileDto centerProfileDto,
UserProfileDto userProfileDto, List<PreferItemResponseDto> preferItems) {
return CenterProfileResponseDto.builder()
.id(centerProfileDto.id())
.userId(centerProfileDto.userId())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.somemore.domains.center.dto.response;
package com.somemore.center.dto.response;

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.somemore.domains.center.domain.PreferItem;
import com.somemore.center.domain.PreferItem;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;

import java.util.UUID;
import lombok.Builder;

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
@JsonNaming(SnakeCaseStrategy.class)
@Builder
public record PreferItemCreateResponseDto(
@Schema(description = "선호물품의 ID", example = "111")
Expand All @@ -18,6 +17,7 @@ public record PreferItemCreateResponseDto(
@Schema(description = "선호물품 이름", example = "어린이 도서")
String itemName
) {

public static PreferItemCreateResponseDto from(PreferItem preferItem) {
return PreferItemCreateResponseDto.builder()
.id(preferItem.getId())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.somemore.center.dto.response;

import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.somemore.center.domain.PreferItem;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.UUID;
import lombok.Builder;

@JsonNaming(SnakeCaseStrategy.class)
@Builder
public record PreferItemResponseDto(
@Schema(description = "선호 물품 ID", example = "1")
Long id,
@Schema(description = "기관 ID", example = "123e4567-e89b-12d3-a456-426614174000")
UUID centerId,
@Schema(description = "선호 물품명", example = "쌀20kg")
String itemName
) {

public static PreferItemResponseDto from(PreferItem preferItem) {
return PreferItemResponseDto.builder()
.id(preferItem.getId())
.centerId(preferItem.getCenterId())
.itemName(preferItem.getItemName())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.somemore.domains.center.repository.preferitem;

import com.somemore.domains.center.domain.PreferItem;
import org.springframework.data.jpa.repository.JpaRepository;
package com.somemore.center.repository.preferitem;

import com.somemore.center.domain.PreferItem;
import java.util.List;
import java.util.UUID;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PreferItemJpaRepository extends JpaRepository<PreferItem, Long> {

List<PreferItem> findByCenterId(UUID centerId);
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.somemore.domains.center.repository.preferitem;

import com.somemore.domains.center.domain.PreferItem;
import org.springframework.stereotype.Repository;
package com.somemore.center.repository.preferitem;

import com.somemore.center.domain.PreferItem;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import org.springframework.stereotype.Repository;

@Repository
public interface PreferItemRepository {

void save(PreferItem preferItem);

void deleteById(Long preferItemId);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.somemore.domains.center.repository.preferitem;

import com.somemore.domains.center.domain.PreferItem;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
package com.somemore.center.repository.preferitem;

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

@RequiredArgsConstructor
@Repository
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.somemore.center.service;

import com.somemore.center.domain.PreferItem;
import com.somemore.center.dto.request.PreferItemCreateRequestDto;
import com.somemore.center.dto.response.PreferItemCreateResponseDto;
import com.somemore.center.repository.preferitem.PreferItemRepository;
import com.somemore.center.usecase.CreatePreferItemUseCase;
import com.somemore.center.usecase.NEWCenterQueryUseCase;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

private final NEWCenterQueryUseCase centerQueryUseCase;
private final PreferItemRepository preferItemRepository;

@Override
public PreferItemCreateResponseDto createPreferItem(UUID centerId,
PreferItemCreateRequestDto requestDto) {

centerQueryUseCase.validateCenterExists(centerId);

PreferItem preferItem = requestDto.toEntity(centerId);
Copy link
Collaborator

Choose a reason for hiding this comment

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

dto.toEntity와 entity.from, entity.of를 구분하는 기준이 있으신가요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

이거 서진님이 작성하신 코드긴한데

저는 RequestDto -> Entity 는 무조건 Dto.toEntity를 사용하고
Entity -> ResponseDto 는 파라미터 개수에 따라 1개 from 2개이상 of를 사용하는 편이긴합니다.


preferItemRepository.save(preferItem);

return PreferItemCreateResponseDto.from(preferItem);
}

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

import com.somemore.domains.center.domain.PreferItem;
import com.somemore.domains.center.repository.preferitem.PreferItemRepository;
import com.somemore.domains.center.usecase.command.DeletePreferItemUseCase;
import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_PREFER_ITEM;
import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_PREFER_ITEM;

import com.somemore.center.domain.PreferItem;
import com.somemore.center.repository.preferitem.PreferItemRepository;
import com.somemore.center.usecase.DeletePreferItemUseCase;
import com.somemore.global.exception.BadRequestException;
import com.somemore.global.exception.NoSuchElementException;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.UUID;

import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_PREFER_ITEM;
import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_PREFER_ITEM;

@Transactional
@RequiredArgsConstructor
@Service
public class DeletePreferItemService implements DeletePreferItemUseCase {
Expand All @@ -21,7 +23,7 @@ public class DeletePreferItemService implements DeletePreferItemUseCase {
@Override
public void deletePreferItem(UUID centerId, Long preferItemId) {
PreferItem preferItem = preferItemRepository.findById(preferItemId)
.orElseThrow(() -> new BadRequestException(NOT_EXISTS_PREFER_ITEM));
.orElseThrow(() -> new NoSuchElementException(NOT_EXISTS_PREFER_ITEM));

validatePreferItemOwnership(centerId, preferItem);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@

import com.somemore.center.domain.NEWCenter;
import com.somemore.center.dto.response.CenterProfileResponseDto;
import com.somemore.center.dto.response.PreferItemResponseDto;
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;
import com.somemore.domains.center.usecase.query.PreferItemQueryUseCase;
import com.somemore.center.usecase.PreferItemQueryUseCase;
import com.somemore.global.exception.ExceptionMessage;
import com.somemore.global.exception.NoSuchElementException;
import com.somemore.user.repository.usercommonattribute.record.UserProfileDto;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
package com.somemore.domains.center.service.query;
package com.somemore.center.service;

import com.somemore.domains.center.domain.PreferItem;
import com.somemore.domains.center.dto.response.PreferItemResponseDto;
import com.somemore.domains.center.repository.preferitem.PreferItemRepository;
import com.somemore.domains.center.usecase.query.PreferItemQueryUseCase;
import com.somemore.center.domain.PreferItem;
import com.somemore.center.dto.response.PreferItemResponseDto;
import com.somemore.center.repository.preferitem.PreferItemRepository;
import com.somemore.center.usecase.PreferItemQueryUseCase;
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;

@RequiredArgsConstructor
@Transactional(readOnly = true)
@Service
Expand All @@ -30,7 +29,8 @@ public List<PreferItem> getPreferItemsByCenterId(UUID centerId) {
return preferItemRepository.findByCenterId(centerId);
}

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

import com.somemore.center.dto.request.PreferItemCreateRequestDto;
import com.somemore.center.dto.response.PreferItemCreateResponseDto;
import java.util.UUID;

public interface CreatePreferItemUseCase {

PreferItemCreateResponseDto createPreferItem(UUID centerId,
PreferItemCreateRequestDto requestDto);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.somemore.domains.center.usecase.command;
package com.somemore.center.usecase;

import java.util.UUID;

public interface DeletePreferItemUseCase {

void deletePreferItem(UUID centerId, Long preferItemId);
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.somemore.domains.center.usecase.query;

import com.somemore.domains.center.domain.PreferItem;
import com.somemore.domains.center.dto.response.PreferItemResponseDto;
package com.somemore.center.usecase;

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);
Expand Down
Loading