fix: Resolve build and runtime errors
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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')]
|
||||
@@ -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')]
|
||||
@@ -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,
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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')]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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')]
|
||||
@@ -24,7 +24,7 @@ import com.homebox.lens.data.db.entity.*
|
||||
LocationEntity::class,
|
||||
ItemLabelCrossRef::class
|
||||
],
|
||||
version = 1,
|
||||
version = 2,
|
||||
exportSchema = false
|
||||
)
|
||||
@TypeConverters(Converters::class)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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]
|
||||
@@ -34,7 +34,7 @@ object DatabaseModule {
|
||||
context,
|
||||
HomeboxDatabase::class.java,
|
||||
HomeboxDatabase.DATABASE_NAME
|
||||
).build()
|
||||
).fallbackToDestructiveMigration().build()
|
||||
}
|
||||
// [END_ENTITY: Function('provideHomeboxDatabase')]
|
||||
|
||||
|
||||
130
data/src/main/java/com/homebox/lens/data/mapper/DomainToDto.kt
Normal file
130
data/src/main/java/com/homebox/lens/data/mapper/DomainToDto.kt
Normal 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]
|
||||
260
data/src/main/java/com/homebox/lens/data/mapper/DtoToDomain.kt
Normal file
260
data/src/main/java/com/homebox/lens/data/mapper/DtoToDomain.kt
Normal 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]
|
||||
@@ -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]
|
||||
Reference in New Issue
Block a user