Skip to content

🔀 :: 오늘의 환경 정보 불러오기 API 구현 #99

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

Merged
merged 19 commits into from
Apr 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
8c2bc35
:memo: TodayEnvironmentRepository 구현
uuuuuuuk Apr 11, 2024
6347a27
:memo: TodayEnvironmentMapper 구현
uuuuuuuk Apr 11, 2024
a886197
:memo: TodayEnvironmentEntity 구현
uuuuuuuk Apr 11, 2024
520ca95
:memo: TodayEnvironment 구현
uuuuuuuk Apr 11, 2024
18a5a6f
:memo: QueryTodayEnvironmentPort 구현 및 findAll 함수 작성
uuuuuuuk Apr 11, 2024
8870100
:memo: QueryTodayEnvironmentPersistenceAdapter 구현 및 findAll 함수 작성
uuuuuuuk Apr 11, 2024
3bfc6f4
:memo: EnvironmentSettingConfig 구현 및 environmentSetting 함수 작성
uuuuuuuk Apr 11, 2024
8934aa2
:memo: DetailEnvironmentResponse 구현
uuuuuuuk Apr 11, 2024
e65a49e
:memo: DetailEnvironmentDto 구현
uuuuuuuk Apr 11, 2024
8dc363d
:memo: CommandTodayEnvironmentPort 구현 및 saveTodayEnvironment, deleteA…
uuuuuuuk Apr 11, 2024
8bcef9c
:memo: CommandTodayEnvironmentPersistenceAdapter 구현 및 saveTodayEnviro…
uuuuuuuk Apr 11, 2024
486cbe9
:memo: QueryEnvironmentPort 에 findAll 함수 추가
uuuuuuuk Apr 11, 2024
1d332a9
:memo: QueryEnvironmentPersistenceAdapter 에 findAll 함수 추가
uuuuuuuk Apr 11, 2024
75bb61f
:memo: EnvironmentDataMapper 에 toResponse 함수 추가
uuuuuuuk Apr 11, 2024
18a59c9
:sparkles: 환경 정보 글 불러오기 api 구현
uuuuuuuk Apr 11, 2024
8d51c7f
:sparkles: EnvironmentAdapter 에 환경 정보 글 불러오기 api 관련 함수 추가
uuuuuuuk Apr 11, 2024
00d60a1
:art: QueryTodayEnvironmentPort 에 findAll 함수를 findOne 으로 변경
uuuuuuuk Apr 11, 2024
75b40ee
:art: QueryTodayEnvironmentPersistenceAdapter 에 findAll 함수를 findOne 으…
uuuuuuuk Apr 11, 2024
4b367da
:art: DetailEnvironmentService 에 findAll 함수를 findOne 으로 변경
uuuuuuuk Apr 11, 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
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@ package andreas311.miso.domain.environment.adapter.input
import andreas311.miso.common.annotation.RequestController
import andreas311.miso.domain.environment.adapter.input.data.request.CreateEnvironmentRequest
import andreas311.miso.domain.environment.adapter.input.data.request.EditEnvironmentRequest
import andreas311.miso.domain.environment.adapter.input.data.response.DetailEnvironmentResponse
import andreas311.miso.domain.environment.adapter.input.mapper.EnvironmentDataMapper
import andreas311.miso.domain.environment.application.port.input.CreateEnvironmentUseCase
import andreas311.miso.domain.environment.application.port.input.DeleteEnvironmentUseCase
import andreas311.miso.domain.environment.application.port.input.DetailEnvironmentUseCase
import andreas311.miso.domain.environment.application.port.input.EditEnvironmentUseCase
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.DeleteMapping
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PatchMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
Expand All @@ -22,6 +25,7 @@ class EnvironmentAdapter(
private val environmentDataMapper: EnvironmentDataMapper,
private val editEnvironmentUseCase: EditEnvironmentUseCase,
private val createEnvironmentUseCase: CreateEnvironmentUseCase,
private val detailEnvironmentUseCase: DetailEnvironmentUseCase,
private val deleteEnvironmentUseCase: DeleteEnvironmentUseCase
) {
@PostMapping
Expand All @@ -32,6 +36,12 @@ class EnvironmentAdapter(
createEnvironmentUseCase.execute(environmentDataMapper toDto createEnvironmentRequest, multipartFile)
.let { ResponseEntity.status(HttpStatus.CREATED).build() }

@GetMapping
fun detail(): ResponseEntity<DetailEnvironmentResponse> =
detailEnvironmentUseCase.execute()
.let { environmentDataMapper.toResponse(it) }
.let { ResponseEntity.status(HttpStatus.OK).body(it) }

@PatchMapping("/{id}")
fun edit(
@PathVariable id: Long,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package andreas311.miso.domain.environment.adapter.input.data.response

data class DetailEnvironmentResponse(
val title: String,
val content: String,
val imageUrl: String?
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package andreas311.miso.domain.environment.adapter.input.mapper

import andreas311.miso.domain.environment.adapter.input.data.request.CreateEnvironmentRequest
import andreas311.miso.domain.environment.adapter.input.data.request.EditEnvironmentRequest
import andreas311.miso.domain.environment.adapter.input.data.response.DetailEnvironmentResponse
import andreas311.miso.domain.environment.application.port.input.dto.CreateEnvironmentDto
import andreas311.miso.domain.environment.application.port.input.dto.DetailEnvironmentDto
import andreas311.miso.domain.environment.application.port.input.dto.EditEnvironmentDto
import org.springframework.stereotype.Component

Expand All @@ -19,4 +21,11 @@ class EnvironmentDataMapper {
title = editEnvironmentRequest.title,
content = editEnvironmentRequest.content
)

fun toResponse(detailEnvironmentDto: DetailEnvironmentDto): DetailEnvironmentResponse =
DetailEnvironmentResponse(
title = detailEnvironmentDto.title,
content = detailEnvironmentDto.content,
imageUrl = detailEnvironmentDto.imageUrl
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package andreas311.miso.domain.environment.adapter.output.persistence

import andreas311.miso.domain.environment.adapter.output.persistence.mapper.TodayEnvironmentMapper
import andreas311.miso.domain.environment.adapter.output.persistence.repository.TodayEnvironmentRepository
import andreas311.miso.domain.environment.application.port.output.CommandTodayEnvironmentPort
import andreas311.miso.domain.environment.domain.TodayEnvironment
import org.springframework.stereotype.Component

@Component
class CommandTodayEnvironmentPersistenceAdapter(
private val todayEnvironmentMapper: TodayEnvironmentMapper,
private val todayEnvironmentRepository: TodayEnvironmentRepository
) : CommandTodayEnvironmentPort {
override fun saveTodayEnvironment(todayEnvironment: TodayEnvironment): TodayEnvironment {
val environmentEntity = todayEnvironmentRepository.save(todayEnvironmentMapper toEntity todayEnvironment)
return todayEnvironmentMapper.toDomain(environmentEntity)!!
}

override fun deleteAllTodayEnvironment() {
return todayEnvironmentRepository.deleteAll()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,9 @@ class QueryEnvironmentPersistenceAdapter(
val environmentEntity = environmentRepository.findByIdOrNull(id)
return environmentMapper toDomain environmentEntity
}

override fun findAll(): List<Environment> {
val environmentList = environmentRepository.findAll()
return environmentList.map { environmentMapper.toDomain(it)!! }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package andreas311.miso.domain.environment.adapter.output.persistence

import andreas311.miso.domain.environment.adapter.output.persistence.mapper.TodayEnvironmentMapper
import andreas311.miso.domain.environment.adapter.output.persistence.repository.TodayEnvironmentRepository
import andreas311.miso.domain.environment.application.port.output.QueryTodayEnvironmentPort
import andreas311.miso.domain.environment.domain.TodayEnvironment
import org.springframework.stereotype.Component

@Component
class QueryTodayEnvironmentPersistenceAdapter(
private val todayEnvironmentMapper: TodayEnvironmentMapper,
private val todayEnvironmentRepository: TodayEnvironmentRepository
) : QueryTodayEnvironmentPort {
override fun findOne(): TodayEnvironment {
val todayEnvironment = todayEnvironmentRepository.findAll().first()
return todayEnvironmentMapper.toDomain(todayEnvironment)!!
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package andreas311.miso.domain.environment.adapter.output.persistence.entity

import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id
import javax.persistence.Table

@Entity
@Table(name = "today_environment")
data class TodayEnvironmentEntity(
@Id
@Column(name = "today_environment_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long,

@Column(name = "title", nullable = false)
var title: String,

@Column(name = "content", nullable = true, length = 5000)
var content: String,

@Column(name = "imageUrl", nullable = true)
var imageUrl: String?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package andreas311.miso.domain.environment.adapter.output.persistence.mapper

import andreas311.miso.domain.environment.adapter.output.persistence.entity.TodayEnvironmentEntity
import andreas311.miso.domain.environment.domain.TodayEnvironment
import org.springframework.stereotype.Component

@Component
class TodayEnvironmentMapper {
infix fun toEntity(domain: TodayEnvironment): TodayEnvironmentEntity =
TodayEnvironmentEntity(
id = domain.id,
title = domain.title,
content = domain.content,
imageUrl = domain.imageUrl
)

infix fun toDomain(entity: TodayEnvironmentEntity?): TodayEnvironment? =
entity?.let {
TodayEnvironment(
id = entity.id,
title = entity.title,
content = entity.content,
imageUrl = entity.imageUrl
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package andreas311.miso.domain.environment.adapter.output.persistence.repository

import andreas311.miso.domain.environment.adapter.output.persistence.entity.TodayEnvironmentEntity
import org.springframework.data.repository.CrudRepository

interface TodayEnvironmentRepository : CrudRepository<TodayEnvironmentEntity, Long>
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package andreas311.miso.domain.environment.application.config

import andreas311.miso.domain.environment.application.port.output.CommandTodayEnvironmentPort
import andreas311.miso.domain.environment.application.port.output.QueryEnvironmentPort
import andreas311.miso.domain.environment.domain.TodayEnvironment
import org.springframework.stereotype.Component
import javax.annotation.PostConstruct

@Component
class EnvironmentSettingConfig(
private val queryEnvironmentPort: QueryEnvironmentPort,
private val commandTodayEnvironmentPort: CommandTodayEnvironmentPort
) {
@PostConstruct
fun environmentSetting() {
val environment = queryEnvironmentPort.findAll().shuffled().first()

commandTodayEnvironmentPort.deleteAllTodayEnvironment()

commandTodayEnvironmentPort.saveTodayEnvironment(
TodayEnvironment(
id = 0L,
title = environment.title,
content = environment.content,
imageUrl = environment.imageUrl
)
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package andreas311.miso.domain.environment.application.port.input

import andreas311.miso.domain.environment.application.port.input.dto.DetailEnvironmentDto

interface DetailEnvironmentUseCase {
fun execute(): DetailEnvironmentDto
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package andreas311.miso.domain.environment.application.port.input.dto

import andreas311.miso.domain.environment.domain.TodayEnvironment

data class DetailEnvironmentDto(
val title: String,
val content: String,
val imageUrl: String?
) {
constructor(todayEnvironment: TodayEnvironment): this(
title = todayEnvironment.title,
content = todayEnvironment.content,
imageUrl = todayEnvironment.imageUrl
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package andreas311.miso.domain.environment.application.port.output

import andreas311.miso.domain.environment.domain.TodayEnvironment

interface CommandTodayEnvironmentPort {
fun saveTodayEnvironment(todayEnvironment: TodayEnvironment): TodayEnvironment
fun deleteAllTodayEnvironment()
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ import andreas311.miso.domain.environment.domain.Environment

interface QueryEnvironmentPort {
fun findByIdOrNull(id: Long): Environment?
fun findAll(): List<Environment>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package andreas311.miso.domain.environment.application.port.output

import andreas311.miso.domain.environment.domain.TodayEnvironment

interface QueryTodayEnvironmentPort {
fun findOne(): TodayEnvironment
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package andreas311.miso.domain.environment.application.service

import andreas311.miso.common.annotation.ReadOnlyRollbackService
import andreas311.miso.domain.environment.application.port.input.DetailEnvironmentUseCase
import andreas311.miso.domain.environment.application.port.input.dto.DetailEnvironmentDto
import andreas311.miso.domain.environment.application.port.output.QueryTodayEnvironmentPort

@ReadOnlyRollbackService
class DetailEnvironmentService(
private val queryTodayEnvironmentPort: QueryTodayEnvironmentPort
) : DetailEnvironmentUseCase {
override fun execute(): DetailEnvironmentDto {
val environment = queryTodayEnvironmentPort.findOne()

return DetailEnvironmentDto(environment)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package andreas311.miso.domain.environment.domain

data class TodayEnvironment(
val id: Long,
var title: String,
var content: String,
var imageUrl: String?,
)