Files
budget-backend/internal/user/service.go

59 lines
1.3 KiB
Go

package user
import (
"nos-comptes/internal/storage/dao"
"nos-comptes/internal/storage/model"
"nos-comptes/internal/utils"
)
type Service struct {
db *Database
}
func NewService(database *Database) *Service {
return &Service{db: database}
}
func (s *Service) GetUserById(userId string) (*User, error) {
user, err := s.db.GetUsersByID(userId)
if e, ok := err.(*dao.Error); ok {
utils.GetLogger().Warn(err)
switch {
case e.Type == dao.ErrTypeNotFound:
return nil, &model.ErrNotFound
default:
return nil, &model.ErrInternalServer
}
} else if err != nil {
return nil, &model.ErrInternalServer
}
if user == nil {
return nil, &model.ErrNotFound
}
return user, nil
}
func (us *Service) GetUserFromGoogleID(googleUserID string) (*User, error) {
user, err := us.db.GetUsersByGoogleID(googleUserID)
if err != nil {
utils.GetLogger().Warn(err)
if castedError, ok := err.(*dao.Error); ok {
switch castedError.Type {
case dao.ErrTypeNotFound:
return nil, &model.ErrNotFound
default:
return nil, &model.ErrInternalServer
}
}
return nil, &model.ErrInternalServer
}
return user, nil
}
func (us *Service) CreateUserFromGoogleToken(id string, email string) (*User, error) {
user := &User{UserEditable: UserEditable{Email: email}, GoogleID: id}
err := us.db.CreateUser(user)
return user, err
}