diff --git a/src/main/java/com/daramg/server/auth/config/SecurityConfig.java b/src/main/java/com/daramg/server/auth/config/SecurityConfig.java index 269b065..8d5db56 100644 --- a/src/main/java/com/daramg/server/auth/config/SecurityConfig.java +++ b/src/main/java/com/daramg/server/auth/config/SecurityConfig.java @@ -48,7 +48,7 @@ SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers("/auth/signup").permitAll() .requestMatchers("/auth/login").permitAll() .requestMatchers(HttpMethod.PUT, "/auth/password-reset").permitAll() - .requestMatchers("/composers").permitAll() + .requestMatchers(HttpMethod.GET, "/composers").permitAll() .requestMatchers(HttpMethod.GET, "/posts/**").permitAll() .requestMatchers("/users/check-nickname").permitAll() .requestMatchers("/composers/{composerId}/posts").permitAll() diff --git a/src/main/java/com/daramg/server/composer/application/ComposerService.java b/src/main/java/com/daramg/server/composer/application/ComposerService.java index 56aa7e6..1be6ca9 100644 --- a/src/main/java/com/daramg/server/composer/application/ComposerService.java +++ b/src/main/java/com/daramg/server/composer/application/ComposerService.java @@ -1,10 +1,14 @@ package com.daramg.server.composer.application; import com.daramg.server.common.application.EntityUtils; +import com.daramg.server.common.exception.BusinessException; +import com.daramg.server.common.exception.CommonErrorStatus; import com.daramg.server.composer.domain.Composer; import com.daramg.server.composer.domain.ComposerLike; +import com.daramg.server.composer.dto.ComposerCreateDto; import com.daramg.server.composer.dto.ComposerLikeResponseDto; import com.daramg.server.composer.repository.ComposerLikeRepository; +import com.daramg.server.composer.repository.ComposerRepository; import com.daramg.server.user.domain.User; import lombok.RequiredArgsConstructor; import org.springframework.dao.DataIntegrityViolationException; @@ -16,8 +20,29 @@ public class ComposerService { private final ComposerLikeRepository composerLikeRepository; + private final ComposerRepository composerRepository; private final EntityUtils entityUtils; + @Transactional + public void createComposer(ComposerCreateDto dto, User user) { + if (user.getId() != 1L) { + throw new BusinessException(CommonErrorStatus.FORBIDDEN); + } + Composer composer = Composer.builder() + .koreanName(dto.getKoreanName()) + .englishName(dto.getEnglishName()) + .nativeName(dto.getNativeName()) + .gender(dto.getGender()) + .nationality(dto.getNationality()) + .birthYear(dto.getBirthYear()) + .deathYear(dto.getDeathYear()) + .bio(dto.getBio()) + .era(dto.getEra()) + .continent(dto.getContinent()) + .build(); + composerRepository.save(composer); + } + /** * 작곡가 좋아요 상태를 토글(Toggle)합니다. *

diff --git a/src/main/java/com/daramg/server/composer/domain/Composer.java b/src/main/java/com/daramg/server/composer/domain/Composer.java index 8f98436..62f48f5 100644 --- a/src/main/java/com/daramg/server/composer/domain/Composer.java +++ b/src/main/java/com/daramg/server/composer/domain/Composer.java @@ -50,7 +50,7 @@ public class Composer extends BaseEntity { @Builder private Composer(@NonNull String koreanName, @NonNull String englishName, String nativeName, @NonNull Gender gender, String nationality, - Short birthYear, Short deathYear, Era era, Continent continent) { + Short birthYear, Short deathYear, String bio, Era era, Continent continent) { this.koreanName = koreanName; this.englishName = englishName; this.nativeName = nativeName; @@ -58,6 +58,7 @@ private Composer(@NonNull String koreanName, @NonNull String englishName, this.nationality = nationality; this.birthYear = birthYear; this.deathYear = deathYear; + this.bio = bio; this.era = era; this.continent = continent; } diff --git a/src/main/java/com/daramg/server/composer/dto/ComposerCreateDto.kt b/src/main/java/com/daramg/server/composer/dto/ComposerCreateDto.kt new file mode 100644 index 0000000..c2679b8 --- /dev/null +++ b/src/main/java/com/daramg/server/composer/dto/ComposerCreateDto.kt @@ -0,0 +1,20 @@ +package com.daramg.server.composer.dto + +import com.daramg.server.composer.domain.Continent +import com.daramg.server.composer.domain.Era +import com.daramg.server.composer.domain.Gender +import jakarta.validation.constraints.NotBlank +import jakarta.validation.constraints.NotNull + +data class ComposerCreateDto( + @get:NotBlank val koreanName: String, + @get:NotBlank val englishName: String, + val nativeName: String? = null, + @get:NotNull val gender: Gender, + val nationality: String? = null, + val birthYear: Short? = null, + val deathYear: Short? = null, + val bio: String? = null, + val era: Era? = null, + val continent: Continent? = null, +) diff --git a/src/main/java/com/daramg/server/composer/presentation/ComposerController.java b/src/main/java/com/daramg/server/composer/presentation/ComposerController.java index f58e461..4fecdb8 100644 --- a/src/main/java/com/daramg/server/composer/presentation/ComposerController.java +++ b/src/main/java/com/daramg/server/composer/presentation/ComposerController.java @@ -1,14 +1,14 @@ package com.daramg.server.composer.presentation; import com.daramg.server.composer.application.ComposerService; +import com.daramg.server.composer.dto.ComposerCreateDto; import com.daramg.server.composer.dto.ComposerLikeResponseDto; import com.daramg.server.user.domain.User; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequiredArgsConstructor @@ -17,6 +17,12 @@ public class ComposerController { private final ComposerService composerService; + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public void createComposer(@Valid @RequestBody ComposerCreateDto dto, User user) { + composerService.createComposer(dto, user); + } + @PostMapping("/{composerId}/like") public ResponseEntity toggleComposerLike(@PathVariable Long composerId, User user) { ComposerLikeResponseDto response = composerService.toggleLike(composerId, user);