initial version
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
import Foundation
|
||||
|
||||
class SampleDataService {
|
||||
static let shared = SampleDataService()
|
||||
|
||||
private init() {}
|
||||
|
||||
func seedSampleData() {
|
||||
let context = CoreDataStack.shared.viewContext
|
||||
let sourceRepository = InvestmentSourceRepository(context: context)
|
||||
guard sourceRepository.sourceCount == 0 else { return }
|
||||
|
||||
let categoryRepository = CategoryRepository(context: context)
|
||||
categoryRepository.createDefaultCategoriesIfNeeded()
|
||||
|
||||
let accountRepository = AccountRepository(context: context)
|
||||
let account = accountRepository.createDefaultAccountIfNeeded()
|
||||
|
||||
let snapshotRepository = SnapshotRepository(context: context)
|
||||
let goalRepository = GoalRepository(context: context)
|
||||
let transactionRepository = TransactionRepository(context: context)
|
||||
|
||||
let categories = categoryRepository.categories
|
||||
let stocksCategory = categories.first { $0.name == "Stocks" } ?? categories.first!
|
||||
let cryptoCategory = categories.first { $0.name == "Crypto" } ?? categories.first!
|
||||
let realEstateCategory = categories.first { $0.name == "Real Estate" } ?? categories.first!
|
||||
|
||||
let stocks = sourceRepository.createSource(
|
||||
name: "Index Fund",
|
||||
category: stocksCategory,
|
||||
account: account
|
||||
)
|
||||
let crypto = sourceRepository.createSource(
|
||||
name: "BTC",
|
||||
category: cryptoCategory,
|
||||
account: account
|
||||
)
|
||||
let realEstate = sourceRepository.createSource(
|
||||
name: "Rental Property",
|
||||
category: realEstateCategory,
|
||||
account: account
|
||||
)
|
||||
|
||||
seedSnapshots(for: stocks, baseValue: 12000, monthlyIncrease: 450, repository: snapshotRepository)
|
||||
seedSnapshots(for: crypto, baseValue: 3000, monthlyIncrease: 250, repository: snapshotRepository)
|
||||
seedSnapshots(for: realEstate, baseValue: 80000, monthlyIncrease: 600, repository: snapshotRepository)
|
||||
|
||||
seedMonthlyNotes()
|
||||
|
||||
transactionRepository.createTransaction(
|
||||
source: stocks,
|
||||
type: .buy,
|
||||
date: Calendar.current.date(byAdding: .month, value: -3, to: Date()) ?? Date(),
|
||||
shares: 10,
|
||||
price: 400,
|
||||
amount: nil,
|
||||
notes: "Sample buy"
|
||||
)
|
||||
|
||||
_ = goalRepository.createGoal(
|
||||
name: "1M Goal",
|
||||
targetAmount: 1_000_000,
|
||||
targetDate: nil,
|
||||
account: account
|
||||
)
|
||||
}
|
||||
|
||||
private func seedSnapshots(
|
||||
for source: InvestmentSource,
|
||||
baseValue: Decimal,
|
||||
monthlyIncrease: Decimal,
|
||||
repository: SnapshotRepository
|
||||
) {
|
||||
let calendar = Calendar.current
|
||||
for monthOffset in (0..<6).reversed() {
|
||||
let date = calendar.date(byAdding: .month, value: -monthOffset, to: Date()) ?? Date()
|
||||
let value = baseValue + Decimal(monthOffset) * monthlyIncrease
|
||||
repository.createSnapshot(
|
||||
for: source,
|
||||
date: date,
|
||||
value: value,
|
||||
contribution: monthOffset == 0 ? monthlyIncrease : nil,
|
||||
notes: nil
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private func seedMonthlyNotes() {
|
||||
let calendar = Calendar.current
|
||||
let notes = [
|
||||
"Rebalanced slightly toward equities. Stayed calm despite noise.",
|
||||
"Focused on contributions. No major changes.",
|
||||
"Reviewed allocation drift and decided to hold positions."
|
||||
]
|
||||
|
||||
for (index, note) in notes.enumerated() {
|
||||
let date = calendar.date(byAdding: .month, value: -index, to: Date()) ?? Date()
|
||||
MonthlyCheckInStore.setNote(note, for: date)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user