90 lines
3 KiB
Swift
90 lines
3 KiB
Swift
import Foundation
|
||
|
||
class AccountModel: ObservableObject, Identifiable, Codable {
|
||
let id: String
|
||
@Published var name: String
|
||
@Published var balance: Double
|
||
@Published var type: AccountType
|
||
@Published var icon: String
|
||
@Published var isDefault: Bool
|
||
@Published var currency: AppSettings.Currency
|
||
@Published var isActive: Bool
|
||
@Published var isArchived: Bool
|
||
|
||
var balanceInDefaultCurrency: Double {
|
||
// TODO: Implement currency conversion
|
||
// Пока просто возвращаем баланс без конвертации
|
||
balance
|
||
}
|
||
|
||
static let sampleData = AccountModel(
|
||
name: "Sample Account",
|
||
balance: 1000,
|
||
type: .cash,
|
||
icon: "creditcard",
|
||
isDefault: true,
|
||
currency: .usd,
|
||
isActive: true,
|
||
isArchived: false
|
||
)
|
||
|
||
enum CodingKeys: String, CodingKey {
|
||
case id
|
||
case name
|
||
case balance
|
||
case type
|
||
case icon
|
||
case isDefault
|
||
case currency
|
||
case isActive
|
||
case isArchived
|
||
}
|
||
|
||
init(
|
||
id: String = UUID().uuidString,
|
||
name: String,
|
||
balance: Double = 0,
|
||
type: AccountType = .cash,
|
||
icon: String = "creditcard",
|
||
isDefault: Bool = false,
|
||
currency: AppSettings.Currency = .usd,
|
||
isActive: Bool = true,
|
||
isArchived: Bool = false
|
||
) {
|
||
self.id = id
|
||
self.name = name
|
||
self.balance = balance
|
||
self.type = type
|
||
self.icon = icon
|
||
self.isDefault = isDefault
|
||
self.currency = currency
|
||
self.isActive = isActive
|
||
self.isArchived = isArchived
|
||
}
|
||
|
||
required init(from decoder: Decoder) throws {
|
||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||
id = try container.decode(String.self, forKey: .id)
|
||
name = try container.decode(String.self, forKey: .name)
|
||
balance = try container.decode(Double.self, forKey: .balance)
|
||
type = try container.decode(AccountType.self, forKey: .type)
|
||
icon = try container.decode(String.self, forKey: .icon)
|
||
isDefault = try container.decode(Bool.self, forKey: .isDefault)
|
||
currency = try container.decode(AppSettings.Currency.self, forKey: .currency)
|
||
isActive = try container.decode(Bool.self, forKey: .isActive)
|
||
isArchived = try container.decode(Bool.self, forKey: .isArchived)
|
||
}
|
||
|
||
func encode(to encoder: Encoder) throws {
|
||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||
try container.encode(id, forKey: .id)
|
||
try container.encode(name, forKey: .name)
|
||
try container.encode(balance, forKey: .balance)
|
||
try container.encode(type, forKey: .type)
|
||
try container.encode(icon, forKey: .icon)
|
||
try container.encode(isDefault, forKey: .isDefault)
|
||
try container.encode(currency, forKey: .currency)
|
||
try container.encode(isActive, forKey: .isActive)
|
||
try container.encode(isArchived, forKey: .isArchived)
|
||
}
|
||
}
|