64bfe80806
Implementation to make all tests pass: Value Objects: - HabitType: BOOLEAN, COUNTER, VALUE with validation - Frequency: DAILY, WEEKLY, MONTHLY with validation Entities: - User: email, password hash, timezone with defaults - Habit: tracking habits with type, frequency, carry-over - HabitEntry: recording habit completions with soft delete Repositories (interfaces): - UserRepository: CRUD operations for users - HabitRepository: CRUD operations for habits - HabitEntryRepository: CRUD operations for entries Shared: - Common error definitions for domain layer All domain tests now pass.
31 lines
576 B
Go
31 lines
576 B
Go
package entities
|
|
|
|
import "time"
|
|
|
|
type HabitEntry struct {
|
|
ID string
|
|
HabitID string
|
|
ScheduledDate time.Time
|
|
CompletedAt time.Time
|
|
Value *float64
|
|
DeletedAt *time.Time
|
|
}
|
|
|
|
func NewHabitEntry(habitID string, scheduledDate time.Time, value *float64) *HabitEntry {
|
|
return &HabitEntry{
|
|
HabitID: habitID,
|
|
ScheduledDate: scheduledDate,
|
|
CompletedAt: time.Now(),
|
|
Value: value,
|
|
}
|
|
}
|
|
|
|
func (e *HabitEntry) Delete() {
|
|
now := time.Now()
|
|
e.DeletedAt = &now
|
|
}
|
|
|
|
func (e *HabitEntry) IsDeleted() bool {
|
|
return e.DeletedAt != nil
|
|
}
|