feat: add update shortcut api

This commit is contained in:
Steven
2023-11-10 08:51:19 +08:00
parent 033c007654
commit f5f8616f2e
6 changed files with 584 additions and 132 deletions

View File

@ -2,6 +2,7 @@ package v2
import (
"context"
"strings"
"github.com/pkg/errors"
"google.golang.org/grpc/codes"
@ -96,6 +97,67 @@ func (s *APIV2Service) CreateShortcut(ctx context.Context, request *apiv2pb.Crea
return response, nil
}
func (s *APIV2Service) UpdateShortcut(ctx context.Context, request *apiv2pb.UpdateShortcutRequest) (*apiv2pb.UpdateShortcutResponse, error) {
if request.UpdateMask == nil || len(request.UpdateMask.Paths) == 0 {
return nil, status.Errorf(codes.InvalidArgument, "updateMask is required")
}
userID := ctx.Value(userIDContextKey).(int32)
currentUser, err := s.Store.GetUser(ctx, &store.FindUser{
ID: &userID,
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get current user, err: %v", err)
}
shortcut, err := s.Store.GetShortcut(ctx, &store.FindShortcut{
Name: &request.Shortcut.Name,
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get shortcut by name: %v", err)
}
if shortcut == nil {
return nil, status.Errorf(codes.NotFound, "shortcut not found")
}
if shortcut.CreatorId != userID && currentUser.Role != store.RoleAdmin {
return nil, status.Errorf(codes.PermissionDenied, "Permission denied")
}
update := &store.UpdateShortcut{}
for _, path := range request.UpdateMask.Paths {
switch path {
case "link":
update.Link = &request.Shortcut.Link
case "title":
update.Title = &request.Shortcut.Title
case "tags":
tag := strings.Join(request.Shortcut.Tags, " ")
update.Tag = &tag
case "description":
update.Description = &request.Shortcut.Description
case "visibility":
visibility := store.Visibility(request.Shortcut.Visibility)
update.Visibility = &visibility
case "og_metadata":
if request.Shortcut.OgMetadata != nil {
update.OpenGraphMetadata = &store.OpenGraphMetadata{
Title: request.Shortcut.OgMetadata.Title,
Description: request.Shortcut.OgMetadata.Description,
Image: request.Shortcut.OgMetadata.Image,
}
}
}
}
shortcut, err = s.Store.UpdateShortcut(ctx, update)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to update shortcut, err: %v", err)
}
response := &apiv2pb.UpdateShortcutResponse{
Shortcut: convertShortcutFromStorepb(shortcut),
}
return response, nil
}
func (s *APIV2Service) DeleteShortcut(ctx context.Context, request *apiv2pb.DeleteShortcutRequest) (*apiv2pb.DeleteShortcutResponse, error) {
userID := ctx.Value(userIDContextKey).(int32)
currentUser, err := s.Store.GetUser(ctx, &store.FindUser{