feat(api): implement get memo by uid

This commit is contained in:
Steven
2024-07-11 23:31:50 +08:00
parent 34e938a1e3
commit 1ab2c89408
10 changed files with 1023 additions and 608 deletions

View File

@ -205,6 +205,36 @@ func (s *APIV1Service) GetMemo(ctx context.Context, request *v1pb.GetMemoRequest
return memoMessage, nil
}
func (s *APIV1Service) GetMemoByUID(ctx context.Context, request *v1pb.GetMemoByUidRequest) (*v1pb.Memo, error) {
memo, err := s.Store.GetMemo(ctx, &store.FindMemo{
UID: &request.Uid,
})
if err != nil {
return nil, err
}
if memo == nil {
return nil, status.Errorf(codes.NotFound, "memo not found")
}
if memo.Visibility != store.Public {
user, err := s.GetCurrentUser(ctx)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get user")
}
if user == nil {
return nil, status.Errorf(codes.PermissionDenied, "permission denied")
}
if memo.Visibility == store.Private && memo.CreatorID != user.ID {
return nil, status.Errorf(codes.PermissionDenied, "permission denied")
}
}
memoMessage, err := s.convertMemoFromStore(ctx, memo)
if err != nil {
return nil, errors.Wrap(err, "failed to convert memo")
}
return memoMessage, nil
}
func (s *APIV1Service) UpdateMemo(ctx context.Context, request *v1pb.UpdateMemoRequest) (*v1pb.Memo, error) {
id, err := ExtractMemoIDFromName(request.Memo.Name)
if err != nil {
@ -968,9 +998,6 @@ func (s *APIV1Service) buildMemoFindWithFilter(ctx context.Context, find *store.
}
find.CreatorID = &user.ID
}
if filter.UID != nil {
find.UID = filter.UID
}
if filter.RowStatus != nil {
find.RowStatus = filter.RowStatus
}
@ -1059,7 +1086,6 @@ type SearchMemosFilter struct {
DisplayTimeBefore *int64
DisplayTimeAfter *int64
Creator *string
UID *string
RowStatus *store.RowStatus
Random bool
Limit *int
@ -1122,9 +1148,6 @@ func findSearchMemosField(callExpr *expr.Expr_Call, filter *SearchMemosFilter) {
} else if idExpr.Name == "creator" {
creator := callExpr.Args[1].GetConstExpr().GetStringValue()
filter.Creator = &creator
} else if idExpr.Name == "uid" {
uid := callExpr.Args[1].GetConstExpr().GetStringValue()
filter.UID = &uid
} else if idExpr.Name == "row_status" {
rowStatus := store.RowStatus(callExpr.Args[1].GetConstExpr().GetStringValue())
filter.RowStatus = &rowStatus