Commit 92872118 authored by Steven's avatar Steven

refactor: tweak api definition

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