diff --git a/data/src/main/java/com/homebox/lens/data/api/dto/LabelCreateDto.kt b/data/src/main/java/com/homebox/lens/data/api/dto/LabelCreateDto.kt new file mode 100644 index 0000000..464a3d5 --- /dev/null +++ b/data/src/main/java/com/homebox/lens/data/api/dto/LabelCreateDto.kt @@ -0,0 +1,4 @@ +package com.homebox.lens.data.api.dto + +class LabelCreateDto { +} \ No newline at end of file diff --git a/data/src/main/java/com/homebox/lens/data/api/dto/LabelDto.kt b/data/src/main/java/com/homebox/lens/data/api/dto/LabelDto.kt deleted file mode 100644 index 5e3aa28..0000000 --- a/data/src/main/java/com/homebox/lens/data/api/dto/LabelDto.kt +++ /dev/null @@ -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] diff --git a/domain/src/main/java/com/homebox/lens/domain/model/LabelCreate.kt b/domain/src/main/java/com/homebox/lens/domain/model/LabelCreate.kt new file mode 100644 index 0000000..bd04db5 --- /dev/null +++ b/domain/src/main/java/com/homebox/lens/domain/model/LabelCreate.kt @@ -0,0 +1,4 @@ +package com.homebox.lens.domain.model + +class LabelCreate { +} \ No newline at end of file diff --git a/domain/src/main/java/com/homebox/lens/domain/usecase/CreateLabelUseCase.kt b/domain/src/main/java/com/homebox/lens/domain/usecase/CreateLabelUseCase.kt new file mode 100644 index 0000000..83dbf6b --- /dev/null +++ b/domain/src/main/java/com/homebox/lens/domain/usecase/CreateLabelUseCase.kt @@ -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] \ No newline at end of file