Commit 21ad6cc8 authored by Steven's avatar Steven

chore: update tag service creator

parent c24181b2
...@@ -2,7 +2,9 @@ package v2 ...@@ -2,7 +2,9 @@ package v2
import ( import (
"context" "context"
"fmt"
"github.com/pkg/errors"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
...@@ -24,14 +26,31 @@ func (s *APIV2Service) UpsertTag(ctx context.Context, request *apiv2pb.UpsertTag ...@@ -24,14 +26,31 @@ func (s *APIV2Service) UpsertTag(ctx context.Context, request *apiv2pb.UpsertTag
return nil, status.Errorf(codes.Internal, "failed to upsert tag: %v", err) return nil, status.Errorf(codes.Internal, "failed to upsert tag: %v", err)
} }
t, err := s.convertTagFromStore(ctx, tag)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to convert tag: %v", err)
}
return &apiv2pb.UpsertTagResponse{ return &apiv2pb.UpsertTagResponse{
Tag: convertTagFromStore(tag), Tag: t,
}, nil }, nil
} }
func (s *APIV2Service) ListTags(ctx context.Context, request *apiv2pb.ListTagsRequest) (*apiv2pb.ListTagsResponse, error) { func (s *APIV2Service) ListTags(ctx context.Context, request *apiv2pb.ListTagsRequest) (*apiv2pb.ListTagsResponse, error) {
username, err := ExtractUsernameFromName(request.Creator)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid username: %v", err)
}
user, err := s.Store.GetUser(ctx, &store.FindUser{
Username: &username,
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get user: %v", err)
}
if user == nil {
return nil, status.Errorf(codes.NotFound, "user not found")
}
tags, err := s.Store.ListTags(ctx, &store.FindTag{ tags, err := s.Store.ListTags(ctx, &store.FindTag{
CreatorID: request.CreatorId, CreatorID: user.ID,
}) })
if err != nil { if err != nil {
return nil, status.Errorf(codes.Internal, "failed to list tags: %v", err) return nil, status.Errorf(codes.Internal, "failed to list tags: %v", err)
...@@ -39,26 +58,48 @@ func (s *APIV2Service) ListTags(ctx context.Context, request *apiv2pb.ListTagsRe ...@@ -39,26 +58,48 @@ func (s *APIV2Service) ListTags(ctx context.Context, request *apiv2pb.ListTagsRe
response := &apiv2pb.ListTagsResponse{} response := &apiv2pb.ListTagsResponse{}
for _, tag := range tags { for _, tag := range tags {
response.Tags = append(response.Tags, convertTagFromStore(tag)) t, err := s.convertTagFromStore(ctx, tag)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to convert tag: %v", err)
}
response.Tags = append(response.Tags, t)
} }
return response, nil return response, nil
} }
func (s *APIV2Service) DeleteTag(ctx context.Context, request *apiv2pb.DeleteTagRequest) (*apiv2pb.DeleteTagResponse, error) { func (s *APIV2Service) DeleteTag(ctx context.Context, request *apiv2pb.DeleteTagRequest) (*apiv2pb.DeleteTagResponse, error) {
err := s.Store.DeleteTag(ctx, &store.DeleteTag{ username, err := ExtractUsernameFromName(request.Tag.Creator)
Name: request.Tag.Name, if err != nil {
CreatorID: request.Tag.CreatorId, return nil, status.Errorf(codes.InvalidArgument, "invalid username: %v", err)
}
user, err := s.Store.GetUser(ctx, &store.FindUser{
Username: &username,
}) })
if err != nil { if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get user: %v", err)
}
if user == nil {
return nil, status.Errorf(codes.NotFound, "user not found")
}
if err := s.Store.DeleteTag(ctx, &store.DeleteTag{
Name: request.Tag.Name,
CreatorID: user.ID,
}); err != nil {
return nil, status.Errorf(codes.Internal, "failed to delete tag: %v", err) return nil, status.Errorf(codes.Internal, "failed to delete tag: %v", err)
} }
return &apiv2pb.DeleteTagResponse{}, nil return &apiv2pb.DeleteTagResponse{}, nil
} }
func convertTagFromStore(tag *store.Tag) *apiv2pb.Tag { func (s *APIV2Service) convertTagFromStore(ctx context.Context, tag *store.Tag) (*apiv2pb.Tag, error) {
return &apiv2pb.Tag{ user, err := s.Store.GetUser(ctx, &store.FindUser{
Name: tag.Name, ID: &tag.CreatorID,
CreatorId: int32(tag.CreatorID), })
if err != nil {
return nil, errors.Wrap(err, "failed to get user")
} }
return &apiv2pb.Tag{
Name: tag.Name,
Creator: fmt.Sprintf("%s%s", UserNamePrefix, user.Username),
}, nil
} }
...@@ -20,7 +20,9 @@ service TagService { ...@@ -20,7 +20,9 @@ service TagService {
message Tag { message Tag {
string name = 1; string name = 1;
int32 creator_id = 2; // The creator of tags.
// Format: users/{username}
string creator = 2;
} }
message UpsertTagRequest { message UpsertTagRequest {
...@@ -32,7 +34,9 @@ message UpsertTagResponse { ...@@ -32,7 +34,9 @@ message UpsertTagResponse {
} }
message ListTagsRequest { message ListTagsRequest {
int32 creator_id = 1; // The creator of tags.
// Format: users/{username}
string creator = 1;
} }
message ListTagsResponse { message ListTagsResponse {
......
...@@ -108,6 +108,13 @@ message UpdateUserResponse { ...@@ -108,6 +108,13 @@ message UpdateUserResponse {
User user = 1; User user = 1;
} }
message UserAccessToken {
string access_token = 1;
string description = 2;
google.protobuf.Timestamp issued_at = 3;
google.protobuf.Timestamp expires_at = 4;
}
message ListUserAccessTokensRequest { message ListUserAccessTokensRequest {
// The name of the user. // The name of the user.
// Format: users/{username} // Format: users/{username}
...@@ -141,10 +148,3 @@ message DeleteUserAccessTokenRequest { ...@@ -141,10 +148,3 @@ message DeleteUserAccessTokenRequest {
} }
message DeleteUserAccessTokenResponse {} message DeleteUserAccessTokenResponse {}
message UserAccessToken {
string access_token = 1;
string description = 2;
google.protobuf.Timestamp issued_at = 3;
google.protobuf.Timestamp expires_at = 4;
}
...@@ -928,7 +928,7 @@ ...@@ -928,7 +928,7 @@
| Field | Type | Label | Description | | Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- | | ----- | ---- | ----- | ----------- |
| creator_id | [int32](#int32) | | | | creator | [string](#string) | | The creator of tags. Format: users/{username} |
...@@ -959,7 +959,7 @@ ...@@ -959,7 +959,7 @@
| Field | Type | Label | Description | | Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- | | ----- | ---- | ----- | ----------- |
| name | [string](#string) | | | | name | [string](#string) | | |
| creator_id | [int32](#int32) | | | | creator | [string](#string) | | The creator of tags. Format: users/{username} |
......
This diff is collapsed.
This diff is collapsed.
...@@ -13,7 +13,7 @@ export const useTagStore = () => { ...@@ -13,7 +13,7 @@ export const useTagStore = () => {
const fetchTags = async () => { const fetchTags = async () => {
const { tags } = await tagServiceClient.listTags({ const { tags } = await tagServiceClient.listTags({
creatorId: currentUser.id, creator: currentUser.name,
}); });
store.dispatch(setTags(tags.map((tag) => tag.name))); store.dispatch(setTags(tags.map((tag) => tag.name)));
}; };
...@@ -29,7 +29,7 @@ export const useTagStore = () => { ...@@ -29,7 +29,7 @@ export const useTagStore = () => {
await tagServiceClient.deleteTag({ await tagServiceClient.deleteTag({
tag: { tag: {
name: tagName, name: tagName,
creatorId: currentUser.id, creator: currentUser.name,
}, },
}); });
store.dispatch(deleteTagAction(tagName)); store.dispatch(deleteTagAction(tagName));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment