package space.luminic.finance.models import org.springframework.data.annotation.CreatedBy import org.springframework.data.annotation.CreatedDate import org.springframework.data.annotation.LastModifiedBy import org.springframework.data.annotation.LastModifiedDate import java.math.BigDecimal import java.time.Instant import java.time.LocalDate data class Goal( var id: Int? = null, val space: Space? = null, val type: GoalType, val name: String, val description: String? = null, val amount: BigDecimal, val components: List = emptyList(), val transactions: List = emptyList(), val untilDate: LocalDate, @CreatedBy var createdBy: User? = null, @CreatedDate var createdAt: Instant? = null, @LastModifiedBy var updatedBy: User? = null, @LastModifiedDate var updatedAt: Instant? = null, ) { var currentAmount: BigDecimal = { this.transactions.sumOf { it.amount } } as BigDecimal data class GoalComponent( val id: Int? = null, val name: String, val amount: BigDecimal, val isDone: Boolean = false, val date: LocalDate = LocalDate.now(), ) enum class GoalType(val displayName: String, val icon: String) { AUTO("Авто", "🏎️"), VACATION("Отпуск", "🏖️"), GOODS("Покупка", "🛍️"), OTHER("Прочее", "💸") } }