Commit 92872118 authored by Steven's avatar Steven

refactor: tweak api definition

parent 9b66ef5e
......@@ -562,7 +562,8 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2DeleteTagResponse'
type: object
properties: {}
default:
description: An unexpected error response.
schema:
......@@ -588,7 +589,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2UpsertTagResponse'
$ref: '#/definitions/v2Tag'
default:
description: An unexpected error response.
schema:
......@@ -632,7 +633,8 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2BatchUpsertTagResponse'
type: object
properties: {}
default:
description: An unexpected error response.
schema:
......@@ -655,7 +657,8 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2RenameTagResponse'
type: object
properties: {}
default:
description: An unexpected error response.
schema:
......@@ -690,7 +693,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2CreateUserResponse'
$ref: '#/definitions/v2User'
default:
description: An unexpected error response.
schema:
......@@ -754,7 +757,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2CreateWebhookResponse'
$ref: '#/definitions/v2Webhook'
default:
description: An unexpected error response.
schema:
......@@ -775,7 +778,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2GetWebhookResponse'
$ref: '#/definitions/v2Webhook'
default:
description: An unexpected error response.
schema:
......@@ -795,7 +798,8 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2DeleteWebhookResponse'
type: object
properties: {}
default:
description: An unexpected error response.
schema:
......@@ -816,7 +820,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2UpdateWebhookResponse'
$ref: '#/definitions/v2Webhook'
default:
description: An unexpected error response.
schema:
......@@ -888,7 +892,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2GetWorkspaceSettingResponse'
$ref: '#/definitions/apiv2WorkspaceSetting'
default:
description: An unexpected error response.
schema:
......@@ -912,7 +916,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2SetWorkspaceSettingResponse'
$ref: '#/definitions/apiv2WorkspaceSetting'
default:
description: An unexpected error response.
schema:
......@@ -1285,7 +1289,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2GetUserResponse'
$ref: '#/definitions/v2User'
default:
description: An unexpected error response.
schema:
......@@ -1308,7 +1312,8 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2DeleteUserResponse'
type: object
properties: {}
default:
description: An unexpected error response.
schema:
......@@ -1355,7 +1360,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2CreateUserAccessTokenResponse'
$ref: '#/definitions/v2UserAccessToken'
default:
description: An unexpected error response.
schema:
......@@ -1384,7 +1389,8 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2DeleteUserAccessTokenResponse'
type: object
properties: {}
default:
description: An unexpected error response.
schema:
......@@ -1623,7 +1629,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2GetUserSettingResponse'
$ref: '#/definitions/apiv2UserSetting'
default:
description: An unexpected error response.
schema:
......@@ -1702,7 +1708,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2UpdateUserSettingResponse'
$ref: '#/definitions/apiv2UserSetting'
default:
description: An unexpected error response.
schema:
......@@ -1741,7 +1747,7 @@ paths:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v2UpdateUserResponse'
$ref: '#/definitions/v2User'
default:
description: An unexpected error response.
schema:
......@@ -2130,8 +2136,6 @@ definitions:
items:
type: object
$ref: '#/definitions/v2UpsertTagRequest'
v2BatchUpsertTagResponse:
type: object
v2CreateMemoRequest:
type: object
properties:
......@@ -2149,16 +2153,6 @@ definitions:
properties:
storage:
$ref: '#/definitions/apiv2Storage'
v2CreateUserAccessTokenResponse:
type: object
properties:
accessToken:
$ref: '#/definitions/v2UserAccessToken'
v2CreateUserResponse:
type: object
properties:
user:
$ref: '#/definitions/v2User'
v2CreateWebhookRequest:
type: object
properties:
......@@ -2166,21 +2160,8 @@ definitions:
type: string
url:
type: string
v2CreateWebhookResponse:
type: object
properties:
webhook:
$ref: '#/definitions/v2Webhook'
v2DeleteStorageResponse:
type: object
v2DeleteTagResponse:
type: object
v2DeleteUserAccessTokenResponse:
type: object
v2DeleteUserResponse:
type: object
v2DeleteWebhookResponse:
type: object
v2ExportMemosRequest:
type: object
properties:
......@@ -2221,26 +2202,6 @@ definitions:
description: |-
stats is the stats of memo creating/updating activities.
key is the year-month-day string. e.g. "2020-01-01".
v2GetUserResponse:
type: object
properties:
user:
$ref: '#/definitions/v2User'
v2GetUserSettingResponse:
type: object
properties:
setting:
$ref: '#/definitions/apiv2UserSetting'
v2GetWebhookResponse:
type: object
properties:
webhook:
$ref: '#/definitions/v2Webhook'
v2GetWorkspaceSettingResponse:
type: object
properties:
setting:
$ref: '#/definitions/apiv2WorkspaceSetting'
v2Inbox:
type: object
properties:
......@@ -2527,11 +2488,6 @@ definitions:
type: string
newName:
type: string
v2RenameTagResponse:
type: object
properties:
tag:
$ref: '#/definitions/v2Tag'
v2Resource:
type: object
properties:
......@@ -2596,11 +2552,6 @@ definitions:
items:
type: object
$ref: '#/definitions/v2User'
v2SetWorkspaceSettingResponse:
type: object
properties:
setting:
$ref: '#/definitions/apiv2WorkspaceSetting'
v2Tag:
type: object
properties:
......@@ -2616,31 +2567,11 @@ definitions:
properties:
storage:
$ref: '#/definitions/apiv2Storage'
v2UpdateUserResponse:
type: object
properties:
user:
$ref: '#/definitions/v2User'
v2UpdateUserSettingResponse:
type: object
properties:
setting:
$ref: '#/definitions/apiv2UserSetting'
v2UpdateWebhookResponse:
type: object
properties:
webhook:
$ref: '#/definitions/v2Webhook'
v2UpsertTagRequest:
type: object
properties:
name:
type: string
v2UpsertTagResponse:
type: object
properties:
tag:
$ref: '#/definitions/v2Tag'
v2User:
type: object
properties:
......
......@@ -3,19 +3,20 @@ syntax = "proto3";
package memos.api.v2;
import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
option go_package = "gen/api/v2";
service TagService {
// UpsertTag upserts a tag.
rpc UpsertTag(UpsertTagRequest) returns (UpsertTagResponse) {
rpc UpsertTag(UpsertTagRequest) returns (Tag) {
option (google.api.http) = {
post: "/api/v2/tags",
body: "*"
};
}
// BatchUpsertTag upserts multiple tags.
rpc BatchUpsertTag(BatchUpsertTagRequest) returns (BatchUpsertTagResponse) {
rpc BatchUpsertTag(BatchUpsertTagRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/api/v2/tags:batchUpsert",
body: "*"
......@@ -27,14 +28,14 @@ service TagService {
}
// RenameTag renames a tag.
// All related memos will be updated.
rpc RenameTag(RenameTagRequest) returns (RenameTagResponse) {
rpc RenameTag(RenameTagRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
patch: "/api/v2/tags:rename",
body: "*"
};
}
// DeleteTag deletes a tag.
rpc DeleteTag(DeleteTagRequest) returns (DeleteTagResponse) {
rpc DeleteTag(DeleteTagRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {delete: "/api/v2/tags"};
}
// GetTagSuggestions gets tag suggestions from the user's memos.
......@@ -54,16 +55,10 @@ message UpsertTagRequest {
string name = 1;
}
message UpsertTagResponse {
Tag tag = 1;
}
message BatchUpsertTagRequest {
repeated UpsertTagRequest requests = 1;
}
message BatchUpsertTagResponse {}
message ListTagsRequest {}
message ListTagsResponse {
......@@ -78,16 +73,10 @@ message RenameTagRequest {
string new_name = 3;
}
message RenameTagResponse {
Tag tag = 1;
}
message DeleteTagRequest {
Tag tag = 1;
}
message DeleteTagResponse {}
message GetTagSuggestionsRequest {
// The creator of tags.
// Format: users/{id}
......
......@@ -6,6 +6,7 @@ import "api/v2/common.proto";
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
......@@ -21,12 +22,12 @@ service UserService {
option (google.api.http) = {get: "/api/v2/users:search"};
}
// GetUser gets a user by name.
rpc GetUser(GetUserRequest) returns (GetUserResponse) {
rpc GetUser(GetUserRequest) returns (User) {
option (google.api.http) = {get: "/api/v2/{name=users/*}"};
option (google.api.method_signature) = "name";
}
// CreateUser creates a new user.
rpc CreateUser(CreateUserRequest) returns (CreateUserResponse) {
rpc CreateUser(CreateUserRequest) returns (User) {
option (google.api.http) = {
post: "/api/v2/users"
body: "user"
......@@ -34,7 +35,7 @@ service UserService {
option (google.api.method_signature) = "user";
}
// UpdateUser updates a user.
rpc UpdateUser(UpdateUserRequest) returns (UpdateUserResponse) {
rpc UpdateUser(UpdateUserRequest) returns (User) {
option (google.api.http) = {
patch: "/api/v2/{user.name=users/*}"
body: "user"
......@@ -42,17 +43,17 @@ service UserService {
option (google.api.method_signature) = "user,update_mask";
}
// DeleteUser deletes a user.
rpc DeleteUser(DeleteUserRequest) returns (DeleteUserResponse) {
rpc DeleteUser(DeleteUserRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {delete: "/api/v2/{name=users/*}"};
option (google.api.method_signature) = "name";
}
// GetUserSetting gets the setting of a user.
rpc GetUserSetting(GetUserSettingRequest) returns (GetUserSettingResponse) {
rpc GetUserSetting(GetUserSettingRequest) returns (UserSetting) {
option (google.api.http) = {get: "/api/v2/{name=users/*}/setting"};
option (google.api.method_signature) = "name";
}
// UpdateUserSetting updates the setting of a user.
rpc UpdateUserSetting(UpdateUserSettingRequest) returns (UpdateUserSettingResponse) {
rpc UpdateUserSetting(UpdateUserSettingRequest) returns (UserSetting) {
option (google.api.http) = {
patch: "/api/v2/{setting.name=users/*/setting}"
body: "setting"
......@@ -65,7 +66,7 @@ service UserService {
option (google.api.method_signature) = "name";
}
// CreateUserAccessToken creates a new access token for a user.
rpc CreateUserAccessToken(CreateUserAccessTokenRequest) returns (CreateUserAccessTokenResponse) {
rpc CreateUserAccessToken(CreateUserAccessTokenRequest) returns (UserAccessToken) {
option (google.api.http) = {
post: "/api/v2/{name=users/*}/access_tokens"
body: "*"
......@@ -73,7 +74,7 @@ service UserService {
option (google.api.method_signature) = "name";
}
// DeleteUserAccessToken deletes an access token for a user.
rpc DeleteUserAccessToken(DeleteUserAccessTokenRequest) returns (DeleteUserAccessTokenResponse) {
rpc DeleteUserAccessToken(DeleteUserAccessTokenRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {delete: "/api/v2/{name=users/*}/access_tokens/{access_token}"};
option (google.api.method_signature) = "name,access_token";
}
......@@ -136,36 +137,22 @@ message GetUserRequest {
string name = 1;
}
message GetUserResponse {
User user = 1;
}
message CreateUserRequest {
User user = 1;
}
message CreateUserResponse {
User user = 1;
}
message UpdateUserRequest {
User user = 1 [(google.api.field_behavior) = REQUIRED];
google.protobuf.FieldMask update_mask = 2;
}
message UpdateUserResponse {
User user = 1;
}
message DeleteUserRequest {
// The name of the user.
// Format: users/{id}
string name = 1;
}
message DeleteUserResponse {}
message UserSetting {
// The name of the user.
// Format: users/{id}
......@@ -184,20 +171,12 @@ message GetUserSettingRequest {
string name = 1;
}
message GetUserSettingResponse {
UserSetting setting = 1;
}
message UpdateUserSettingRequest {
UserSetting setting = 1 [(google.api.field_behavior) = REQUIRED];
google.protobuf.FieldMask update_mask = 2;
}
message UpdateUserSettingResponse {
UserSetting setting = 1;
}
message UserAccessToken {
string access_token = 1;
string description = 2;
......@@ -225,10 +204,6 @@ message CreateUserAccessTokenRequest {
optional google.protobuf.Timestamp expires_at = 3;
}
message CreateUserAccessTokenResponse {
UserAccessToken access_token = 1;
}
message DeleteUserAccessTokenRequest {
// The name of the user.
// Format: users/{id}
......@@ -236,5 +211,3 @@ message DeleteUserAccessTokenRequest {
// access_token is the access token to delete.
string access_token = 2;
}
message DeleteUserAccessTokenResponse {}
......@@ -5,6 +5,7 @@ package memos.api.v2;
import "api/v2/common.proto";
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
......@@ -12,14 +13,14 @@ option go_package = "gen/api/v2";
service WebhookService {
// CreateWebhook creates a new webhook.
rpc CreateWebhook(CreateWebhookRequest) returns (CreateWebhookResponse) {
rpc CreateWebhook(CreateWebhookRequest) returns (Webhook) {
option (google.api.http) = {
post: "/api/v2/webhooks"
body: "*"
};
}
// GetWebhook returns a webhook by id.
rpc GetWebhook(GetWebhookRequest) returns (GetWebhookResponse) {
rpc GetWebhook(GetWebhookRequest) returns (Webhook) {
option (google.api.http) = {get: "/api/v2/webhooks/{id}"};
option (google.api.method_signature) = "id";
}
......@@ -28,7 +29,7 @@ service WebhookService {
option (google.api.http) = {get: "/api/v2/webhooks"};
}
// UpdateWebhook updates a webhook.
rpc UpdateWebhook(UpdateWebhookRequest) returns (UpdateWebhookResponse) {
rpc UpdateWebhook(UpdateWebhookRequest) returns (Webhook) {
option (google.api.http) = {
patch: "/api/v2/webhooks/{webhook.id}"
body: "webhook"
......@@ -36,7 +37,7 @@ service WebhookService {
option (google.api.method_signature) = "webhook,update_mask";
}
// DeleteWebhook deletes a webhook by id.
rpc DeleteWebhook(DeleteWebhookRequest) returns (DeleteWebhookResponse) {
rpc DeleteWebhook(DeleteWebhookRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {delete: "/api/v2/webhooks/{id}"};
option (google.api.method_signature) = "id";
}
......@@ -64,18 +65,10 @@ message CreateWebhookRequest {
string url = 2;
}
message CreateWebhookResponse {
Webhook webhook = 1;
}
message GetWebhookRequest {
int32 id = 1;
}
message GetWebhookResponse {
Webhook webhook = 1;
}
message ListWebhooksRequest {
int32 creator_id = 1;
}
......@@ -90,12 +83,6 @@ message UpdateWebhookRequest {
google.protobuf.FieldMask update_mask = 2;
}
message UpdateWebhookResponse {
Webhook webhook = 1;
}
message DeleteWebhookRequest {
int32 id = 1;
}
message DeleteWebhookResponse {}
......@@ -14,12 +14,12 @@ service WorkspaceSettingService {
option (google.api.http) = {get: "/api/v2/workspace/settings"};
}
// GetWorkspaceSetting returns the setting by name.
rpc GetWorkspaceSetting(GetWorkspaceSettingRequest) returns (GetWorkspaceSettingResponse) {
rpc GetWorkspaceSetting(GetWorkspaceSettingRequest) returns (WorkspaceSetting) {
option (google.api.http) = {get: "/api/v2/workspace/{name=settings/*}"};
option (google.api.method_signature) = "name";
}
// SetWorkspaceSetting updates the setting.
rpc SetWorkspaceSetting(SetWorkspaceSettingRequest) returns (SetWorkspaceSettingResponse) {
rpc SetWorkspaceSetting(SetWorkspaceSettingRequest) returns (WorkspaceSetting) {
option (google.api.http) = {
patch: "/api/v2/workspace/{setting.name=settings/*}",
body: "setting"
......@@ -28,31 +28,6 @@ service WorkspaceSettingService {
}
}
message ListWorkspaceSettingsRequest {}
message ListWorkspaceSettingsResponse {
repeated WorkspaceSetting settings = 1;
}
message GetWorkspaceSettingRequest {
// The resource name of the workspace setting.
// Format: settings/{setting}
string name = 1 [(google.api.field_behavior) = REQUIRED];
}
message GetWorkspaceSettingResponse {
WorkspaceSetting setting = 1;
}
message SetWorkspaceSettingRequest {
// setting is the setting to update.
WorkspaceSetting setting = 1;
}
message SetWorkspaceSettingResponse {
WorkspaceSetting setting = 1;
}
message WorkspaceSetting {
// name is the name of the setting.
// Format: settings/{setting}
......@@ -115,3 +90,20 @@ message WorkspaceMemoRelatedSetting {
// display_with_update_time orders and displays memo with update time.
bool display_with_update_time = 2;
}
message ListWorkspaceSettingsRequest {}
message ListWorkspaceSettingsResponse {
repeated WorkspaceSetting settings = 1;
}
message GetWorkspaceSettingRequest {
// The resource name of the workspace setting.
// Format: settings/{setting}
string name = 1 [(google.api.field_behavior) = REQUIRED];
}
message SetWorkspaceSettingRequest {
// setting is the setting to update.
WorkspaceSetting setting = 1;
}
This diff is collapsed.
......@@ -11,6 +11,7 @@ import (
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
emptypb "google.golang.org/protobuf/types/known/emptypb"
)
// This is a compile-time assertion to ensure that this generated file
......@@ -32,16 +33,16 @@ const (
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type TagServiceClient interface {
// UpsertTag upserts a tag.
UpsertTag(ctx context.Context, in *UpsertTagRequest, opts ...grpc.CallOption) (*UpsertTagResponse, error)
UpsertTag(ctx context.Context, in *UpsertTagRequest, opts ...grpc.CallOption) (*Tag, error)
// BatchUpsertTag upserts multiple tags.
BatchUpsertTag(ctx context.Context, in *BatchUpsertTagRequest, opts ...grpc.CallOption) (*BatchUpsertTagResponse, error)
BatchUpsertTag(ctx context.Context, in *BatchUpsertTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// ListTags lists tags.
ListTags(ctx context.Context, in *ListTagsRequest, opts ...grpc.CallOption) (*ListTagsResponse, error)
// RenameTag renames a tag.
// All related memos will be updated.
RenameTag(ctx context.Context, in *RenameTagRequest, opts ...grpc.CallOption) (*RenameTagResponse, error)
RenameTag(ctx context.Context, in *RenameTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// DeleteTag deletes a tag.
DeleteTag(ctx context.Context, in *DeleteTagRequest, opts ...grpc.CallOption) (*DeleteTagResponse, error)
DeleteTag(ctx context.Context, in *DeleteTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// GetTagSuggestions gets tag suggestions from the user's memos.
GetTagSuggestions(ctx context.Context, in *GetTagSuggestionsRequest, opts ...grpc.CallOption) (*GetTagSuggestionsResponse, error)
}
......@@ -54,8 +55,8 @@ func NewTagServiceClient(cc grpc.ClientConnInterface) TagServiceClient {
return &tagServiceClient{cc}
}
func (c *tagServiceClient) UpsertTag(ctx context.Context, in *UpsertTagRequest, opts ...grpc.CallOption) (*UpsertTagResponse, error) {
out := new(UpsertTagResponse)
func (c *tagServiceClient) UpsertTag(ctx context.Context, in *UpsertTagRequest, opts ...grpc.CallOption) (*Tag, error) {
out := new(Tag)
err := c.cc.Invoke(ctx, TagService_UpsertTag_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
......@@ -63,8 +64,8 @@ func (c *tagServiceClient) UpsertTag(ctx context.Context, in *UpsertTagRequest,
return out, nil
}
func (c *tagServiceClient) BatchUpsertTag(ctx context.Context, in *BatchUpsertTagRequest, opts ...grpc.CallOption) (*BatchUpsertTagResponse, error) {
out := new(BatchUpsertTagResponse)
func (c *tagServiceClient) BatchUpsertTag(ctx context.Context, in *BatchUpsertTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, TagService_BatchUpsertTag_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
......@@ -81,8 +82,8 @@ func (c *tagServiceClient) ListTags(ctx context.Context, in *ListTagsRequest, op
return out, nil
}
func (c *tagServiceClient) RenameTag(ctx context.Context, in *RenameTagRequest, opts ...grpc.CallOption) (*RenameTagResponse, error) {
out := new(RenameTagResponse)
func (c *tagServiceClient) RenameTag(ctx context.Context, in *RenameTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, TagService_RenameTag_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
......@@ -90,8 +91,8 @@ func (c *tagServiceClient) RenameTag(ctx context.Context, in *RenameTagRequest,
return out, nil
}
func (c *tagServiceClient) DeleteTag(ctx context.Context, in *DeleteTagRequest, opts ...grpc.CallOption) (*DeleteTagResponse, error) {
out := new(DeleteTagResponse)
func (c *tagServiceClient) DeleteTag(ctx context.Context, in *DeleteTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, TagService_DeleteTag_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
......@@ -113,16 +114,16 @@ func (c *tagServiceClient) GetTagSuggestions(ctx context.Context, in *GetTagSugg
// for forward compatibility
type TagServiceServer interface {
// UpsertTag upserts a tag.
UpsertTag(context.Context, *UpsertTagRequest) (*UpsertTagResponse, error)
UpsertTag(context.Context, *UpsertTagRequest) (*Tag, error)
// BatchUpsertTag upserts multiple tags.
BatchUpsertTag(context.Context, *BatchUpsertTagRequest) (*BatchUpsertTagResponse, error)
BatchUpsertTag(context.Context, *BatchUpsertTagRequest) (*emptypb.Empty, error)
// ListTags lists tags.
ListTags(context.Context, *ListTagsRequest) (*ListTagsResponse, error)
// RenameTag renames a tag.
// All related memos will be updated.
RenameTag(context.Context, *RenameTagRequest) (*RenameTagResponse, error)
RenameTag(context.Context, *RenameTagRequest) (*emptypb.Empty, error)
// DeleteTag deletes a tag.
DeleteTag(context.Context, *DeleteTagRequest) (*DeleteTagResponse, error)
DeleteTag(context.Context, *DeleteTagRequest) (*emptypb.Empty, error)
// GetTagSuggestions gets tag suggestions from the user's memos.
GetTagSuggestions(context.Context, *GetTagSuggestionsRequest) (*GetTagSuggestionsResponse, error)
mustEmbedUnimplementedTagServiceServer()
......@@ -132,19 +133,19 @@ type TagServiceServer interface {
type UnimplementedTagServiceServer struct {
}
func (UnimplementedTagServiceServer) UpsertTag(context.Context, *UpsertTagRequest) (*UpsertTagResponse, error) {
func (UnimplementedTagServiceServer) UpsertTag(context.Context, *UpsertTagRequest) (*Tag, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpsertTag not implemented")
}
func (UnimplementedTagServiceServer) BatchUpsertTag(context.Context, *BatchUpsertTagRequest) (*BatchUpsertTagResponse, error) {
func (UnimplementedTagServiceServer) BatchUpsertTag(context.Context, *BatchUpsertTagRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchUpsertTag not implemented")
}
func (UnimplementedTagServiceServer) ListTags(context.Context, *ListTagsRequest) (*ListTagsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListTags not implemented")
}
func (UnimplementedTagServiceServer) RenameTag(context.Context, *RenameTagRequest) (*RenameTagResponse, error) {
func (UnimplementedTagServiceServer) RenameTag(context.Context, *RenameTagRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method RenameTag not implemented")
}
func (UnimplementedTagServiceServer) DeleteTag(context.Context, *DeleteTagRequest) (*DeleteTagResponse, error) {
func (UnimplementedTagServiceServer) DeleteTag(context.Context, *DeleteTagRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteTag not implemented")
}
func (UnimplementedTagServiceServer) GetTagSuggestions(context.Context, *GetTagSuggestionsRequest) (*GetTagSuggestionsResponse, error) {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -11,6 +11,7 @@ import (
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
emptypb "google.golang.org/protobuf/types/known/emptypb"
)
// This is a compile-time assertion to ensure that this generated file
......@@ -31,15 +32,15 @@ const (
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type WebhookServiceClient interface {
// CreateWebhook creates a new webhook.
CreateWebhook(ctx context.Context, in *CreateWebhookRequest, opts ...grpc.CallOption) (*CreateWebhookResponse, error)
CreateWebhook(ctx context.Context, in *CreateWebhookRequest, opts ...grpc.CallOption) (*Webhook, error)
// GetWebhook returns a webhook by id.
GetWebhook(ctx context.Context, in *GetWebhookRequest, opts ...grpc.CallOption) (*GetWebhookResponse, error)
GetWebhook(ctx context.Context, in *GetWebhookRequest, opts ...grpc.CallOption) (*Webhook, error)
// ListWebhooks returns a list of webhooks.
ListWebhooks(ctx context.Context, in *ListWebhooksRequest, opts ...grpc.CallOption) (*ListWebhooksResponse, error)
// UpdateWebhook updates a webhook.
UpdateWebhook(ctx context.Context, in *UpdateWebhookRequest, opts ...grpc.CallOption) (*UpdateWebhookResponse, error)
UpdateWebhook(ctx context.Context, in *UpdateWebhookRequest, opts ...grpc.CallOption) (*Webhook, error)
// DeleteWebhook deletes a webhook by id.
DeleteWebhook(ctx context.Context, in *DeleteWebhookRequest, opts ...grpc.CallOption) (*DeleteWebhookResponse, error)
DeleteWebhook(ctx context.Context, in *DeleteWebhookRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
}
type webhookServiceClient struct {
......@@ -50,8 +51,8 @@ func NewWebhookServiceClient(cc grpc.ClientConnInterface) WebhookServiceClient {
return &webhookServiceClient{cc}
}
func (c *webhookServiceClient) CreateWebhook(ctx context.Context, in *CreateWebhookRequest, opts ...grpc.CallOption) (*CreateWebhookResponse, error) {
out := new(CreateWebhookResponse)
func (c *webhookServiceClient) CreateWebhook(ctx context.Context, in *CreateWebhookRequest, opts ...grpc.CallOption) (*Webhook, error) {
out := new(Webhook)
err := c.cc.Invoke(ctx, WebhookService_CreateWebhook_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
......@@ -59,8 +60,8 @@ func (c *webhookServiceClient) CreateWebhook(ctx context.Context, in *CreateWebh
return out, nil
}
func (c *webhookServiceClient) GetWebhook(ctx context.Context, in *GetWebhookRequest, opts ...grpc.CallOption) (*GetWebhookResponse, error) {
out := new(GetWebhookResponse)
func (c *webhookServiceClient) GetWebhook(ctx context.Context, in *GetWebhookRequest, opts ...grpc.CallOption) (*Webhook, error) {
out := new(Webhook)
err := c.cc.Invoke(ctx, WebhookService_GetWebhook_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
......@@ -77,8 +78,8 @@ func (c *webhookServiceClient) ListWebhooks(ctx context.Context, in *ListWebhook
return out, nil
}
func (c *webhookServiceClient) UpdateWebhook(ctx context.Context, in *UpdateWebhookRequest, opts ...grpc.CallOption) (*UpdateWebhookResponse, error) {
out := new(UpdateWebhookResponse)
func (c *webhookServiceClient) UpdateWebhook(ctx context.Context, in *UpdateWebhookRequest, opts ...grpc.CallOption) (*Webhook, error) {
out := new(Webhook)
err := c.cc.Invoke(ctx, WebhookService_UpdateWebhook_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
......@@ -86,8 +87,8 @@ func (c *webhookServiceClient) UpdateWebhook(ctx context.Context, in *UpdateWebh
return out, nil
}
func (c *webhookServiceClient) DeleteWebhook(ctx context.Context, in *DeleteWebhookRequest, opts ...grpc.CallOption) (*DeleteWebhookResponse, error) {
out := new(DeleteWebhookResponse)
func (c *webhookServiceClient) DeleteWebhook(ctx context.Context, in *DeleteWebhookRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, WebhookService_DeleteWebhook_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
......@@ -100,15 +101,15 @@ func (c *webhookServiceClient) DeleteWebhook(ctx context.Context, in *DeleteWebh
// for forward compatibility
type WebhookServiceServer interface {
// CreateWebhook creates a new webhook.
CreateWebhook(context.Context, *CreateWebhookRequest) (*CreateWebhookResponse, error)
CreateWebhook(context.Context, *CreateWebhookRequest) (*Webhook, error)
// GetWebhook returns a webhook by id.
GetWebhook(context.Context, *GetWebhookRequest) (*GetWebhookResponse, error)
GetWebhook(context.Context, *GetWebhookRequest) (*Webhook, error)
// ListWebhooks returns a list of webhooks.
ListWebhooks(context.Context, *ListWebhooksRequest) (*ListWebhooksResponse, error)
// UpdateWebhook updates a webhook.
UpdateWebhook(context.Context, *UpdateWebhookRequest) (*UpdateWebhookResponse, error)
UpdateWebhook(context.Context, *UpdateWebhookRequest) (*Webhook, error)
// DeleteWebhook deletes a webhook by id.
DeleteWebhook(context.Context, *DeleteWebhookRequest) (*DeleteWebhookResponse, error)
DeleteWebhook(context.Context, *DeleteWebhookRequest) (*emptypb.Empty, error)
mustEmbedUnimplementedWebhookServiceServer()
}
......@@ -116,19 +117,19 @@ type WebhookServiceServer interface {
type UnimplementedWebhookServiceServer struct {
}
func (UnimplementedWebhookServiceServer) CreateWebhook(context.Context, *CreateWebhookRequest) (*CreateWebhookResponse, error) {
func (UnimplementedWebhookServiceServer) CreateWebhook(context.Context, *CreateWebhookRequest) (*Webhook, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateWebhook not implemented")
}
func (UnimplementedWebhookServiceServer) GetWebhook(context.Context, *GetWebhookRequest) (*GetWebhookResponse, error) {
func (UnimplementedWebhookServiceServer) GetWebhook(context.Context, *GetWebhookRequest) (*Webhook, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetWebhook not implemented")
}
func (UnimplementedWebhookServiceServer) ListWebhooks(context.Context, *ListWebhooksRequest) (*ListWebhooksResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListWebhooks not implemented")
}
func (UnimplementedWebhookServiceServer) UpdateWebhook(context.Context, *UpdateWebhookRequest) (*UpdateWebhookResponse, error) {
func (UnimplementedWebhookServiceServer) UpdateWebhook(context.Context, *UpdateWebhookRequest) (*Webhook, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateWebhook not implemented")
}
func (UnimplementedWebhookServiceServer) DeleteWebhook(context.Context, *DeleteWebhookRequest) (*DeleteWebhookResponse, error) {
func (UnimplementedWebhookServiceServer) DeleteWebhook(context.Context, *DeleteWebhookRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteWebhook not implemented")
}
func (UnimplementedWebhookServiceServer) mustEmbedUnimplementedWebhookServiceServer() {}
......
......@@ -31,9 +31,9 @@ type WorkspaceSettingServiceClient interface {
// ListWorkspaceSetting returns the list of settings.
ListWorkspaceSettings(ctx context.Context, in *ListWorkspaceSettingsRequest, opts ...grpc.CallOption) (*ListWorkspaceSettingsResponse, error)
// GetWorkspaceSetting returns the setting by name.
GetWorkspaceSetting(ctx context.Context, in *GetWorkspaceSettingRequest, opts ...grpc.CallOption) (*GetWorkspaceSettingResponse, error)
GetWorkspaceSetting(ctx context.Context, in *GetWorkspaceSettingRequest, opts ...grpc.CallOption) (*WorkspaceSetting, error)
// SetWorkspaceSetting updates the setting.
SetWorkspaceSetting(ctx context.Context, in *SetWorkspaceSettingRequest, opts ...grpc.CallOption) (*SetWorkspaceSettingResponse, error)
SetWorkspaceSetting(ctx context.Context, in *SetWorkspaceSettingRequest, opts ...grpc.CallOption) (*WorkspaceSetting, error)
}
type workspaceSettingServiceClient struct {
......@@ -53,8 +53,8 @@ func (c *workspaceSettingServiceClient) ListWorkspaceSettings(ctx context.Contex
return out, nil
}
func (c *workspaceSettingServiceClient) GetWorkspaceSetting(ctx context.Context, in *GetWorkspaceSettingRequest, opts ...grpc.CallOption) (*GetWorkspaceSettingResponse, error) {
out := new(GetWorkspaceSettingResponse)
func (c *workspaceSettingServiceClient) GetWorkspaceSetting(ctx context.Context, in *GetWorkspaceSettingRequest, opts ...grpc.CallOption) (*WorkspaceSetting, error) {
out := new(WorkspaceSetting)
err := c.cc.Invoke(ctx, WorkspaceSettingService_GetWorkspaceSetting_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
......@@ -62,8 +62,8 @@ func (c *workspaceSettingServiceClient) GetWorkspaceSetting(ctx context.Context,
return out, nil
}
func (c *workspaceSettingServiceClient) SetWorkspaceSetting(ctx context.Context, in *SetWorkspaceSettingRequest, opts ...grpc.CallOption) (*SetWorkspaceSettingResponse, error) {
out := new(SetWorkspaceSettingResponse)
func (c *workspaceSettingServiceClient) SetWorkspaceSetting(ctx context.Context, in *SetWorkspaceSettingRequest, opts ...grpc.CallOption) (*WorkspaceSetting, error) {
out := new(WorkspaceSetting)
err := c.cc.Invoke(ctx, WorkspaceSettingService_SetWorkspaceSetting_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
......@@ -78,9 +78,9 @@ type WorkspaceSettingServiceServer interface {
// ListWorkspaceSetting returns the list of settings.
ListWorkspaceSettings(context.Context, *ListWorkspaceSettingsRequest) (*ListWorkspaceSettingsResponse, error)
// GetWorkspaceSetting returns the setting by name.
GetWorkspaceSetting(context.Context, *GetWorkspaceSettingRequest) (*GetWorkspaceSettingResponse, error)
GetWorkspaceSetting(context.Context, *GetWorkspaceSettingRequest) (*WorkspaceSetting, error)
// SetWorkspaceSetting updates the setting.
SetWorkspaceSetting(context.Context, *SetWorkspaceSettingRequest) (*SetWorkspaceSettingResponse, error)
SetWorkspaceSetting(context.Context, *SetWorkspaceSettingRequest) (*WorkspaceSetting, error)
mustEmbedUnimplementedWorkspaceSettingServiceServer()
}
......@@ -91,10 +91,10 @@ type UnimplementedWorkspaceSettingServiceServer struct {
func (UnimplementedWorkspaceSettingServiceServer) ListWorkspaceSettings(context.Context, *ListWorkspaceSettingsRequest) (*ListWorkspaceSettingsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListWorkspaceSettings not implemented")
}
func (UnimplementedWorkspaceSettingServiceServer) GetWorkspaceSetting(context.Context, *GetWorkspaceSettingRequest) (*GetWorkspaceSettingResponse, error) {
func (UnimplementedWorkspaceSettingServiceServer) GetWorkspaceSetting(context.Context, *GetWorkspaceSettingRequest) (*WorkspaceSetting, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetWorkspaceSetting not implemented")
}
func (UnimplementedWorkspaceSettingServiceServer) SetWorkspaceSetting(context.Context, *SetWorkspaceSettingRequest) (*SetWorkspaceSettingResponse, error) {
func (UnimplementedWorkspaceSettingServiceServer) SetWorkspaceSetting(context.Context, *SetWorkspaceSettingRequest) (*WorkspaceSetting, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetWorkspaceSetting not implemented")
}
func (UnimplementedWorkspaceSettingServiceServer) mustEmbedUnimplementedWorkspaceSettingServiceServer() {
......
......@@ -13,12 +13,13 @@ import (
"github.com/yourselfhosted/gomark/restore"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/emptypb"
apiv2pb "github.com/usememos/memos/proto/gen/api/v2"
"github.com/usememos/memos/store"
)
func (s *APIV2Service) UpsertTag(ctx context.Context, request *apiv2pb.UpsertTagRequest) (*apiv2pb.UpsertTagResponse, error) {
func (s *APIV2Service) UpsertTag(ctx context.Context, request *apiv2pb.UpsertTagRequest) (*apiv2pb.Tag, error) {
user, err := getCurrentUser(ctx, s.Store)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get user")
......@@ -32,22 +33,20 @@ func (s *APIV2Service) UpsertTag(ctx context.Context, request *apiv2pb.UpsertTag
return nil, status.Errorf(codes.Internal, "failed to upsert tag: %v", err)
}
t, err := s.convertTagFromStore(ctx, tag)
tagMessage, err := s.convertTagFromStore(ctx, tag)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to convert tag: %v", err)
}
return &apiv2pb.UpsertTagResponse{
Tag: t,
}, nil
return tagMessage, nil
}
func (s *APIV2Service) BatchUpsertTag(ctx context.Context, request *apiv2pb.BatchUpsertTagRequest) (*apiv2pb.BatchUpsertTagResponse, error) {
func (s *APIV2Service) BatchUpsertTag(ctx context.Context, request *apiv2pb.BatchUpsertTagRequest) (*emptypb.Empty, error) {
for _, r := range request.Requests {
if _, err := s.UpsertTag(ctx, r); err != nil {
return nil, status.Errorf(codes.Internal, "failed to batch upsert tags: %v", err)
}
}
return &apiv2pb.BatchUpsertTagResponse{}, nil
return &emptypb.Empty{}, nil
}
func (s *APIV2Service) ListTags(ctx context.Context, _ *apiv2pb.ListTagsRequest) (*apiv2pb.ListTagsResponse, error) {
......@@ -77,7 +76,7 @@ func (s *APIV2Service) ListTags(ctx context.Context, _ *apiv2pb.ListTagsRequest)
return response, nil
}
func (s *APIV2Service) RenameTag(ctx context.Context, request *apiv2pb.RenameTagRequest) (*apiv2pb.RenameTagResponse, error) {
func (s *APIV2Service) RenameTag(ctx context.Context, request *apiv2pb.RenameTagRequest) (*emptypb.Empty, error) {
userID, err := ExtractUserIDFromName(request.User)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid user name: %v", err)
......@@ -127,22 +126,17 @@ func (s *APIV2Service) RenameTag(ctx context.Context, request *apiv2pb.RenameTag
}); err != nil {
return nil, status.Errorf(codes.Internal, "failed to delete tag: %v", err)
}
tag, err := s.Store.UpsertTag(ctx, &store.Tag{
if _, err := s.Store.UpsertTag(ctx, &store.Tag{
CreatorID: user.ID,
Name: request.NewName,
})
if err != nil {
}); err != nil {
return nil, status.Errorf(codes.Internal, "failed to upsert tag: %v", err)
}
tagMessage, err := s.convertTagFromStore(ctx, tag)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to convert tag: %v", err)
}
return &apiv2pb.RenameTagResponse{Tag: tagMessage}, nil
return &emptypb.Empty{}, nil
}
func (s *APIV2Service) DeleteTag(ctx context.Context, request *apiv2pb.DeleteTagRequest) (*apiv2pb.DeleteTagResponse, error) {
func (s *APIV2Service) DeleteTag(ctx context.Context, request *apiv2pb.DeleteTagRequest) (*emptypb.Empty, error) {
userID, err := ExtractUserIDFromName(request.Tag.Creator)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid user name: %v", err)
......@@ -163,7 +157,7 @@ func (s *APIV2Service) DeleteTag(ctx context.Context, request *apiv2pb.DeleteTag
return nil, status.Errorf(codes.Internal, "failed to delete tag: %v", err)
}
return &apiv2pb.DeleteTagResponse{}, nil
return &emptypb.Empty{}, nil
}
func (s *APIV2Service) GetTagSuggestions(ctx context.Context, request *apiv2pb.GetTagSuggestionsRequest) (*apiv2pb.GetTagSuggestionsResponse, error) {
......
......@@ -16,6 +16,7 @@ import (
expr "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/emptypb"
"google.golang.org/protobuf/types/known/timestamppb"
"github.com/usememos/memos/internal/util"
......@@ -81,7 +82,7 @@ func (s *APIV2Service) SearchUsers(ctx context.Context, request *apiv2pb.SearchU
return response, nil
}
func (s *APIV2Service) GetUser(ctx context.Context, request *apiv2pb.GetUserRequest) (*apiv2pb.GetUserResponse, error) {
func (s *APIV2Service) GetUser(ctx context.Context, request *apiv2pb.GetUserRequest) (*apiv2pb.User, error) {
userID, err := ExtractUserIDFromName(request.Name)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid user name: %v", err)
......@@ -96,14 +97,10 @@ func (s *APIV2Service) GetUser(ctx context.Context, request *apiv2pb.GetUserRequ
return nil, status.Errorf(codes.NotFound, "user not found")
}
userMessage := convertUserFromStore(user)
response := &apiv2pb.GetUserResponse{
User: userMessage,
}
return response, nil
return convertUserFromStore(user), nil
}
func (s *APIV2Service) CreateUser(ctx context.Context, request *apiv2pb.CreateUserRequest) (*apiv2pb.CreateUserResponse, error) {
func (s *APIV2Service) CreateUser(ctx context.Context, request *apiv2pb.CreateUserRequest) (*apiv2pb.User, error) {
currentUser, err := getCurrentUser(ctx, s.Store)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get user: %v", err)
......@@ -130,13 +127,10 @@ func (s *APIV2Service) CreateUser(ctx context.Context, request *apiv2pb.CreateUs
return nil, status.Errorf(codes.Internal, "failed to create user: %v", err)
}
response := &apiv2pb.CreateUserResponse{
User: convertUserFromStore(user),
}
return response, nil
return convertUserFromStore(user), nil
}
func (s *APIV2Service) UpdateUser(ctx context.Context, request *apiv2pb.UpdateUserRequest) (*apiv2pb.UpdateUserResponse, error) {
func (s *APIV2Service) UpdateUser(ctx context.Context, request *apiv2pb.UpdateUserRequest) (*apiv2pb.User, error) {
userID, err := ExtractUserIDFromName(request.User.Name)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid user name: %v", err)
......@@ -202,13 +196,10 @@ func (s *APIV2Service) UpdateUser(ctx context.Context, request *apiv2pb.UpdateUs
return nil, status.Errorf(codes.Internal, "failed to update user: %v", err)
}
response := &apiv2pb.UpdateUserResponse{
User: convertUserFromStore(updatedUser),
}
return response, nil
return convertUserFromStore(updatedUser), nil
}
func (s *APIV2Service) DeleteUser(ctx context.Context, request *apiv2pb.DeleteUserRequest) (*apiv2pb.DeleteUserResponse, error) {
func (s *APIV2Service) DeleteUser(ctx context.Context, request *apiv2pb.DeleteUserRequest) (*emptypb.Empty, error) {
userID, err := ExtractUserIDFromName(request.Name)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid user name: %v", err)
......@@ -235,7 +226,7 @@ func (s *APIV2Service) DeleteUser(ctx context.Context, request *apiv2pb.DeleteUs
return nil, status.Errorf(codes.Internal, "failed to delete user: %v", err)
}
return &apiv2pb.DeleteUserResponse{}, nil
return &emptypb.Empty{}, nil
}
func getDefaultUserSetting() *apiv2pb.UserSetting {
......@@ -246,7 +237,7 @@ func getDefaultUserSetting() *apiv2pb.UserSetting {
}
}
func (s *APIV2Service) GetUserSetting(ctx context.Context, _ *apiv2pb.GetUserSettingRequest) (*apiv2pb.GetUserSettingResponse, error) {
func (s *APIV2Service) GetUserSetting(ctx context.Context, _ *apiv2pb.GetUserSettingRequest) (*apiv2pb.UserSetting, error) {
user, err := getCurrentUser(ctx, s.Store)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get current user: %v", err)
......@@ -268,12 +259,10 @@ func (s *APIV2Service) GetUserSetting(ctx context.Context, _ *apiv2pb.GetUserSet
userSettingMessage.MemoVisibility = setting.GetMemoVisibility()
}
}
return &apiv2pb.GetUserSettingResponse{
Setting: userSettingMessage,
}, nil
return userSettingMessage, nil
}
func (s *APIV2Service) UpdateUserSetting(ctx context.Context, request *apiv2pb.UpdateUserSettingRequest) (*apiv2pb.UpdateUserSettingResponse, error) {
func (s *APIV2Service) UpdateUserSetting(ctx context.Context, request *apiv2pb.UpdateUserSettingRequest) (*apiv2pb.UserSetting, error) {
user, err := getCurrentUser(ctx, s.Store)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get current user: %v", err)
......@@ -319,13 +308,7 @@ func (s *APIV2Service) UpdateUserSetting(ctx context.Context, request *apiv2pb.U
}
}
userSettingResponse, err := s.GetUserSetting(ctx, &apiv2pb.GetUserSettingRequest{})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get user setting: %v", err)
}
return &apiv2pb.UpdateUserSettingResponse{
Setting: userSettingResponse.Setting,
}, nil
return s.GetUserSetting(ctx, &apiv2pb.GetUserSettingRequest{})
}
func (s *APIV2Service) ListUserAccessTokens(ctx context.Context, _ *apiv2pb.ListUserAccessTokensRequest) (*apiv2pb.ListUserAccessTokensResponse, error) {
......@@ -382,7 +365,7 @@ func (s *APIV2Service) ListUserAccessTokens(ctx context.Context, _ *apiv2pb.List
return response, nil
}
func (s *APIV2Service) CreateUserAccessToken(ctx context.Context, request *apiv2pb.CreateUserAccessTokenRequest) (*apiv2pb.CreateUserAccessTokenResponse, error) {
func (s *APIV2Service) CreateUserAccessToken(ctx context.Context, request *apiv2pb.CreateUserAccessTokenRequest) (*apiv2pb.UserAccessToken, error) {
user, err := getCurrentUser(ctx, s.Store)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get current user: %v", err)
......@@ -427,13 +410,10 @@ func (s *APIV2Service) CreateUserAccessToken(ctx context.Context, request *apiv2
if claims.ExpiresAt != nil {
userAccessToken.ExpiresAt = timestamppb.New(claims.ExpiresAt.Time)
}
response := &apiv2pb.CreateUserAccessTokenResponse{
AccessToken: userAccessToken,
}
return response, nil
return userAccessToken, nil
}
func (s *APIV2Service) DeleteUserAccessToken(ctx context.Context, request *apiv2pb.DeleteUserAccessTokenRequest) (*apiv2pb.DeleteUserAccessTokenResponse, error) {
func (s *APIV2Service) DeleteUserAccessToken(ctx context.Context, request *apiv2pb.DeleteUserAccessTokenRequest) (*emptypb.Empty, error) {
user, err := getCurrentUser(ctx, s.Store)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get current user: %v", err)
......@@ -462,7 +442,7 @@ func (s *APIV2Service) DeleteUserAccessToken(ctx context.Context, request *apiv2
return nil, status.Errorf(codes.Internal, "failed to upsert user setting: %v", err)
}
return &apiv2pb.DeleteUserAccessTokenResponse{}, nil
return &emptypb.Empty{}, nil
}
func (s *APIV2Service) UpsertAccessTokenToStore(ctx context.Context, user *store.User, accessToken, description string) error {
......
......@@ -6,13 +6,14 @@ import (
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/emptypb"
"google.golang.org/protobuf/types/known/timestamppb"
apiv2pb "github.com/usememos/memos/proto/gen/api/v2"
"github.com/usememos/memos/store"
)
func (s *APIV2Service) CreateWebhook(ctx context.Context, request *apiv2pb.CreateWebhookRequest) (*apiv2pb.CreateWebhookResponse, error) {
func (s *APIV2Service) CreateWebhook(ctx context.Context, request *apiv2pb.CreateWebhookRequest) (*apiv2pb.Webhook, error) {
currentUser, err := getCurrentUser(ctx, s.Store)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get user: %v", err)
......@@ -26,9 +27,7 @@ func (s *APIV2Service) CreateWebhook(ctx context.Context, request *apiv2pb.Creat
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to create webhook, error: %+v", err)
}
return &apiv2pb.CreateWebhookResponse{
Webhook: convertWebhookFromStore(webhook),
}, nil
return convertWebhookFromStore(webhook), nil
}
func (s *APIV2Service) ListWebhooks(ctx context.Context, request *apiv2pb.ListWebhooksRequest) (*apiv2pb.ListWebhooksResponse, error) {
......@@ -48,7 +47,7 @@ func (s *APIV2Service) ListWebhooks(ctx context.Context, request *apiv2pb.ListWe
return response, nil
}
func (s *APIV2Service) GetWebhook(ctx context.Context, request *apiv2pb.GetWebhookRequest) (*apiv2pb.GetWebhookResponse, error) {
func (s *APIV2Service) GetWebhook(ctx context.Context, request *apiv2pb.GetWebhookRequest) (*apiv2pb.Webhook, error) {
currentUser, err := getCurrentUser(ctx, s.Store)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get user: %v", err)
......@@ -64,12 +63,10 @@ func (s *APIV2Service) GetWebhook(ctx context.Context, request *apiv2pb.GetWebho
if webhook == nil {
return nil, status.Errorf(codes.NotFound, "webhook not found")
}
return &apiv2pb.GetWebhookResponse{
Webhook: convertWebhookFromStore(webhook),
}, nil
return convertWebhookFromStore(webhook), nil
}
func (s *APIV2Service) UpdateWebhook(ctx context.Context, request *apiv2pb.UpdateWebhookRequest) (*apiv2pb.UpdateWebhookResponse, error) {
func (s *APIV2Service) UpdateWebhook(ctx context.Context, request *apiv2pb.UpdateWebhookRequest) (*apiv2pb.Webhook, error) {
if request.UpdateMask == nil || len(request.UpdateMask.Paths) == 0 {
return nil, status.Errorf(codes.InvalidArgument, "update_mask is required")
}
......@@ -91,19 +88,17 @@ func (s *APIV2Service) UpdateWebhook(ctx context.Context, request *apiv2pb.Updat
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to update webhook, error: %+v", err)
}
return &apiv2pb.UpdateWebhookResponse{
Webhook: convertWebhookFromStore(webhook),
}, nil
return convertWebhookFromStore(webhook), nil
}
func (s *APIV2Service) DeleteWebhook(ctx context.Context, request *apiv2pb.DeleteWebhookRequest) (*apiv2pb.DeleteWebhookResponse, error) {
func (s *APIV2Service) DeleteWebhook(ctx context.Context, request *apiv2pb.DeleteWebhookRequest) (*emptypb.Empty, error) {
err := s.Store.DeleteWebhook(ctx, &store.DeleteWebhook{
ID: request.Id,
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to delete webhook, error: %+v", err)
}
return &apiv2pb.DeleteWebhookResponse{}, nil
return &emptypb.Empty{}, nil
}
func convertWebhookFromStore(webhook *store.Webhook) *apiv2pb.Webhook {
......
......@@ -30,7 +30,7 @@ func (s *APIV2Service) ListWorkspaceSettings(ctx context.Context, _ *apiv2pb.Lis
return response, nil
}
func (s *APIV2Service) GetWorkspaceSetting(ctx context.Context, request *apiv2pb.GetWorkspaceSettingRequest) (*apiv2pb.GetWorkspaceSettingResponse, error) {
func (s *APIV2Service) GetWorkspaceSetting(ctx context.Context, request *apiv2pb.GetWorkspaceSettingRequest) (*apiv2pb.WorkspaceSetting, error) {
settingKeyString, err := ExtractWorkspaceSettingKeyFromName(request.Name)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid workspace setting name: %v", err)
......@@ -46,12 +46,10 @@ func (s *APIV2Service) GetWorkspaceSetting(ctx context.Context, request *apiv2pb
return nil, status.Errorf(codes.NotFound, "workspace setting not found")
}
return &apiv2pb.GetWorkspaceSettingResponse{
Setting: convertWorkspaceSettingFromStore(workspaceSetting),
}, nil
return convertWorkspaceSettingFromStore(workspaceSetting), nil
}
func (s *APIV2Service) SetWorkspaceSetting(ctx context.Context, request *apiv2pb.SetWorkspaceSettingRequest) (*apiv2pb.SetWorkspaceSettingResponse, error) {
func (s *APIV2Service) SetWorkspaceSetting(ctx context.Context, request *apiv2pb.SetWorkspaceSettingRequest) (*apiv2pb.WorkspaceSetting, error) {
if s.Profile.Mode == "demo" {
return nil, status.Errorf(codes.InvalidArgument, "setting workspace setting is not allowed in demo mode")
}
......@@ -64,11 +62,12 @@ func (s *APIV2Service) SetWorkspaceSetting(ctx context.Context, request *apiv2pb
return nil, status.Errorf(codes.PermissionDenied, "permission denied")
}
if _, err := s.Store.UpsertWorkspaceSetting(ctx, convertWorkspaceSettingToStore(request.Setting)); err != nil {
workspaceSetting, err := s.Store.UpsertWorkspaceSetting(ctx, convertWorkspaceSettingToStore(request.Setting))
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to upsert workspace setting: %v", err)
}
return &apiv2pb.SetWorkspaceSettingResponse{}, nil
return convertWorkspaceSettingFromStore(workspaceSetting), nil
}
func convertWorkspaceSettingFromStore(setting *storepb.WorkspaceSetting) *apiv2pb.WorkspaceSetting {
......
......@@ -15,12 +15,12 @@ export const useTagStore = create(
setState: (state: State) => set(state),
getState: () => get(),
fetchTags: async (options?: { skipCache: boolean }) => {
const { tags } = get();
if (tags.size && !options?.skipCache) {
return tags;
const { tags: tagsCache } = get();
if (tagsCache.size && !options?.skipCache) {
return tagsCache;
}
const res = await tagServiceClient.listTags({});
set({ tags: new Set(res.tags.map((tag) => tag.name)) });
const { tags } = await tagServiceClient.listTags({});
set({ tags: new Set(tags.map((tag) => tag.name)) });
return tags;
},
upsertTag: async (tagName: string) => {
......
......@@ -52,7 +52,7 @@ export const useUserStore = create(
.getUser({
name: name,
})
.then(({ user }) => user);
.then((user) => user);
requestCache.set(name, promisedUser);
const user = await promisedUser;
if (!user) {
......@@ -88,13 +88,10 @@ export const useUserStore = create(
return userMap[name];
},
updateUser: async (user: Partial<User>, updateMask: string[]) => {
const { user: updatedUser } = await userServiceClient.updateUser({
const updatedUser = await userServiceClient.updateUser({
user: user,
updateMask: updateMask,
});
if (!updatedUser) {
throw new Error("User not found");
}
const userMap = get().userMapByName;
if (user.name && user.name !== updatedUser.name) {
delete userMap[user.name];
......@@ -119,7 +116,7 @@ export const useUserStore = create(
const userMap = get().userMapByName;
userMap[user.name] = user;
set({ currentUser: user.name, userMapByName: userMap });
const { setting } = await userServiceClient.getUserSetting({});
const setting = await userServiceClient.getUserSetting({});
set({
userSetting: UserSetting.fromPartial({
...getDefaultUserSetting(),
......@@ -129,13 +126,10 @@ export const useUserStore = create(
return user;
},
updateUserSetting: async (userSetting: Partial<UserSetting>, updateMask: string[]) => {
const { setting: updatedUserSetting } = await userServiceClient.updateUserSetting({
const updatedUserSetting = await userServiceClient.updateUserSetting({
setting: userSetting,
updateMask: updateMask,
});
if (!updatedUserSetting) {
throw new Error("User setting not found");
}
set({ userSetting: updatedUserSetting });
return updatedUserSetting;
},
......
......@@ -23,10 +23,7 @@ export const useWorkspaceSettingStore = create(
set({ workspaceSettingByName: settings.reduce((acc, setting) => ({ ...acc, [setting.name]: setting }), {}) });
},
fetchWorkspaceSetting: async (key: WorkspaceSettingKey) => {
const { setting } = await workspaceSettingServiceClient.getWorkspaceSetting({ name: `${WorkspaceSettingPrefix}${key}` });
if (!setting) {
throw new Error("Workspace setting not found");
}
const setting = await workspaceSettingServiceClient.getWorkspaceSetting({ name: `${WorkspaceSettingPrefix}${key}` });
set({ workspaceSettingByName: { ...get().workspaceSettingByName, [setting.name]: setting } });
},
getWorkspaceSettingByKey: (key: WorkspaceSettingKey): WorkspaceSetting => {
......
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