Skip to content

Commit

Permalink
[BSVR-137] 복수 팀 등록 API를 단일 등록으로 수정 (#53)
Browse files Browse the repository at this point in the history
* feat: 복수 팀 등록 API를 단일 등록으로 수정

* fix: 오타 수정

* feat: request body -> reqeust param form data로 변경

* test: 중복 팀 이름 확인 테스트 코드 수정
  • Loading branch information
EunjiShin authored Jul 19, 2024
1 parent a62d06d commit 68dbc7c
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 55 deletions.
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
package org.depromeet.spot.application.team;

import java.util.List;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;

import org.depromeet.spot.application.team.dto.request.CreateBaseballTeamReq;
import org.depromeet.spot.application.team.dto.request.CreateHomeTeamReq;
import org.depromeet.spot.domain.team.BaseballTeam;
import org.depromeet.spot.domain.common.RgbCode;
import org.depromeet.spot.usecase.port.in.team.CreateBaseballTeamUsecase;
import org.depromeet.spot.usecase.port.in.team.CreateBaseballTeamUsecase.CreateBaseballTeamCommand;
import org.depromeet.spot.usecase.port.in.team.CreateHomeTeamUsecase;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -35,10 +34,23 @@ public class CreateBaseballTeamController {

@PostMapping("/baseball-teams")
@ResponseStatus(HttpStatus.CREATED)
@Operation(summary = "신규 야구 팀(구단) 정보를 생성한다.")
public void create(@RequestBody @Valid @NotEmpty List<CreateBaseballTeamReq> requests) {
List<BaseballTeam> teams = requests.stream().map(CreateBaseballTeamReq::toDomain).toList();
createBaseballTeamUsecase.saveAll(teams);
@Operation(summary = "신규 야구 팀(구단) 정보를 단일 생성한다.")
public void create(
@RequestParam("logo") MultipartFile logo,
@RequestParam("name") String name,
@RequestParam("alias") String alias,
@RequestParam("rgbRed") int rgbRed,
@RequestParam("rgbBlue") int rgbBlue,
@RequestParam("rgbGreen") int rgbGreen) {
RgbCode rgbCode = RgbCode.builder().blue(rgbBlue).red(rgbRed).green(rgbGreen).build();
CreateBaseballTeamCommand command =
CreateBaseballTeamCommand.builder()
.logo(logo)
.name(name)
.alias(alias)
.rgbCode(rgbCode)
.build();
createBaseballTeamUsecase.save(command);
}

@PostMapping("/stadiums/{stadiumId}/baseball-teams")
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package org.depromeet.spot.usecase.port.in.team;

import java.util.List;
import org.depromeet.spot.domain.common.RgbCode;
import org.springframework.web.multipart.MultipartFile;

import org.depromeet.spot.domain.team.BaseballTeam;
import lombok.Builder;

public interface CreateBaseballTeamUsecase {

void saveAll(List<BaseballTeam> teams);
void save(CreateBaseballTeamCommand command);

@Builder
record CreateBaseballTeamCommand(
MultipartFile logo, String name, String alias, RgbCode rgbCode) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import java.util.List;

import org.depromeet.spot.common.exception.team.TeamException.DuplicateTeamNameException;
import org.depromeet.spot.domain.media.MediaProperty;
import org.depromeet.spot.domain.team.BaseballTeam;
import org.depromeet.spot.usecase.port.in.team.CreateBaseballTeamUsecase;
import org.depromeet.spot.usecase.port.out.media.ImageUploadPort;
import org.depromeet.spot.usecase.port.out.team.BaseballTeamRepository;
import org.springframework.stereotype.Service;

Expand All @@ -17,13 +19,26 @@
public class CreateBaseballTeamService implements CreateBaseballTeamUsecase {

private final BaseballTeamRepository baseballTeamRepository;
private final ImageUploadPort imageUploadPort;

@Override
public void saveAll(List<BaseballTeam> teams) {
List<String> names = teams.stream().map(BaseballTeam::getName).toList();
if (baseballTeamRepository.existsByNameIn(names)) {
public void save(CreateBaseballTeamCommand command) {
final String name = command.name();
String logoUrl = imageUploadPort.upload(name, command.logo(), MediaProperty.TEAM_LOGO);
checkExistsName(name);
BaseballTeam team =
BaseballTeam.builder()
.name(name)
.alias(command.alias())
.logo(logoUrl)
.labelRgbCode(command.rgbCode())
.build();
baseballTeamRepository.saveAll(List.of(team));
}

public void checkExistsName(final String name) {
if (baseballTeamRepository.existsByNameIn(List.of(name))) {
throw new DuplicateTeamNameException();
}
baseballTeamRepository.saveAll(teams);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.depromeet.spot.usecase.service.fake;

import org.depromeet.spot.domain.media.MediaProperty;
import org.depromeet.spot.usecase.port.out.media.ImageUploadPort;
import org.springframework.web.multipart.MultipartFile;

public class FakeImageUploadPort implements ImageUploadPort {

@Override
public String upload(String target, MultipartFile file, MediaProperty property) {
return target + property.name();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@

import static org.assertj.core.api.Assertions.assertThatThrownBy;

import java.util.List;

import org.depromeet.spot.common.exception.team.TeamException.DuplicateTeamNameException;
import org.depromeet.spot.domain.common.RgbCode;
import org.depromeet.spot.domain.team.BaseballTeam;
import org.depromeet.spot.usecase.service.fake.FakeBaseballTeamRepository;
import org.depromeet.spot.usecase.service.fake.FakeImageUploadPort;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

Expand All @@ -17,9 +16,11 @@ class CreateBaseballTeamServiceTest {

@BeforeEach
void init() {
FakeImageUploadPort fakeImageUploadPort = new FakeImageUploadPort();
FakeBaseballTeamRepository fakeBaseballTeamRepository = new FakeBaseballTeamRepository();
this.createBaseballTeamService =
CreateBaseballTeamService.builder()
.imageUploadPort(fakeImageUploadPort)
.baseballTeamRepository(fakeBaseballTeamRepository)
.build();

Expand All @@ -37,19 +38,11 @@ void init() {
@Test
void 이미_존재하는_이름의_구단을_중복_저장할_수_없다() {
// given
BaseballTeam team =
BaseballTeam.builder()
.id(1L)
.name("두산 베어스")
.alias("두산")
.logo("logo1.png")
.labelRgbCode(new RgbCode(0, 0, 0))
.build();
List<BaseballTeam> teams = List.of(team);
String duplicateName = "두산 베어스";

// when
// then
assertThatThrownBy(() -> createBaseballTeamService.saveAll(teams))
assertThatThrownBy(() -> createBaseballTeamService.checkExistsName(duplicateName))
.isInstanceOf(DuplicateTeamNameException.class);
}
}

0 comments on commit 68dbc7c

Please sign in to comment.