fix: Resolve build and runtime errors

This commit is contained in:
2025-10-02 10:34:00 +03:00
parent 5eb23eed5b
commit 8816377361
38 changed files with 707 additions and 703 deletions

View File

@@ -48,7 +48,7 @@ data class ItemCreateDto(
/**
* @summary Маппер из доменной модели ItemCreate в ItemCreateDto.
*/
fun ItemCreate.toDto(): ItemCreateDto {
fun ItemCreate.toItemCreateDto(): ItemCreateDto {
return ItemCreateDto(
name = this.name,
description = this.description,

View File

@@ -50,46 +50,3 @@ data class ItemOutDto(
@Json(name = "updatedAt") val updatedAt: String
)
// [END_ENTITY: DataClass('ItemOutDto')]
// [ENTITY: Function('toDomain')]
// [RELATION: Function('toDomain')] -> [RETURNS] -> [DataClass('ItemOut')]
/**
* @summary Маппер из ItemOutDto в доменную модель ItemOut.
*/
fun ItemOutDto.toDomain(): ItemOut {
return ItemOut(
id = this.id,
name = this.name,
assetId = this.assetId,
description = this.description,
notes = this.notes,
serialNumber = this.serialNumber,
quantity = this.quantity,
isArchived = this.isArchived,
purchasePrice = this.purchasePrice,
purchaseTime = this.purchaseTime,
purchaseFrom = this.purchaseFrom,
warrantyExpires = this.warrantyExpires,
warrantyDetails = this.warrantyDetails,
lifetimeWarranty = this.lifetimeWarranty,
insured = this.insured,
manufacturer = this.manufacturer,
modelNumber = this.modelNumber,
soldPrice = this.soldPrice,
soldTime = this.soldTime,
soldTo = this.soldTo,
soldNotes = this.soldNotes,
syncChildItemsLocations = this.syncChildItemsLocations,
location = this.location?.toDomain(),
parent = this.parent?.toDomain(),
children = this.children.map { it.toDomain() },
labels = this.labels.map { it.toDomain() },
attachments = this.attachments.map { it.toDomain() },
images = this.images.map { it.toDomain() },
fields = this.fields.map { it.toDomain() },
maintenance = this.maintenance.map { it.toDomain() },
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
// [END_ENTITY: Function('toDomain')]

View File

@@ -28,24 +28,3 @@ data class ItemSummaryDto(
@Json(name = "updatedAt") val updatedAt: String
)
// [END_ENTITY: DataClass('ItemSummaryDto')]
// [ENTITY: Function('toDomain')]
// [RELATION: Function('toDomain')] -> [RETURNS] -> [DataClass('ItemSummary')]
/**
* @summary Маппер из ItemSummaryDto в доменную модель ItemSummary.
*/
fun ItemSummaryDto.toDomain(): ItemSummary {
return ItemSummary(
id = this.id,
name = this.name,
assetId = this.assetId,
image = this.image?.toDomain(),
isArchived = this.isArchived,
labels = this.labels.map { it.toDomain() },
location = this.location?.toDomain(),
value = this.value,
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
// [END_ENTITY: Function('toDomain')]

View File

@@ -48,7 +48,7 @@ data class ItemUpdateDto(
/**
* @summary Маппер из доменной модели ItemUpdate в ItemUpdateDto.
*/
fun ItemUpdate.toDto(): ItemUpdateDto {
fun ItemUpdate.toItemUpdateDto(): ItemUpdateDto {
return ItemUpdateDto(
name = this.name,
description = this.description,

View File

@@ -26,20 +26,4 @@ data class LabelOutDto(
)
// [END_ENTITY: DataClass('LabelOutDto')]
// [ENTITY: Function('toDomain')]
// [RELATION: Function('toDomain')] -> [RETURNS] -> [DataClass('LabelOut')]
/**
* @summary Маппер из LabelOutDto в доменную модель LabelOut.
*/
fun LabelOutDto.toDomain(): LabelOut {
return LabelOut(
id = this.id,
name = this.name,
color = this.color ?: "",
isArchived = this.isArchived ?: false,
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
// [END_ENTITY: Function('toDomain')]
// [END_FILE_LabelOutDto.kt]

View File

@@ -35,7 +35,8 @@ data class LabelSummaryDto(
fun LabelSummaryDto.toDomain(): LabelSummary {
return LabelSummary(
id = this.id,
name = this.name
name = this.name,
color = this.color ?: ""
)
}
// [END_ENTITY: Function('toDomain')]

View File

@@ -15,17 +15,9 @@ data class LabelUpdateDto(
@Json(name = "name")
val name: String?,
@Json(name = "color")
val color: String?
val color: String?,
@Json(name = "description")
val description: String?
)
// [END_ENTITY: DataClass('LabelUpdateDto')]
// [ENTITY: Function('toDto')]
// [RELATION: Function('toDto')] -> [RETURNS] -> [DataClass('LabelUpdateDto')]
fun LabelUpdate.toDto(): LabelUpdateDto {
return LabelUpdateDto(
name = this.name,
color = this.color
)
}
// [END_ENTITY: Function('toDto')]
// [END_FILE_LabelUpdateDto.kt]

View File

@@ -13,10 +13,12 @@ import com.squareup.moshi.JsonClass
data class LocationCreateDto(
@Json(name = "name")
val name: String,
@Json(name = "parentId")
val parentId: String?,
@Json(name = "color")
val color: String?,
@Json(name = "description")
val description: String? // Assuming description can be null for creation
val description: String?
)
// [END_ENTITY: DataClass('LocationCreateDto')]
// [END_FILE_LocationCreateDto.kt]

View File

@@ -27,21 +27,4 @@ data class LocationOutCountDto(
)
// [END_ENTITY: DataClass('LocationOutCountDto')]
// [ENTITY: Function('toDomain')]
// [RELATION: Function('toDomain')] -> [RETURNS] -> [DataClass('LocationOutCount')]
/**
* @summary Маппер из LocationOutCountDto в доменную модель LocationOutCount.
*/
fun LocationOutCountDto.toDomain(): LocationOutCount {
return LocationOutCount(
id = this.id,
name = this.name,
color = this.color ?: "",
isArchived = this.isArchived ?: false,
itemCount = this.itemCount,
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
// [END_ENTITY: Function('toDomain')]
// [END_FILE_LocationOutCountDto.kt]

View File

@@ -27,17 +27,4 @@ data class LocationOutDto(
)
// [END_ENTITY: DataClass('LocationOutDto')]
// [ENTITY: Function('toDomain')]
// [RELATION: Function('toDomain')] -> [RETURNS] -> [DataClass('LocationOut')]
fun LocationOutDto.toDomain(): LocationOut {
return LocationOut(
id = this.id,
name = this.name,
color = this.color,
isArchived = this.isArchived,
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
// [END_ENTITY: Function('toDomain')]
// [END_FILE_LocationOutDto.kt]

View File

@@ -15,17 +15,10 @@ data class LocationUpdateDto(
@Json(name = "name")
val name: String?,
@Json(name = "color")
val color: String?
val color: String?,
@Json(name = "description")
val description: String?
)
// [END_ENTITY: DataClass('LocationUpdateDto')]
// [ENTITY: Function('toDto')]
// [RELATION: Function('toDto')] -> [RETURNS] -> [DataClass('LocationUpdateDto')]
fun LocationUpdate.toDto(): LocationUpdateDto {
return LocationUpdateDto(
name = this.name,
color = this.color
)
}
// [END_ENTITY: Function('toDto')]
// [END_FILE_LocationUpdateDto.kt]

View File

@@ -22,19 +22,3 @@ data class PaginationResultDto<T>(
@Json(name = "total") val total: Int
)
// [END_ENTITY: DataClass('PaginationResultDto')]
// [ENTITY: Function('toDomain')]
// [RELATION: Function('toDomain')] -> [RETURNS] -> [DataClass('PaginationResult')]
/**
* @summary Маппер из PaginationResultDto в доменную модель PaginationResult.
* @param transform Функция для преобразования каждого элемента из DTO в доменную модель.
*/
fun <T, R> PaginationResultDto<T>.toDomain(transform: (T) -> R): PaginationResult<R> {
return PaginationResult(
items = this.items.map(transform),
page = this.page,
pageSize = this.pageSize,
total = this.total
)
}
// [END_ENTITY: Function('toDomain')]

View File

@@ -24,7 +24,7 @@ import com.homebox.lens.data.db.entity.*
LocationEntity::class,
ItemLabelCrossRef::class
],
version = 1,
version = 2,
exportSchema = false
)
@TypeConverters(Converters::class)

View File

@@ -6,7 +6,6 @@ package com.homebox.lens.data.db.entity
// [IMPORTS]
import androidx.room.Entity
import androidx.room.PrimaryKey
import java.math.BigDecimal
// [END_IMPORTS]
// [ENTITY: DatabaseTable('ItemEntity')]
@@ -21,7 +20,7 @@ data class ItemEntity(
val quantity: Int,
val image: String?,
val locationId: String?,
val purchasePrice: BigDecimal?,
val purchasePrice: Double?,
val createdAt: String?,
val archived: Boolean,
val assetId: String?,
@@ -35,7 +34,7 @@ data class ItemEntity(
val purchaseTime: String?,
val serialNumber: String?,
val soldNotes: String?,
val soldPrice: BigDecimal?,
val soldPrice: Double?,
val soldTime: String?,
val soldTo: String?,
val syncChildItemsLocations: Boolean,

View File

@@ -4,22 +4,8 @@
package com.homebox.lens.data.db.entity
// [IMPORTS]
import com.homebox.lens.data.api.dto.CustomFieldDto
import com.homebox.lens.data.api.dto.ItemCreateDto
import com.homebox.lens.data.api.dto.ItemOutDto
import com.homebox.lens.data.api.dto.ItemUpdateDto
import com.homebox.lens.domain.model.CustomField
import com.homebox.lens.domain.model.Image
import com.homebox.lens.domain.model.Item
import com.homebox.lens.domain.model.ItemCreate
import com.homebox.lens.domain.model.ItemOut
import com.homebox.lens.domain.model.ItemSummary
import com.homebox.lens.domain.model.ItemUpdate
import com.homebox.lens.domain.model.Label
import com.homebox.lens.domain.model.LabelOut
import com.homebox.lens.domain.model.Location
import com.homebox.lens.domain.model.LocationOut
import java.math.BigDecimal
import com.homebox.lens.data.mapper.toDomain
import com.homebox.lens.domain.model.*
// [END_IMPORTS]
// [ENTITY: Function('ItemWithLabels.toDomainItemSummary')]
@@ -36,7 +22,7 @@ fun ItemWithLabels.toDomainItemSummary(): ItemSummary {
labels = this.labels.map { it.toDomainLabelOut() },
assetId = this.item.assetId,
isArchived = this.item.archived,
value = this.item.purchasePrice?.toDouble() ?: 0.0, // Assuming value maps to purchasePrice
value = this.item.purchasePrice ?: 0.0,
createdAt = this.item.createdAt ?: "",
updatedAt = "" // ItemEntity does not have updatedAt
)
@@ -119,25 +105,20 @@ fun Item.toItemEntity(): ItemEntity {
}
// [END_ENTITY: Function('Item.toItemEntity')]
// [ENTITY: Function('ItemOutDto.toDomainItem')]
// [RELATION: Function('ItemOutDto.toDomainItem')] -> [RETURNS] -> [DataClass('Item')]
/**
* @summary Маппер из ItemOutDto в доменную модель Item.
*/
fun ItemOutDto.toDomainItem(): Item {
return Item(
// [ENTITY: Function('ItemOut.toItemEntity')]
// [RELATION: Function('ItemOut.toItemEntity')] -> [RETURNS] -> [DataClass('ItemEntity')]
fun ItemOut.toItemEntity(): ItemEntity {
return ItemEntity(
id = this.id,
name = this.name,
description = this.description,
quantity = this.quantity,
image = this.images.firstOrNull()?.path,
location = this.location?.toDomain(),
labels = this.labels.map { Label(it.id, it.name) },
purchasePrice = this.purchasePrice?.toBigDecimal(),
locationId = this.location?.id,
purchasePrice = this.purchasePrice,
createdAt = this.createdAt,
archived = this.isArchived,
assetId = this.assetId,
fields = this.fields.map { it.toDomainCustomField() },
insured = this.insured ?: false,
lifetimeWarranty = this.lifetimeWarranty ?: false,
manufacturer = this.manufacturer,
@@ -148,7 +129,7 @@ fun ItemOutDto.toDomainItem(): Item {
purchaseTime = this.purchaseTime,
serialNumber = this.serialNumber,
soldNotes = this.soldNotes,
soldPrice = this.soldPrice?.toBigDecimal(),
soldPrice = this.soldPrice,
soldTime = this.soldTime,
soldTo = this.soldTo,
syncChildItemsLocations = this.syncChildItemsLocations ?: false,
@@ -156,104 +137,39 @@ fun ItemOutDto.toDomainItem(): Item {
warrantyExpires = this.warrantyExpires
)
}
// [END_ENTITY: Function('ItemOutDto.toDomainItem')]
// [END_ENTITY: Function('ItemOut.toItemEntity')]
// [ENTITY: Function('ItemCreate.toItemCreateDto')]
// [RELATION: Function('ItemCreate.toItemCreateDto')] -> [RETURNS] -> [DataClass('ItemCreateDto')]
/**
* @summary Маппер из доменной модели ItemCreate в ItemCreateDto.
*/
fun ItemCreate.toItemCreateDto(): ItemCreateDto {
return ItemCreateDto(
name = this.name,
description = this.description,
quantity = this.quantity,
archived = null, // Not applicable for creation
assetId = this.assetId,
insured = null, // Not applicable for creation
lifetimeWarranty = null, // Not applicable for creation
manufacturer = this.manufacturer,
modelNumber = this.modelNumber,
notes = this.notes,
parentId = this.parentId,
purchaseFrom = this.purchaseFrom,
purchasePrice = this.purchasePrice?.toDouble(),
purchaseTime = this.purchaseTime,
serialNumber = this.serialNumber,
soldNotes = null, // Not applicable for creation
soldPrice = null, // Not applicable for creation
soldTime = null, // Not applicable for creation
soldTo = null, // Not applicable for creation
syncChildItemsLocations = null, // Not applicable for creation
warrantyDetails = this.warrantyDetails,
warrantyExpires = this.warrantyExpires,
locationId = this.locationId,
labelIds = this.labelIds
// [ENTITY: Function('LabelEntity.toDomain')]
// [RELATION: Function('LabelEntity.toDomain')] -> [RETURNS] -> [DataClass('Label')]
fun LabelEntity.toDomain(): Label {
return Label(
id = this.id,
name = this.name
)
}
// [END_ENTITY: Function('ItemCreate.toItemCreateDto')]
// [ENTITY: Function('ItemUpdate.toItemUpdateDto')]
// [RELATION: Function('ItemUpdate.toItemUpdateDto')] -> [RETURNS] -> [DataClass('ItemUpdateDto')]
/**
* @summary Маппер из доменной модели ItemUpdate в ItemUpdateDto.
*/
fun ItemUpdate.toItemUpdateDto(): ItemUpdateDto {
return ItemUpdateDto(
name = this.name,
description = this.description,
quantity = this.quantity,
archived = this.archived,
assetId = this.assetId,
insured = this.insured,
lifetimeWarranty = this.lifetimeWarranty,
manufacturer = this.manufacturer,
modelNumber = this.modelNumber,
notes = this.notes,
parentId = this.parentId,
purchaseFrom = this.purchaseFrom,
purchasePrice = this.purchasePrice?.toDouble(),
purchaseTime = this.purchaseTime,
serialNumber = this.serialNumber,
soldNotes = this.soldNotes,
soldPrice = this.soldPrice?.toDouble(),
soldTime = this.soldTime,
soldTo = this.soldTo,
syncChildItemsLocations = this.syncChildItemsLocations,
warrantyDetails = this.warrantyDetails,
warrantyExpires = this.warrantyExpires,
locationId = this.locationId,
labelIds = this.labelIds
)
}
// [END_ENTITY: Function('ItemUpdate.toItemUpdateDto')]
// [END_ENTITY: Function('LabelEntity.toDomain')]
// [ENTITY: Function('LabelEntity.toDomainLabelOut')]
// [RELATION: Function('LabelEntity.toDomainLabelOut')] -> [RETURNS] -> [DataClass('LabelOut')]
/**
* @summary Преобразует [LabelEntity] (сущность БД) в [LabelOut] (доменную модель).
*/
fun LabelEntity.toDomainLabelOut(): LabelOut {
return LabelOut(
id = this.id,
name = this.name,
color = "#CCCCCC",
isArchived = false,
createdAt = "",
updatedAt = ""
color = "", // Not available in LabelEntity
isArchived = false, // Not available in LabelEntity
createdAt = "", // Not available in LabelEntity
updatedAt = "" // Not available in LabelEntity
)
}
// [END_ENTITY: Function('LabelEntity.toDomainLabelOut')]
// [ENTITY: Function('CustomFieldDto.toDomainCustomField')]
// [RELATION: Function('CustomFieldDto.toDomainCustomField')] -> [RETURNS] -> [DataClass('CustomField')]
/**
* @summary Преобразует [CustomFieldDto] (DTO API) в [CustomField] (доменную модель).
*/
fun CustomFieldDto.toDomainCustomField(): CustomField {
return CustomField(
name = this.name,
value = this.value
// [ENTITY: Function('Label.toEntity')]
// [RELATION: Function('Label.toEntity')] -> [RETURNS] -> [DataClass('LabelEntity')]
fun Label.toEntity(): LabelEntity {
return LabelEntity(
id = this.id,
name = this.name
)
}
// [END_ENTITY: Function('CustomFieldDto.toDomainCustomField')]
// [END_ENTITY: Function('Label.toEntity')]
// [END_FILE_Mapper.kt]

View File

@@ -34,7 +34,7 @@ object DatabaseModule {
context,
HomeboxDatabase::class.java,
HomeboxDatabase.DATABASE_NAME
).build()
).fallbackToDestructiveMigration().build()
}
// [END_ENTITY: Function('provideHomeboxDatabase')]

View File

@@ -0,0 +1,130 @@
// [PACKAGE] com.homebox.lens.data.mapper
// [FILE] DomainToDto.kt
// [SEMANTICS] data, mapper, domain, dto
package com.homebox.lens.data.mapper
// [IMPORTS]
import com.homebox.lens.data.api.dto.ItemCreateDto
import com.homebox.lens.data.api.dto.ItemUpdateDto
import com.homebox.lens.data.api.dto.LabelCreateDto
import com.homebox.lens.data.api.dto.LabelUpdateDto
import com.homebox.lens.data.api.dto.LocationCreateDto
import com.homebox.lens.data.api.dto.LocationUpdateDto
import com.homebox.lens.domain.model.ItemCreate as DomainItemCreate
import com.homebox.lens.domain.model.ItemUpdate as DomainItemUpdate
import com.homebox.lens.domain.model.LabelCreate as DomainLabelCreate
import com.homebox.lens.domain.model.LabelUpdate as DomainLabelUpdate
import com.homebox.lens.domain.model.LocationCreate as DomainLocationCreate
import com.homebox.lens.domain.model.LocationUpdate as DomainLocationUpdate
// [END_IMPORTS]
// [ENTITY: Function('DomainItemCreate.toDto')]
// [RELATION: Function('DomainItemCreate.toDto')] -> [RETURNS] -> [DataClass('ItemCreateDto')]
fun DomainItemCreate.toDto(): ItemCreateDto {
return ItemCreateDto(
name = this.name,
description = this.description,
quantity = this.quantity,
archived = this.archived,
assetId = this.assetId,
insured = this.insured,
lifetimeWarranty = this.lifetimeWarranty,
manufacturer = this.manufacturer,
modelNumber = this.modelNumber,
notes = this.notes,
parentId = this.parentId,
purchaseFrom = this.purchaseFrom,
purchasePrice = this.purchasePrice?.toDouble(),
purchaseTime = this.purchaseTime,
serialNumber = this.serialNumber,
soldNotes = this.soldNotes,
soldPrice = this.soldPrice?.toDouble(),
soldTime = this.soldTime,
soldTo = this.soldTo,
syncChildItemsLocations = this.syncChildItemsLocations,
warrantyDetails = this.warrantyDetails,
warrantyExpires = this.warrantyExpires,
locationId = this.locationId,
labelIds = this.labelIds
)
}
// [END_ENTITY: Function('ItemCreate.toDto')]
// [ENTITY: Function('DomainItemUpdate.toDto')]
// [RELATION: Function('DomainItemUpdate.toDto')] -> [RETURNS] -> [DataClass('ItemUpdateDto')]
fun DomainItemUpdate.toDto(): ItemUpdateDto {
return ItemUpdateDto(
name = this.name,
description = this.description,
quantity = this.quantity,
archived = this.archived,
assetId = this.assetId,
insured = this.insured,
lifetimeWarranty = this.lifetimeWarranty,
manufacturer = this.manufacturer,
modelNumber = this.modelNumber,
notes = this.notes,
parentId = this.parentId,
purchaseFrom = this.purchaseFrom,
purchasePrice = this.purchasePrice?.toDouble(),
purchaseTime = this.purchaseTime,
serialNumber = this.serialNumber,
soldNotes = this.soldNotes,
soldPrice = this.soldPrice?.toDouble(),
soldTime = this.soldTime,
soldTo = this.soldTo,
syncChildItemsLocations = this.syncChildItemsLocations,
warrantyDetails = this.warrantyDetails,
warrantyExpires = this.warrantyExpires,
locationId = this.locationId,
labelIds = this.labelIds
)
}
// [END_ENTITY: Function('ItemUpdate.toDto')]
// [ENTITY: Function('DomainLabelCreate.toDto')]
// [RELATION: Function('DomainLabelCreate.toDto')] -> [RETURNS] -> [DataClass('LabelCreateDto')]
fun DomainLabelCreate.toDto(): LabelCreateDto {
return LabelCreateDto(
name = this.name,
color = this.color,
description = this.description
)
}
// [END_ENTITY: Function('LabelCreate.toDto')]
// [ENTITY: Function('DomainLabelUpdate.toDto')]
// [RELATION: Function('DomainLabelUpdate.toDto')] -> [RETURNS] -> [DataClass('LabelUpdateDto')]
fun DomainLabelUpdate.toDto(): LabelUpdateDto {
return LabelUpdateDto(
name = this.name,
color = this.color,
description = this.description
)
}
// [END_ENTITY: Function('DomainLabelUpdate.toDto')]
// [ENTITY: Function('DomainLocationCreate.toDto')]
// [RELATION: Function('DomainLocationCreate.toDto')] -> [RETURNS] -> [DataClass('LocationCreateDto')]
fun DomainLocationCreate.toDto(): LocationCreateDto {
return LocationCreateDto(
name = this.name,
parentId = this.parentId,
color = null,
description = this.description
)
}
// [END_ENTITY: Function('DomainLocationCreate.toDto')]
// [ENTITY: Function('DomainLocationUpdate.toDto')]
// [RELATION: Function('DomainLocationUpdate.toDto')] -> [RETURNS] -> [DataClass('LocationUpdateDto')]
fun DomainLocationUpdate.toDto(): LocationUpdateDto {
return LocationUpdateDto(
name = this.name,
color = this.color,
description = this.description
)
}
// [END_ENTITY: Function('DomainLocationUpdate.toDto')]
// [END_FILE_DomainToDto.kt]

View File

@@ -0,0 +1,260 @@
// [PACKAGE] com.homebox.lens.data.mapper
// [FILE] DtoToDomain.kt
// [SEMANTICS] data, mapper, dto, domain
package com.homebox.lens.data.mapper
// [IMPORTS]
import com.homebox.lens.data.api.dto.*
import com.homebox.lens.domain.model.CustomField as DomainCustomField
import com.homebox.lens.domain.model.GroupStatistics as DomainGroupStatistics
import com.homebox.lens.domain.model.Image as DomainImage
import com.homebox.lens.domain.model.Item as DomainItem
import com.homebox.lens.domain.model.ItemAttachment as DomainItemAttachment
import com.homebox.lens.domain.model.ItemOut as DomainItemOut
import com.homebox.lens.domain.model.ItemSummary as DomainItemSummary
import com.homebox.lens.domain.model.Label as DomainLabel
import com.homebox.lens.domain.model.LabelOut as DomainLabelOut
import com.homebox.lens.domain.model.LabelSummary as DomainLabelSummary
import com.homebox.lens.domain.model.Location as DomainLocation
import com.homebox.lens.domain.model.LocationOut as DomainLocationOut
import com.homebox.lens.domain.model.LocationOutCount as DomainLocationOutCount
import com.homebox.lens.domain.model.MaintenanceEntry as DomainMaintenanceEntry
import com.homebox.lens.domain.model.PaginationResult as DomainPaginationResult
// [END_IMPORTS]
// [ENTITY: Function('ItemOutDto.toDomain')]
// [RELATION: Function('ItemOutDto.toDomain')] -> [RETURNS] -> [DataClass('DomainItemOut')]
fun ItemOutDto.toDomain(): DomainItemOut {
return DomainItemOut(
id = this.id,
name = this.name,
assetId = this.assetId,
description = this.description,
notes = this.notes,
serialNumber = this.serialNumber,
quantity = this.quantity,
isArchived = this.isArchived,
purchasePrice = this.purchasePrice,
purchaseTime = this.purchaseTime,
purchaseFrom = this.purchaseFrom,
warrantyExpires = this.warrantyExpires,
warrantyDetails = this.warrantyDetails,
lifetimeWarranty = this.lifetimeWarranty,
insured = this.insured,
manufacturer = this.manufacturer,
modelNumber = this.modelNumber,
soldPrice = this.soldPrice,
soldTime = this.soldTime,
soldTo = this.soldTo,
soldNotes = this.soldNotes,
syncChildItemsLocations = this.syncChildItemsLocations,
location = this.location?.toDomain(),
parent = this.parent?.toDomain(),
children = this.children.map { it.toDomain() },
labels = this.labels.map { it.toDomain() },
attachments = this.attachments.map { it.toDomain() },
images = this.images.map { it.toDomain() },
fields = this.fields.map { it.toDomain() },
maintenance = this.maintenance.map { it.toDomain() },
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
fun ItemOutDto.toDomainItem(): DomainItem {
return DomainItem(
id = this.id,
name = this.name,
description = this.description,
quantity = this.quantity,
image = this.images.firstOrNull { it.isPrimary }?.path,
location = this.location?.toDomainLocation(),
labels = this.labels.map { it.toDomainLabel() },
purchasePrice = this.purchasePrice,
createdAt = this.createdAt,
archived = this.isArchived,
assetId = this.assetId,
fields = this.fields.map { it.toDomain() },
insured = this.insured ?: false,
lifetimeWarranty = this.lifetimeWarranty ?: false,
manufacturer = this.manufacturer,
modelNumber = this.modelNumber,
notes = this.notes,
parentId = this.parent?.id,
purchaseFrom = this.purchaseFrom,
purchaseTime = this.purchaseTime,
serialNumber = this.serialNumber,
soldNotes = this.soldNotes,
soldPrice = this.soldPrice,
soldTime = this.soldTime,
soldTo = this.soldTo,
syncChildItemsLocations = this.syncChildItemsLocations ?: false,
warrantyDetails = this.warrantyDetails,
warrantyExpires = this.warrantyExpires
)
}
// [END_ENTITY: Function('ItemOutDto.toDomain')]
// [ENTITY: Function('ItemSummaryDto.toDomain')]
// [RELATION: Function('ItemSummaryDto.toDomain')] -> [RETURNS] -> [DataClass('DomainItemSummary')]
fun ItemSummaryDto.toDomain(): DomainItemSummary {
return DomainItemSummary(
id = this.id,
name = this.name,
assetId = this.assetId,
image = this.image?.toDomain(),
isArchived = this.isArchived,
labels = this.labels.map { it.toDomain() },
location = this.location?.toDomain(),
value = this.value,
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
// [END_ENTITY: Function('ItemSummaryDto.toDomain')]
// [ENTITY: Function('LabelOutDto.toDomain')]
// [RELATION: Function('LabelOutDto.toDomain')] -> [RETURNS] -> [DataClass('DomainLabelOut')]
fun LabelOutDto.toDomain(): DomainLabelOut {
return DomainLabelOut(
id = this.id,
name = this.name,
color = this.color ?: "",
isArchived = this.isArchived ?: false,
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
fun LabelOutDto.toDomainLabel(): DomainLabel {
return DomainLabel(
id = this.id,
name = this.name
)
}
// [END_ENTITY: Function('LabelOutDto.toDomain')]
// [ENTITY: Function('LocationOutDto.toDomain')]
// [RELATION: Function('LocationOutDto.toDomain')] -> [RETURNS] -> [DataClass('DomainLocationOut')]
fun LocationOutDto.toDomain(): DomainLocationOut {
return DomainLocationOut(
id = this.id,
name = this.name,
color = this.color,
isArchived = this.isArchived,
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
fun LocationOutDto.toDomainLocation(): DomainLocation {
return DomainLocation(
id = this.id,
name = this.name
)
}
// [END_ENTITY: Function('LocationOutDto.toDomain')]
// [ENTITY: Function('LocationOutCountDto.toDomain')]
// [RELATION: Function('LocationOutCountDto.toDomain')] -> [RETURNS] -> [DataClass('DomainLocationOutCount')]
fun LocationOutCountDto.toDomain(): DomainLocationOutCount {
return DomainLocationOutCount(
id = this.id,
name = this.name,
color = this.color ?: "",
isArchived = this.isArchived ?: false,
itemCount = this.itemCount,
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
// [END_ENTITY: Function('LocationOutCountDto.toDomain')]
// [ENTITY: Function('PaginationResultDto.toDomain')]
// [RELATION: Function('PaginationResultDto.toDomain')] -> [RETURNS] -> [DataClass('DomainPaginationResult')]
fun <T, R> PaginationResultDto<T>.toDomain(transform: (T) -> R): DomainPaginationResult<R> {
return DomainPaginationResult(
items = this.items.map(transform),
page = this.page,
pageSize = this.pageSize,
total = this.total
)
}
// [END_ENTITY: Function('PaginationResultDto.toDomain')]
// [ENTITY: Function('ImageDto.toDomain')]
// [RELATION: Function('ImageDto.toDomain')] -> [RETURNS] -> [DataClass('DomainImage')]
fun ImageDto.toDomain(): DomainImage {
return DomainImage(
id = this.id,
path = this.path,
isPrimary = this.isPrimary
)
}
// [END_ENTITY: Function('ImageDto.toDomain')]
// [ENTITY: Function('CustomFieldDto.toDomain')]
// [RELATION: Function('CustomFieldDto.toDomain')] -> [RETURNS] -> [DataClass('DomainCustomField')]
fun CustomFieldDto.toDomain(): DomainCustomField {
return DomainCustomField(
name = this.name,
value = this.value,
type = this.type
)
}
// [END_ENTITY: Function('CustomFieldDto.toDomain')]
// [ENTITY: Function('ItemAttachmentDto.toDomain')]
// [RELATION: Function('ItemAttachmentDto.toDomain')] -> [RETURNS] -> [DataClass('DomainItemAttachment')]
fun ItemAttachmentDto.toDomain(): DomainItemAttachment {
return DomainItemAttachment(
id = this.id,
name = this.name,
path = this.path,
type = this.type,
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
// [END_ENTITY: Function('ItemAttachmentDto.toDomain')]
// [ENTITY: Function('MaintenanceEntryDto.toDomain')]
// [RELATION: Function('MaintenanceEntryDto.toDomain')] -> [RETURNS] -> [DataClass('DomainMaintenanceEntry')]
fun MaintenanceEntryDto.toDomain(): DomainMaintenanceEntry {
return DomainMaintenanceEntry(
id = this.id,
itemId = this.itemId,
title = this.title,
details = this.details,
dueAt = this.dueAt,
completedAt = this.completedAt,
createdAt = this.createdAt,
updatedAt = this.updatedAt
)
}
// [END_ENTITY: Function('MaintenanceEntryDto.toDomain')]
// [ENTITY: Function('GroupStatisticsDto.toDomain')]
// [RELATION: Function('GroupStatisticsDto.toDomain')] -> [RETURNS] -> [DataClass('DomainGroupStatistics')]
fun GroupStatisticsDto.toDomain(): DomainGroupStatistics {
return DomainGroupStatistics(
items = this.totalItems,
labels = this.totalLabels,
locations = this.totalLocations,
totalValue = this.totalItemPrice
)
}
// [END_ENTITY: Function('GroupStatisticsDto.toDomain')]
// [ENTITY: Function('LabelSummaryDto.toDomain')]
// [RELATION: Function('LabelSummaryDto.toDomain')] -> [RETURNS] -> [DataClass('DomainLabelSummary')]
fun LabelSummaryDto.toDomain(): DomainLabelSummary {
return DomainLabelSummary(
id = this.id,
name = this.name,
color = this.color ?: ""
)
}
// [END_ENTITY: Function('LabelSummaryDto.toDomain')]
// [END_FILE_DtoToDomain.kt]

View File

@@ -5,15 +5,10 @@ package com.homebox.lens.data.repository
// [IMPORTS]
import com.homebox.lens.data.api.HomeboxApiService
import com.homebox.lens.data.api.dto.LabelCreateDto
import com.homebox.lens.data.api.dto.toDomain
import com.homebox.lens.data.api.dto.toDto
import com.homebox.lens.data.api.dto.LocationCreateDto
import com.homebox.lens.data.api.dto.LocationUpdateDto
import com.homebox.lens.data.api.dto.LabelUpdateDto
import com.homebox.lens.data.api.dto.LocationOutDto
import com.homebox.lens.data.db.dao.ItemDao
import com.homebox.lens.data.db.entity.toDomain
import com.homebox.lens.data.db.entity.toDomainItemSummary
import com.homebox.lens.data.mapper.toDomain
import com.homebox.lens.data.mapper.toDto
import com.homebox.lens.domain.model.*
import com.homebox.lens.domain.repository.ItemRepository
import kotlinx.coroutines.flow.Flow
@@ -151,43 +146,11 @@ class ItemRepositoryImpl @Inject constructor(
// [RELATION: Function('getRecentlyAddedItems')] -> [RETURNS] -> [DataStructure('Flow<List<ItemSummary>>')]
override fun getRecentlyAddedItems(limit: Int): Flow<List<ItemSummary>> {
return itemDao.getRecentlyAddedItems(limit).map { entities ->
entities.map { it.toDomain() }
entities.map { it.toDomainItemSummary() }
}
}
// [END_ENTITY: Function('getRecentlyAddedItems')]
}
// [END_ENTITY: Repository('ItemRepositoryImpl')]
// [ENTITY: Function('toDto')]
// [RELATION: Function('toDto')] -> [RETURNS] -> [DataClass('LabelCreateDto')]
private fun LabelCreate.toDto(): LabelCreateDto {
return LabelCreateDto(
name = this.name,
color = this.color,
description = null // Description is not part of the domain model for creation.
)
}
// [END_ENTITY: Function('toDto')]
// [ENTITY: Function('toDto')]
// [RELATION: Function('toDto')] -> [RETURNS] -> [DataClass('LocationCreateDto')]
private fun LocationCreate.toDto(): LocationCreateDto {
return LocationCreateDto(
name = this.name,
color = this.color,
description = null // Description is not part of the domain model for creation.
)
}
// [END_ENTITY: Function('toDto')]
// [ENTITY: Function('toDto')]
// [RELATION: Function('toDto')] -> [RETURNS] -> [DataClass('LabelUpdateDto')]
private fun LabelUpdate.toDto(): LabelUpdateDto {
return LabelUpdateDto(
name = this.name,
color = this.color
)
}
// [END_ENTITY: Function('toDto')]
// [END_FILE_ItemRepositoryImpl.kt]