1
1
mirror of https://github.com/theoludwig/p61-project.git synced 2024-07-17 07:00:12 +02:00
p61-project/domain/entities/HabitsTracker.ts

78 lines
1.9 KiB
TypeScript
Raw Normal View History

import type { GoalFrequency } from "./Goal"
2024-04-05 00:08:40 +02:00
import type { Habit } from "./Habit"
import { HabitHistory } from "./HabitHistory"
2024-03-16 00:36:44 +01:00
2024-03-22 10:23:28 +01:00
export interface HabitsTrackerData {
habitsHistory: {
[key in GoalFrequency]: HabitHistory[]
}
2024-03-16 00:36:44 +01:00
}
2024-03-22 10:23:28 +01:00
export class HabitsTracker implements HabitsTrackerData {
public habitsHistory: HabitsTrackerData["habitsHistory"]
2024-03-16 00:36:44 +01:00
2024-03-22 10:23:28 +01:00
public constructor(options: HabitsTrackerData) {
2024-03-16 00:36:44 +01:00
const { habitsHistory } = options
this.habitsHistory = habitsHistory
}
public static default(): HabitsTracker {
return new HabitsTracker({
habitsHistory: {
daily: [],
weekly: [],
monthly: [],
},
})
2024-03-16 00:36:44 +01:00
}
2024-04-05 00:08:40 +02:00
public addHabit(habit: Habit): void {
this.habitsHistory[habit.goal.frequency].push(
new HabitHistory({
habit,
progressHistory: [],
}),
)
}
// public setHabitProgress(options: SetHabitProgressOptions): void {
// const { date, goalProgress, habitHistory } = options
// if (goalProgress.isBoolean()) {
// const currentHabitProgress = habitHistory.getProgressesByDate(date)[0]
// if (currentHabitProgress == null) {
// habitHistory.progressHistory = [
// ...habitHistory.progressHistory,
// new HabitProgress({
// date,
// goalProgress,
// habitId,
// id,
// }),
// ]
// }
// }
// }
2024-04-11 13:07:17 +02:00
public editHabit(habit: Habit): void {
const habitHistory = this.getHabitHistoryById(habit.id)
if (habitHistory == null) {
return
2024-04-11 12:32:09 +02:00
}
2024-04-11 13:07:17 +02:00
habitHistory.habit = habit
2024-04-11 12:32:09 +02:00
}
public getAllHabitsHistory(): HabitHistory[] {
return [
...this.habitsHistory.daily,
...this.habitsHistory.weekly,
...this.habitsHistory.monthly,
]
}
public getHabitHistoryById(id: Habit["id"]): HabitHistory | undefined {
return this.getAllHabitsHistory().find((habitHistory) => {
return habitHistory.habit.id === id
})
}
2024-03-16 00:36:44 +01:00
}