add init functions
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user