auth/internal/client/repository/memory/memory_client.go

44 lines
989 B
Go

package memory
import (
"context"
"fmt"
"path"
"sync"
"source.toby3d.me/toby3d/auth/internal/client"
"source.toby3d.me/toby3d/auth/internal/domain"
)
type memoryClientRepository struct {
store *sync.Map
}
const DefaultPathPrefix string = "clients"
func NewMemoryClientRepository(store *sync.Map) client.Repository {
return &memoryClientRepository{
store: store,
}
}
func (repo *memoryClientRepository) Create(ctx context.Context, client *domain.Client) error {
repo.store.Store(path.Join(DefaultPathPrefix, client.ID.String()), client)
return nil
}
func (repo *memoryClientRepository) Get(ctx context.Context, id *domain.ClientID) (*domain.Client, error) {
src, ok := repo.store.Load(path.Join(DefaultPathPrefix, id.String()))
if !ok {
return nil, fmt.Errorf("cannot find client in store: %w", client.ErrNotExist)
}
c, ok := src.(*domain.Client)
if !ok {
return nil, fmt.Errorf("cannot decode client from store: %w", client.ErrNotExist)
}
return c, nil
}