Skip to main content
Glama
main.go2.92 kB
package main import ( "fmt" "time" ) // User represents a user in the system type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` Active bool `json:"active"` CreatedAt time.Time `json:"created_at"` } // GetDisplayName returns a formatted display name for the user func (u *User) GetDisplayName() string { return fmt.Sprintf("%s <%s>", u.Name, u.Email) } // Validate checks if the user data is valid func (u *User) Validate() error { if u.Name == "" { return fmt.Errorf("name is required") } if u.Email == "" { return fmt.Errorf("email is required") } return nil } // UserRepository defines the interface for user data access type UserRepository interface { // Create creates a new user Create(user *User) error // GetByID retrieves a user by their ID GetByID(id int) (*User, error) // List returns all users List() ([]*User, error) // Delete removes a user Delete(id int) error } // UserManager manages user operations type UserManager struct { repository UserRepository cache map[int]*User } // NewUserManager creates a new UserManager instance func NewUserManager(repo UserRepository) *UserManager { return &UserManager{ repository: repo, cache: make(map[int]*User), } } // CreateUser creates a new user in the system func (m *UserManager) CreateUser(name, email string) (*User, error) { user := &User{ Name: name, Email: email, Active: true, CreatedAt: time.Now(), } if err := user.Validate(); err != nil { return nil, fmt.Errorf("validation failed: %w", err) } if err := m.repository.Create(user); err != nil { return nil, fmt.Errorf("failed to create user: %w", err) } m.cache[user.ID] = user return user, nil } // GetUser retrieves a user by ID func (m *UserManager) GetUser(id int) (*User, error) { // Check cache first if user, ok := m.cache[id]; ok { return user, nil } // Fetch from repository user, err := m.repository.GetByID(id) if err != nil { return nil, err } // Update cache m.cache[id] = user return user, nil } // ListActiveUsers returns all active users func (m *UserManager) ListActiveUsers() ([]*User, error) { users, err := m.repository.List() if err != nil { return nil, err } activeUsers := make([]*User, 0) for _, user := range users { if user.Active { activeUsers = append(activeUsers, user) } } return activeUsers, nil } // FormatUserList formats a list of users as a string func FormatUserList(users []*User) string { result := "" for i, user := range users { if i > 0 { result += "\n" } result += user.GetDisplayName() } return result } // SendNotification sends a notification to a user func SendNotification(user *User, message string) error { fmt.Printf("Sending to %s: %s\n", user.Email, message) return nil } func main() { fmt.Println("User Manager Example") }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LiL-Loco/documentation-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server