61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package entities
|
|
|
|
import "time"
|
|
|
|
// Counter represents a counter entity
|
|
type Counter struct {
|
|
ID int `json:"id" db:"id"`
|
|
UserID int `json:"user_id" db:"user_id"`
|
|
Name string `json:"name" db:"name"`
|
|
Description string `json:"description" db:"description"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
|
}
|
|
|
|
// CounterEntry represents a single increment/decrement entry
|
|
type CounterEntry struct {
|
|
ID int `json:"id" db:"id"`
|
|
CounterID int `json:"counter_id" db:"counter_id"`
|
|
Value int `json:"value" db:"value"` // +1 for increment, -1 for decrement
|
|
Date time.Time `json:"date" db:"date"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
}
|
|
|
|
// CounterWithStats represents a counter with aggregated statistics
|
|
type CounterWithStats struct {
|
|
Counter
|
|
TotalValue int `json:"total_value"`
|
|
TodayValue int `json:"today_value"`
|
|
WeekValue int `json:"week_value"`
|
|
MonthValue int `json:"month_value"`
|
|
EntryCount int `json:"entry_count"`
|
|
}
|
|
|
|
// DailyStat represents daily statistics for a counter
|
|
type DailyStat struct {
|
|
Date time.Time `json:"date"`
|
|
Total int `json:"total"`
|
|
}
|
|
|
|
// Validate validates counter data
|
|
func (c *Counter) Validate() error {
|
|
if c.Name == "" {
|
|
return ErrInvalidCounterName
|
|
}
|
|
if c.UserID <= 0 {
|
|
return ErrInvalidUserID
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Validate validates counter entry data
|
|
func (ce *CounterEntry) Validate() error {
|
|
if ce.CounterID <= 0 {
|
|
return ErrInvalidCounterID
|
|
}
|
|
if ce.Value == 0 {
|
|
return ErrInvalidEntryValue
|
|
}
|
|
return nil
|
|
}
|