Skip to content

Instantly share code, notes, and snippets.

@sagikazarmark
Created August 11, 2020 15:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sagikazarmark/298152c21f9b304331377bc13aa63ba2 to your computer and use it in GitHub Desktop.
Save sagikazarmark/298152c21f9b304331377bc13aa63ba2 to your computer and use it in GitHub Desktop.
User service example
package user
import "errors"
type IDService interface {
VerifyID(id string) error
}
type NewUser struct {
Username string
Password string
IDNumber string
}
type UserRepository interface {
CheckUsername(username string) error
SaveUser(newUser NewUser) error
}
type UserService struct {
IDService IDService
Users UserRepository
}
func (s UserService) RegisterUser(newUser NewUser) error {
// Business validation
if newUser.Username == "" || newUser.Password == "" {
errors.New("username or password is empty")
}
// Validate there is no such username
if err := s.Users.CheckUsername(newUser.Username); err != nil {
return err
}
// Call an external (government?) service to verify the ID number
if err := s.IDService.VerifyID(newUser.IDNumber); err != nil {
return err
}
// Save the user in the persistent store
if err := s.Users.SaveUser(newUser); err != nil {
return err
}
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment