init commit
This commit is contained in:
147
store/memo.go
Normal file
147
store/memo.go
Normal file
@@ -0,0 +1,147 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"github.com/usememos/memos/internal/base"
|
||||
|
||||
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
|
||||
Pinned bool
|
||||
Payload *storepb.MemoPayload
|
||||
|
||||
// Composed fields
|
||||
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
|
||||
Pinned *bool
|
||||
PayloadFind *FindMemoPayload
|
||||
ExcludeContent bool
|
||||
ExcludeComments bool
|
||||
Filter *string
|
||||
|
||||
// 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
|
||||
Pinned *bool
|
||||
Payload *storepb.MemoPayload
|
||||
}
|
||||
|
||||
type DeleteMemo struct {
|
||||
ID int32
|
||||
}
|
||||
|
||||
func (s *Store) CreateMemo(ctx context.Context, create *Memo) (*Memo, error) {
|
||||
if !base.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 && !base.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)
|
||||
}
|
||||
Reference in New Issue
Block a user