backend-service/internal/repositories/interfaces.go

65 lines
2.2 KiB
Go
Raw Normal View History

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)
}