package repositories import ( "time" "attune-heart-therapy/internal/models" ) // BookingStats represents booking statistics for admin dashboard type BookingStats struct { TotalBookings int64 `json:"total_bookings"` UpcomingBookings int64 `json:"upcoming_bookings"` CompletedBookings int64 `json:"completed_bookings"` CancelledBookings int64 `json:"cancelled_bookings"` } // FinancialStats represents financial statistics for admin reports type FinancialStats struct { TotalRevenue float64 `json:"total_revenue"` TotalBookings int64 `json:"total_bookings"` AverageBooking float64 `json:"average_booking"` } // UserRepository handles user data persistence type UserRepository interface { Create(user *models.User) error GetByID(id uint) (*models.User, error) GetByEmail(email string) (*models.User, error) Update(user *models.User) error GetActiveUsersCount() (int64, error) GetAllUsers(limit, offset int) ([]models.User, int64, error) } // BookingRepository handles booking data persistence type BookingRepository interface { Create(booking *models.Booking) error GetByID(id uint) (*models.Booking, error) GetByUserID(userID uint) ([]models.Booking, error) GetByPaymentID(paymentID string) (*models.Booking, error) Update(booking *models.Booking) error Delete(id uint) error GetUpcomingBookings() ([]models.Booking, error) GetAllBookings(limit, offset int) ([]models.Booking, int64, error) GetBookingStats() (*BookingStats, error) GetFinancialStats(startDate, endDate time.Time) (*FinancialStats, error) } // ScheduleRepository handles schedule data persistence type ScheduleRepository interface { Create(schedule *models.Schedule) error GetAvailable(date time.Time) ([]models.Schedule, error) Update(schedule *models.Schedule) error GetByID(id uint) (*models.Schedule, error) IncrementBookedCount(scheduleID uint) error DecrementBookedCount(scheduleID uint) error } // NotificationRepository handles notification data persistence type NotificationRepository interface { Create(notification *models.Notification) error GetByID(id uint) (*models.Notification, error) Update(notification *models.Notification) error GetPendingNotifications() ([]models.Notification, error) }