mirror of
https://github.com/usememos/memos.git
synced 2024-12-26 23:22:47 +08:00
145 lines
2.8 KiB
Go
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)
|
|
}
|