add init functions

This commit is contained in:
2025-12-19 14:26:28 +02:00
parent c0a187d461
commit cd465d42a3
6 changed files with 81 additions and 1 deletions

View File

@@ -10,9 +10,13 @@ import (
type TokenStore interface { type TokenStore interface {
revoke(tokenID string, expiresAt time.Time) error revoke(tokenID string, expiresAt time.Time) error
isRevoked(tokenID string) (bool, error) isRevoked(tokenID string) (bool, error)
init() error
} }
type Service struct { type Service struct {
initialized bool
cfg *config.Auth cfg *config.Auth
store TokenStore store TokenStore
} }
@@ -27,6 +31,24 @@ func NewTokenService(cfg *config.Auth, store TokenStore) (*Service, error) {
return &Service{cfg: cfg, store: store}, nil return &Service{cfg: cfg, store: store}, nil
} }
func (s *Service) isInitialized() bool {
return s.initialized
}
func (s *Service) Init() error {
if s.isInitialized() {
return nil
}
err := s.store.init()
if err != nil {
return fmt.Errorf("failed to initialize token store: %w", err)
}
s.initialized = true
return nil
}
func (s *Service) Revoke(jti string, exp time.Time) error { func (s *Service) Revoke(jti string, exp time.Time) error {
return s.store.revoke(jti, exp) return s.store.revoke(jti, exp)
} }

View File

@@ -43,3 +43,13 @@ func (s *SQLiteTokenStore) isRevoked(tokenID string) (bool, error) {
} }
return count > 0, nil return count > 0, nil
} }
func (s *SQLiteTokenStore) init() error {
// AutoMigrate models
err := s.db.AutoMigrate(&Token{})
if err != nil {
return fmt.Errorf("failed to migrate Token model: %w", err)
}
return nil
}

View File

@@ -43,3 +43,13 @@ func (s *GormUserStore) Update(user *User) error {
func (s *GormUserStore) Delete(id int64) error { func (s *GormUserStore) Delete(id int64) error {
return s.db.Delete(&User{}, id).Error return s.db.Delete(&User{}, id).Error
} }
func (s *GormUserStore) init() error {
// AutoMigrate models
err := s.db.AutoMigrate(&User{})
if err != nil {
return fmt.Errorf("failed to migrate User model: %w", err)
}
return nil
}

View File

@@ -1,11 +1,15 @@
package user package user
import "gorm.io/gorm" import (
"git.oblat.lv/alex/triggerssmith/internal/acl"
"gorm.io/gorm"
)
type User struct { type User struct {
ID int64 `gorm:"primaryKey"` ID int64 `gorm:"primaryKey"`
Username string `gorm:"uniqueIndex;not null"` Username string `gorm:"uniqueIndex;not null"`
Email string `gorm:"uniqueIndex;not null"` Email string `gorm:"uniqueIndex;not null"`
Password string `gorm:"not null"` Password string `gorm:"not null"`
Roles []acl.Role `gorm:"many2many:user_roles"`
DeletedAt gorm.DeletedAt `gorm:"index"` DeletedAt gorm.DeletedAt `gorm:"index"`
} }

View File

@@ -3,6 +3,8 @@ package user
import "fmt" import "fmt"
type Service struct { type Service struct {
initialized bool
store UserCRUD store UserCRUD
} }
@@ -15,18 +17,48 @@ func NewService(store UserCRUD) (*Service, error) {
}, nil }, nil
} }
func (s *Service) isInitialized() bool {
return s.initialized
}
func (s *Service) Init() error {
if s.isInitialized() {
return nil
}
err := s.store.init()
if err != nil {
return fmt.Errorf("failed to initialize user store: %w", err)
}
s.initialized = true
return nil
}
func (s *Service) Create(user *User) error { func (s *Service) Create(user *User) error {
if !s.isInitialized() {
return fmt.Errorf("user service is not initialized")
}
return s.store.Create(user) return s.store.Create(user)
} }
func (s *Service) GetBy(by, value string) (*User, error) { func (s *Service) GetBy(by, value string) (*User, error) {
if !s.isInitialized() {
return nil, fmt.Errorf("user service is not initialized")
}
return s.store.GetBy(by, value) return s.store.GetBy(by, value)
} }
func (s *Service) Update(user *User) error { func (s *Service) Update(user *User) error {
if !s.isInitialized() {
return fmt.Errorf("user service is not initialized")
}
return s.store.Update(user) return s.store.Update(user)
} }
func (s *Service) Delete(id int64) error { func (s *Service) Delete(id int64) error {
if !s.isInitialized() {
return fmt.Errorf("user service is not initialized")
}
return s.store.Delete(id) return s.store.Delete(id)
} }

View File

@@ -5,4 +5,6 @@ type UserCRUD interface {
GetBy(by, value string) (*User, error) GetBy(by, value string) (*User, error)
Update(user *User) error Update(user *User) error
Delete(id int64) error Delete(id int64) error
init() error
} }