backend-service/internal/repositories/interfaces.go
ats-tech25 8309f38999 feat(auth): Implement comprehensive authentication and authorization middleware
- Add JWT authentication middleware with token validation
- Implement user context extraction methods for user ID, email, and admin status
- Create admin middleware to restrict access to admin-only routes
- Add convenience method to combine authentication and admin authorization
- Update auth middleware to handle token parsing, validation, and context setting
- Enhance error handling for various authentication scenarios
- Add new JWT service and related dependencies in go.mod
2025-11-05 15:21:56 +00:00

45 lines
1.3 KiB
Go

package repositories
import (
"time"
"attune-heart-therapy/internal/models"
)
// 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)
}
// 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)
Update(booking *models.Booking) error
Delete(id uint) error
GetUpcomingBookings() ([]models.Booking, 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)
}