Ctrl K
ComunidadGuías…

store/memo_share.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package store

import (
	"context"
	"errors"
)

// MemoShare is an access grant that permits read-only access to a memo via a bearer token.
type MemoShare struct {
	ID        int32
	UID       string
	MemoID    int32
	CreatorID int32
	CreatedTs int64
	ExpiresTs *int64 // nil means the share never expires
	Policy    *MemoWritePolicy
}

// FindMemoShare is used to filter memo shares in list/get queries.
type FindMemoShare struct {
	ID        *int32
	UID       *string
	MemoID    *int32
	CreatorID *int32
}

// DeleteMemoShare identifies a share grant to remove.
type DeleteMemoShare struct {
	ID     *int32
	UID    *string
	MemoID *int32
	// Policy is required for transport-facing revocation and is revalidated in
	// the same transaction as the delete.
	Policy *MemoWritePolicy
}

// CreateMemoShare creates a new share grant.
func (s *Store) CreateMemoShare(ctx context.Context, create *MemoShare) (*MemoShare, error) {
	if create == nil {
		return nil, errors.New("memo share is required")
	}
	if err := validateMemoWritePolicy(create.Policy); err != nil {
		return nil, err
	}
	if create.Policy == nil {
		return s.driver.CreateMemoShare(ctx, create)
	}
	return s.driver.CreateMemoShare(ctx, create)
}

// ListMemoShares returns all share grants matching the filter.
func (s *Store) ListMemoShares(ctx context.Context, find *FindMemoShare) ([]*MemoShare, error) {
	return s.driver.ListMemoShares(ctx, find)
}

// GetMemoShare returns the first share grant matching the filter, or nil if none found.
func (s *Store) GetMemoShare(ctx context.Context, find *FindMemoShare) (*MemoShare, error) {
	return s.driver.GetMemoShare(ctx, find)
}

// DeleteMemoShare removes a share grant.
func (s *Store) DeleteMemoShare(ctx context.Context, delete *DeleteMemoShare) error {
	if delete == nil {
		return errors.New("memo share deletion is required")
	}
	if delete.ID == nil && delete.UID == nil {
		return errors.New("memo share deletion requires id or uid")
	}
	if err := validateMemoWritePolicy(delete.Policy); err != nil {
		return err
	}
	if delete.Policy == nil {
		return s.driver.DeleteMemoShare(ctx, delete)
	}
	if delete.MemoID == nil || *delete.MemoID <= 0 {
		return errors.New("authorized memo share deletion requires memo")
	}
	return s.driver.DeleteMemoShare(ctx, delete)
}