mirror of
https://github.com/usememos/memos.git
synced 2025-03-19 12:10:08 +01:00
chore: update memo find builder
This commit is contained in:
parent
1e07b70d23
commit
eb4f7b47b7
@ -82,9 +82,12 @@ func (s *APIV2Service) CreateMemo(ctx context.Context, request *apiv2pb.CreateMe
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *APIV2Service) ListMemos(ctx context.Context, request *apiv2pb.ListMemosRequest) (*apiv2pb.ListMemosResponse, error) {
|
func (s *APIV2Service) ListMemos(ctx context.Context, request *apiv2pb.ListMemosRequest) (*apiv2pb.ListMemosResponse, error) {
|
||||||
memoFind, err := s.buildFindMemosWithFilter(ctx, request.Filter, true)
|
memoFind := &store.FindMemo{
|
||||||
if err != nil {
|
// Exclude comments by default.
|
||||||
return nil, err
|
ExcludeComments: true,
|
||||||
|
}
|
||||||
|
if err := s.buildMemoFindWithFilter(ctx, memoFind, request.Filter); err != nil {
|
||||||
|
return nil, status.Errorf(codes.InvalidArgument, "failed to build find memos with filter")
|
||||||
}
|
}
|
||||||
|
|
||||||
var limit, offset int
|
var limit, offset int
|
||||||
@ -435,52 +438,8 @@ func (s *APIV2Service) GetUserMemosStats(ctx context.Context, request *apiv2pb.G
|
|||||||
ExcludeComments: true,
|
ExcludeComments: true,
|
||||||
ExcludeContent: true,
|
ExcludeContent: true,
|
||||||
}
|
}
|
||||||
displayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
if err := s.buildMemoFindWithFilter(ctx, memoFind, request.Filter); err != nil {
|
||||||
if err != nil {
|
return nil, status.Errorf(codes.InvalidArgument, "failed to build find memos with filter")
|
||||||
return nil, status.Errorf(codes.Internal, "failed to get memo display with updated ts setting value")
|
|
||||||
}
|
|
||||||
if displayWithUpdatedTs {
|
|
||||||
memoFind.OrderByUpdatedTs = true
|
|
||||||
}
|
|
||||||
if request.Filter != "" {
|
|
||||||
filter, err := parseListMemosFilter(request.Filter)
|
|
||||||
if err != nil {
|
|
||||||
return nil, status.Errorf(codes.InvalidArgument, "invalid filter: %v", err)
|
|
||||||
}
|
|
||||||
if len(filter.ContentSearch) > 0 {
|
|
||||||
memoFind.ContentSearch = filter.ContentSearch
|
|
||||||
}
|
|
||||||
if len(filter.Visibilities) > 0 {
|
|
||||||
memoFind.VisibilityList = filter.Visibilities
|
|
||||||
}
|
|
||||||
if filter.OrderByPinned {
|
|
||||||
memoFind.OrderByPinned = filter.OrderByPinned
|
|
||||||
}
|
|
||||||
if filter.DisplayTimeAfter != nil {
|
|
||||||
displayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, status.Errorf(codes.Internal, "failed to get memo display with updated ts setting value")
|
|
||||||
}
|
|
||||||
if displayWithUpdatedTs {
|
|
||||||
memoFind.UpdatedTsAfter = filter.DisplayTimeAfter
|
|
||||||
} else {
|
|
||||||
memoFind.CreatedTsAfter = filter.DisplayTimeAfter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if filter.DisplayTimeBefore != nil {
|
|
||||||
displayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, status.Errorf(codes.Internal, "failed to get memo display with updated ts setting value")
|
|
||||||
}
|
|
||||||
if displayWithUpdatedTs {
|
|
||||||
memoFind.UpdatedTsBefore = filter.DisplayTimeBefore
|
|
||||||
} else {
|
|
||||||
memoFind.CreatedTsBefore = filter.DisplayTimeBefore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if filter.RowStatus != nil {
|
|
||||||
memoFind.RowStatus = filter.RowStatus
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
memos, err := s.Store.ListMemos(ctx, memoFind)
|
memos, err := s.Store.ListMemos(ctx, memoFind)
|
||||||
@ -493,6 +452,10 @@ func (s *APIV2Service) GetUserMemosStats(ctx context.Context, request *apiv2pb.G
|
|||||||
return nil, status.Errorf(codes.Internal, "invalid timezone location")
|
return nil, status.Errorf(codes.Internal, "invalid timezone location")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
displayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, status.Errorf(codes.Internal, "failed to get memo display with updated ts setting value")
|
||||||
|
}
|
||||||
stats := make(map[string]int32)
|
stats := make(map[string]int32)
|
||||||
for _, memo := range memos {
|
for _, memo := range memos {
|
||||||
displayTs := memo.CreatedTs
|
displayTs := memo.CreatedTs
|
||||||
@ -509,8 +472,13 @@ func (s *APIV2Service) GetUserMemosStats(ctx context.Context, request *apiv2pb.G
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *APIV2Service) ExportMemos(ctx context.Context, request *apiv2pb.ExportMemosRequest) (*apiv2pb.ExportMemosResponse, error) {
|
func (s *APIV2Service) ExportMemos(ctx context.Context, request *apiv2pb.ExportMemosRequest) (*apiv2pb.ExportMemosResponse, error) {
|
||||||
memoFind, err := s.buildFindMemosWithFilter(ctx, request.Filter, true)
|
normalRowStatus := store.Normal
|
||||||
if err != nil {
|
memoFind := &store.FindMemo{
|
||||||
|
RowStatus: &normalRowStatus,
|
||||||
|
// Exclude comments by default.
|
||||||
|
ExcludeComments: true,
|
||||||
|
}
|
||||||
|
if err := s.buildMemoFindWithFilter(ctx, memoFind, request.Filter); err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "failed to build find memos with filter")
|
return nil, status.Errorf(codes.Internal, "failed to build find memos with filter")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -521,7 +489,6 @@ func (s *APIV2Service) ExportMemos(ctx context.Context, request *apiv2pb.ExportM
|
|||||||
|
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
writer := zip.NewWriter(buf)
|
writer := zip.NewWriter(buf)
|
||||||
|
|
||||||
for _, memo := range memos {
|
for _, memo := range memos {
|
||||||
memoMessage, err := s.convertMemoFromStore(ctx, memo)
|
memoMessage, err := s.convertMemoFromStore(ctx, memo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -536,9 +503,7 @@ func (s *APIV2Service) ExportMemos(ctx context.Context, request *apiv2pb.ExportM
|
|||||||
return nil, status.Errorf(codes.Internal, "Failed to write to memo file")
|
return nil, status.Errorf(codes.Internal, "Failed to write to memo file")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if err := writer.Close(); err != nil {
|
||||||
err = writer.Close()
|
|
||||||
if err != nil {
|
|
||||||
return nil, status.Errorf(codes.Internal, "Failed to close zip file writer")
|
return nil, status.Errorf(codes.Internal, "Failed to close zip file writer")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -768,88 +733,90 @@ func (s *APIV2Service) dispatchMemoRelatedWebhook(ctx context.Context, memo *api
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *APIV2Service) buildFindMemosWithFilter(ctx context.Context, filter string, excludeComments bool) (*store.FindMemo, error) {
|
func (s *APIV2Service) buildMemoFindWithFilter(ctx context.Context, find *store.FindMemo, filter string) error {
|
||||||
memoFind := &store.FindMemo{
|
user, _ := getCurrentUser(ctx, s.Store)
|
||||||
// Exclude comments by default.
|
if find == nil {
|
||||||
ExcludeComments: excludeComments,
|
find = &store.FindMemo{}
|
||||||
}
|
}
|
||||||
if filter != "" {
|
if filter != "" {
|
||||||
filter, err := parseListMemosFilter(filter)
|
filter, err := parseListMemosFilter(filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.InvalidArgument, "invalid filter: %v", err)
|
return status.Errorf(codes.InvalidArgument, "invalid filter: %v", err)
|
||||||
}
|
}
|
||||||
if len(filter.ContentSearch) > 0 {
|
if len(filter.ContentSearch) > 0 {
|
||||||
memoFind.ContentSearch = filter.ContentSearch
|
find.ContentSearch = filter.ContentSearch
|
||||||
}
|
}
|
||||||
if len(filter.Visibilities) > 0 {
|
if len(filter.Visibilities) > 0 {
|
||||||
memoFind.VisibilityList = filter.Visibilities
|
find.VisibilityList = filter.Visibilities
|
||||||
}
|
}
|
||||||
if filter.OrderByPinned {
|
if filter.OrderByPinned {
|
||||||
memoFind.OrderByPinned = filter.OrderByPinned
|
find.OrderByPinned = filter.OrderByPinned
|
||||||
}
|
}
|
||||||
if filter.DisplayTimeAfter != nil {
|
if filter.DisplayTimeAfter != nil {
|
||||||
displayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
displayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "failed to get memo display with updated ts setting value")
|
return status.Errorf(codes.Internal, "failed to get memo display with updated ts setting value")
|
||||||
}
|
}
|
||||||
if displayWithUpdatedTs {
|
if displayWithUpdatedTs {
|
||||||
memoFind.UpdatedTsAfter = filter.DisplayTimeAfter
|
find.UpdatedTsAfter = filter.DisplayTimeAfter
|
||||||
} else {
|
} else {
|
||||||
memoFind.CreatedTsAfter = filter.DisplayTimeAfter
|
find.CreatedTsAfter = filter.DisplayTimeAfter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if filter.DisplayTimeBefore != nil {
|
if filter.DisplayTimeBefore != nil {
|
||||||
displayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
displayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "failed to get memo display with updated ts setting value")
|
return status.Errorf(codes.Internal, "failed to get memo display with updated ts setting value")
|
||||||
}
|
}
|
||||||
if displayWithUpdatedTs {
|
if displayWithUpdatedTs {
|
||||||
memoFind.UpdatedTsBefore = filter.DisplayTimeBefore
|
find.UpdatedTsBefore = filter.DisplayTimeBefore
|
||||||
} else {
|
} else {
|
||||||
memoFind.CreatedTsBefore = filter.DisplayTimeBefore
|
find.CreatedTsBefore = filter.DisplayTimeBefore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if filter.Creator != nil {
|
if filter.Creator != nil {
|
||||||
username, err := ExtractUsernameFromName(*filter.Creator)
|
username, err := ExtractUsernameFromName(*filter.Creator)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.InvalidArgument, "invalid creator name")
|
return status.Errorf(codes.InvalidArgument, "invalid creator name")
|
||||||
}
|
}
|
||||||
user, err := s.Store.GetUser(ctx, &store.FindUser{
|
user, err := s.Store.GetUser(ctx, &store.FindUser{
|
||||||
Username: &username,
|
Username: &username,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "failed to get user")
|
return status.Errorf(codes.Internal, "failed to get user")
|
||||||
}
|
}
|
||||||
if user == nil {
|
if user == nil {
|
||||||
return nil, status.Errorf(codes.NotFound, "user not found")
|
return status.Errorf(codes.NotFound, "user not found")
|
||||||
}
|
}
|
||||||
memoFind.CreatorID = &user.ID
|
find.CreatorID = &user.ID
|
||||||
}
|
}
|
||||||
if filter.RowStatus != nil {
|
if filter.RowStatus != nil {
|
||||||
memoFind.RowStatus = filter.RowStatus
|
find.RowStatus = filter.RowStatus
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return nil, status.Errorf(codes.InvalidArgument, "filter is required")
|
// If no filter is provided, check if the user is authenticated.
|
||||||
|
if user == nil {
|
||||||
|
return status.Errorf(codes.InvalidArgument, "filter is required")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
user, _ := getCurrentUser(ctx, s.Store)
|
|
||||||
// If the user is not authenticated, only public memos are visible.
|
// If the user is not authenticated, only public memos are visible.
|
||||||
if user == nil {
|
if user == nil {
|
||||||
memoFind.VisibilityList = []store.Visibility{store.Public}
|
find.VisibilityList = []store.Visibility{store.Public}
|
||||||
}
|
}
|
||||||
if user != nil && memoFind.CreatorID != nil && *memoFind.CreatorID != user.ID {
|
if user != nil && find.CreatorID != nil && *find.CreatorID != user.ID {
|
||||||
memoFind.VisibilityList = []store.Visibility{store.Public, store.Protected}
|
find.VisibilityList = []store.Visibility{store.Public, store.Protected}
|
||||||
}
|
}
|
||||||
|
|
||||||
displayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
displayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "failed to get memo display with updated ts setting value")
|
return status.Errorf(codes.Internal, "failed to get memo display with updated ts setting value")
|
||||||
}
|
}
|
||||||
if displayWithUpdatedTs {
|
if displayWithUpdatedTs {
|
||||||
memoFind.OrderByUpdatedTs = true
|
find.OrderByUpdatedTs = true
|
||||||
}
|
}
|
||||||
|
|
||||||
return memoFind, nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertMemoToWebhookPayload(memo *apiv2pb.Memo) *webhook.WebhookPayload {
|
func convertMemoToWebhookPayload(memo *apiv2pb.Memo) *webhook.WebhookPayload {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user