Files
luminic-space-back-v2/src/main/kotlin/space/luminic/finance/models/Goal.kt
2025-10-31 15:31:55 +03:00

48 lines
1.4 KiB
Kotlin

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<GoalComponent> = emptyList(),
val transactions: List<Transaction> = 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("Прочее", "💸")
}
}