Labels
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
package com.homebox.lens.data.api.dto
|
||||||
|
|
||||||
|
class LabelCreateDto {
|
||||||
|
}
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
// [PACKAGE] com.homebox.lens.data.api.dto
|
|
||||||
// [FILE] LabelDto.kt
|
|
||||||
|
|
||||||
package com.homebox.lens.data.api.dto
|
|
||||||
|
|
||||||
import com.squareup.moshi.Json
|
|
||||||
import com.squareup.moshi.JsonClass
|
|
||||||
|
|
||||||
// [CONTRACT]
|
|
||||||
/**
|
|
||||||
* [ENTITY: DataClass('LabelOut')]
|
|
||||||
* [PURPOSE] DTO для информации о метке.
|
|
||||||
*/
|
|
||||||
@JsonClass(generateAdapter = true)
|
|
||||||
data class LabelOut(
|
|
||||||
@Json(name = "id") val id: String,
|
|
||||||
@Json(name = "name") val name: String
|
|
||||||
)
|
|
||||||
|
|
||||||
// [END_FILE_LabelDto.kt]
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.homebox.lens.domain.model
|
||||||
|
|
||||||
|
class LabelCreate {
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.domain.usecase
|
||||||
|
// [FILE] CreateLabelUseCase.kt
|
||||||
|
// [SEMANTICS] business_logic, use_case, label, create
|
||||||
|
package com.homebox.lens.domain.usecase
|
||||||
|
|
||||||
|
// [IMPORTS]
|
||||||
|
import com.homebox.lens.domain.model.LabelCreate
|
||||||
|
import com.homebox.lens.domain.model.LabelSummary
|
||||||
|
import com.homebox.lens.domain.repository.ItemRepository
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
// [USE_CASE]
|
||||||
|
/**
|
||||||
|
* [CONTRACT]
|
||||||
|
* @summary Сценарий использования для создания новой метки.
|
||||||
|
* @param repository Репозиторий для доступа к данным.
|
||||||
|
*/
|
||||||
|
class CreateLabelUseCase @Inject constructor(
|
||||||
|
private val repository: ItemRepository
|
||||||
|
) {
|
||||||
|
/**
|
||||||
|
* [CONTRACT]
|
||||||
|
* @summary Выполняет создание метки.
|
||||||
|
* @param newLabelData Данные для создания новой метки.
|
||||||
|
* @return Возвращает краткую информацию о созданной метке [LabelSummary].
|
||||||
|
* @throws Exception в случае ошибки на уровне репозитория (сеть, API).
|
||||||
|
* @precondition `newLabelData.name` не должен быть пустым.
|
||||||
|
*/
|
||||||
|
// [ENTRYPOINT]
|
||||||
|
suspend operator fun invoke(newLabelData: LabelCreate): LabelSummary {
|
||||||
|
// [PRECONDITION]
|
||||||
|
require(newLabelData.name.isNotBlank()) { "[CONTRACT_VIOLATION] Label name cannot be blank." }
|
||||||
|
|
||||||
|
// [ACTION]
|
||||||
|
return repository.createLabel(newLabelData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// [END_FILE_CreateLabelUseCase.kt]
|
||||||
Reference in New Issue
Block a user