diff --git a/src/main/kotlin/andreas311/miso/domain/item/entity/Item.kt b/src/main/kotlin/andreas311/miso/domain/item/entity/Item.kt index a07a236c..dfa2b6c6 100644 --- a/src/main/kotlin/andreas311/miso/domain/item/entity/Item.kt +++ b/src/main/kotlin/andreas311/miso/domain/item/entity/Item.kt @@ -1,5 +1,6 @@ package andreas311.miso.domain.item.entity +import andreas311.miso.domain.user.entity.User import org.hibernate.annotations.DynamicUpdate import javax.persistence.* @@ -22,5 +23,9 @@ class Item( val content: String, @Column(name = "image_url") - val imageUrl: String + val imageUrl: String, + + @ManyToOne + @JoinColumn(name = "user_id") + val user: User ) \ No newline at end of file diff --git a/src/main/kotlin/andreas311/miso/domain/item/service/impl/DetailItemServiceImpl.kt b/src/main/kotlin/andreas311/miso/domain/item/service/impl/DetailItemServiceImpl.kt index 05455715..4f3aaf66 100644 --- a/src/main/kotlin/andreas311/miso/domain/item/service/impl/DetailItemServiceImpl.kt +++ b/src/main/kotlin/andreas311/miso/domain/item/service/impl/DetailItemServiceImpl.kt @@ -4,13 +4,14 @@ import andreas311.miso.domain.item.exception.ItemNotFoundException import andreas311.miso.domain.item.presentation.data.response.DetailItemResponseDto import andreas311.miso.domain.item.repository.ItemRepository import andreas311.miso.domain.item.service.DetailItemService -import andreas311.miso.global.annotation.RollbackService +import andreas311.miso.global.annotation.ReadOnlyService import org.springframework.data.repository.findByIdOrNull -@RollbackService +@ReadOnlyService class DetailItemServiceImpl( private val itemRepository: ItemRepository ) : DetailItemService { + override fun execute(id: Long): DetailItemResponseDto { val item = itemRepository.findByIdOrNull(id) diff --git a/src/main/kotlin/andreas311/miso/domain/user/presentation/UserController.kt b/src/main/kotlin/andreas311/miso/domain/user/presentation/UserController.kt new file mode 100644 index 00000000..851c37e9 --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/user/presentation/UserController.kt @@ -0,0 +1,19 @@ +package andreas311.miso.domain.user.presentation + +import andreas311.miso.domain.user.presentation.data.response.PointResponseDto +import andreas311.miso.domain.user.service.GetPointService +import andreas311.miso.global.annotation.RequestController +import org.springframework.http.HttpStatus +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.GetMapping + +@RequestController("/user") +class UserController( + private val getPointService: GetPointService +) { + + @GetMapping + fun point(): ResponseEntity = + getPointService.execute() + .let { ResponseEntity.status(HttpStatus.OK).body(it) } +} \ No newline at end of file diff --git a/src/main/kotlin/andreas311/miso/domain/user/presentation/data/response/PointResponseDto.kt b/src/main/kotlin/andreas311/miso/domain/user/presentation/data/response/PointResponseDto.kt new file mode 100644 index 00000000..e1f2b21c --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/user/presentation/data/response/PointResponseDto.kt @@ -0,0 +1,11 @@ +package andreas311.miso.domain.user.presentation.data.response + +import andreas311.miso.domain.user.entity.User + +data class PointResponseDto( + val point: Int +) { + constructor(user: User) : this( + point = user.point + ) +} diff --git a/src/main/kotlin/andreas311/miso/domain/user/service/GetPointService.kt b/src/main/kotlin/andreas311/miso/domain/user/service/GetPointService.kt new file mode 100644 index 00000000..01857cab --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/user/service/GetPointService.kt @@ -0,0 +1,8 @@ +package andreas311.miso.domain.user.service + +import andreas311.miso.domain.user.presentation.data.response.PointResponseDto + +interface GetPointService { + + fun execute(): PointResponseDto +} \ No newline at end of file diff --git a/src/main/kotlin/andreas311/miso/domain/user/service/impl/GetPointServiceImpl.kt b/src/main/kotlin/andreas311/miso/domain/user/service/impl/GetPointServiceImpl.kt new file mode 100644 index 00000000..e6db8f4d --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/user/service/impl/GetPointServiceImpl.kt @@ -0,0 +1,19 @@ +package andreas311.miso.domain.user.service.impl + +import andreas311.miso.domain.user.presentation.data.response.PointResponseDto +import andreas311.miso.domain.user.service.GetPointService +import andreas311.miso.global.annotation.ReadOnlyService +import andreas311.miso.global.util.UserUtil + +@ReadOnlyService +class GetPointServiceImpl( + private val userUtil: UserUtil +) : GetPointService { + + override fun execute(): PointResponseDto { + + val user = userUtil.currentUser() + + return PointResponseDto(user) + } +} \ No newline at end of file diff --git a/src/main/kotlin/andreas311/miso/global/annotation/ReadOnlyService.kt b/src/main/kotlin/andreas311/miso/global/annotation/ReadOnlyService.kt new file mode 100644 index 00000000..b2a99eac --- /dev/null +++ b/src/main/kotlin/andreas311/miso/global/annotation/ReadOnlyService.kt @@ -0,0 +1,8 @@ +package andreas311.miso.global.annotation + +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional + +@Service +@Transactional(readOnly = true) +annotation class ReadOnlyService() diff --git a/src/main/kotlin/andreas311/miso/global/security/SecurityConfig.kt b/src/main/kotlin/andreas311/miso/global/security/SecurityConfig.kt index cb43c0be..eb862620 100644 --- a/src/main/kotlin/andreas311/miso/global/security/SecurityConfig.kt +++ b/src/main/kotlin/andreas311/miso/global/security/SecurityConfig.kt @@ -47,6 +47,8 @@ class SecurityConfig( .antMatchers(HttpMethod.GET, "/item/{id}").authenticated() + .antMatchers(HttpMethod.GET, "/user").authenticated() + .anyRequest().denyAll() .and() .exceptionHandling()