memos/store/memo.go
2024-09-02 21:27:55 +08:00

145 lines
2.8 KiB
Go

package store
import (
"context"
"errors"
"github.com/usememos/memos/internal/util"
storepb "github.com/usememos/memos/proto/gen/store"
)
// Visibility is the type of a visibility.
type Visibility string
const (
// Public is the PUBLIC visibility.
Public Visibility = "PUBLIC"
// Protected is the PROTECTED visibility.
Protected Visibility = "PROTECTED"
// Private is the PRIVATE visibility.
Private Visibility = "PRIVATE"
)
func (v Visibility) String() string {
switch v {
case Public:
return "PUBLIC"
case Protected:
return "PROTECTED"
case Private:
return "PRIVATE"
}
return "PRIVATE"
}
type Memo struct {
// ID is the system generated unique identifier for the memo.
ID int32
// UID is the user defined unique identifier for the memo.
UID string
// Standard fields
RowStatus RowStatus
CreatorID int32
CreatedTs int64
UpdatedTs int64
// Domain specific fields
Content string
Visibility Visibility
Payload *storepb.MemoPayload
// Composed fields
Pinned bool
ParentID *int32
}
type FindMemo struct {
ID *int32
UID *string
// Standard fields
RowStatus *RowStatus
CreatorID *int32
CreatedTsAfter *int64
CreatedTsBefore *int64
UpdatedTsAfter *int64
UpdatedTsBefore *int64
// Domain specific fields
ContentSearch []string
VisibilityList []Visibility
PayloadFind *FindMemoPayload
ExcludeContent bool
ExcludeComments bool
Random bool
// Pagination
Limit *int
Offset *int
// Ordering
OrderByUpdatedTs bool
OrderByPinned bool
OrderByTimeAsc bool
}
type FindMemoPayload struct {
Raw *string
TagSearch []string
HasLink bool
HasTaskList bool
HasCode bool
HasIncompleteTasks bool
}
type UpdateMemo struct {
ID int32
UID *string
CreatedTs *int64
UpdatedTs *int64
RowStatus *RowStatus
Content *string
Visibility *Visibility
Payload *storepb.MemoPayload
}
type DeleteMemo struct {
ID int32
}
func (s *Store) CreateMemo(ctx context.Context, create *Memo) (*Memo, error) {
if !util.UIDMatcher.MatchString(create.UID) {
return nil, errors.New("invalid uid")
}
return s.driver.CreateMemo(ctx, create)
}
func (s *Store) ListMemos(ctx context.Context, find *FindMemo) ([]*Memo, error) {
return s.driver.ListMemos(ctx, find)
}
func (s *Store) GetMemo(ctx context.Context, find *FindMemo) (*Memo, error) {
list, err := s.ListMemos(ctx, find)
if err != nil {
return nil, err
}
if len(list) == 0 {
return nil, nil
}
memo := list[0]
return memo, nil
}
func (s *Store) UpdateMemo(ctx context.Context, update *UpdateMemo) error {
if update.UID != nil && !util.UIDMatcher.MatchString(*update.UID) {
return errors.New("invalid uid")
}
return s.driver.UpdateMemo(ctx, update)
}
func (s *Store) DeleteMemo(ctx context.Context, delete *DeleteMemo) error {
return s.driver.DeleteMemo(ctx, delete)
}