diff --git a/proto/decentraland/social_service/v1/social_service.proto b/proto/decentraland/social_service/v1/social_service.proto new file mode 100644 index 00000000..2a0cf2ab --- /dev/null +++ b/proto/decentraland/social_service/v1/social_service.proto @@ -0,0 +1,163 @@ +syntax = "proto3"; +package decentraland.social_service.v1; + +// This message is a response that is sent from the server to the client +message FriendshipEventResponse { + oneof body { + RequestResponse request = 1; + AcceptResponse accept = 2; + RejectResponse reject = 4; + DeleteResponse delete = 5; + CancelResponse cancel = 6; + } +} + +message FriendshipEventResponses { + repeated FriendshipEventResponse responses = 1; +} + +message FriendshipEventPayload { + oneof body { + RequestPayload request = 1; + AcceptPayload accept = 2; + RejectPayload reject = 4; + DeletePayload delete = 5; + CancelPayload cancel = 6; + } +} + +message User { string address = 1; } + +message Users { repeated User users = 1; } + +message RequestResponse { + User user = 1; + int64 created_at = 2; + optional string message = 3; +} + +message RequestPayload { + User user = 1; + optional string message = 3; +} + +message Requests { + int64 total = 1; // Total amount of friendship requests + repeated RequestResponse items = 2; +} + +message RequestEvents { + Requests outgoing = 1; // Requests the authed user have sent to users + Requests incoming = 2; // Requests the authed user have received from users +} + +message AcceptResponse { User user = 1; } + +message AcceptPayload { User user = 1; } + +message RejectResponse { User user = 1; } + +message RejectPayload { User user = 1; } + +message DeleteResponse { User user = 1; } + +message DeletePayload { User user = 1; } + +message CancelResponse { User user = 1; } + +message CancelPayload { User user = 1; } + +message UpdateFriendshipPayload { + FriendshipEventPayload event = 1; + // For internal use only, subject to change. + optional Payload auth_token = 2; +} + +message MutualFriendsPayload { + User user = 1; + // For internal use only, subject to change. + optional Payload auth_token = 2; +} + +message Payload { + // For internal use only, subject to change. + optional string synapse_token = 1; +} + +message BadRequestError { + string message = 1; +} +message UnauthorizedError { + string message = 1; +} +message ForbiddenError { + string message = 1; +} +message TooManyRequestsError { + string message = 1; +} +message InternalServerError { + string message = 1; +} + +message UsersResponse { + oneof response { + Users users = 1; + InternalServerError internal_server_error = 2; + UnauthorizedError unauthorized_error = 3; + ForbiddenError forbidden_error = 4; + TooManyRequestsError too_many_requests_error = 5; + BadRequestError bad_request_error = 6; + } +} + +message RequestEventsResponse { + oneof response { + RequestEvents events = 1; + InternalServerError internal_server_error = 2; + UnauthorizedError unauthorized_error = 3; + ForbiddenError forbidden_error = 4; + TooManyRequestsError too_many_requests_error = 5; + } +} + +message UpdateFriendshipResponse { + oneof response { + FriendshipEventResponse event = 1; + InternalServerError internal_server_error = 2; + UnauthorizedError unauthorized_error = 3; + ForbiddenError forbidden_error = 4; + TooManyRequestsError too_many_requests_error = 5; + BadRequestError bad_request_error = 6; + } +} + +message SubscribeFriendshipEventsUpdatesResponse { + oneof response { + FriendshipEventResponses events = 1; + InternalServerError internal_server_error = 2; + UnauthorizedError unauthorized_error = 3; + ForbiddenError forbidden_error = 4; + TooManyRequestsError too_many_requests_error = 5; + } +} + +// @deprecated, only available for old explorer compatibility +service FriendshipsService { + // Get the list of friends for the authenticated user + rpc GetFriends(Payload) returns (stream UsersResponse) {} + + // Get the list of mutual friends between the authenticated user and the one in the parameter + rpc GetMutualFriends(MutualFriendsPayload) returns (stream UsersResponse) {} + + // Get the list of request events for the authenticated user + rpc GetRequestEvents(Payload) returns (RequestEventsResponse) {} + + // Update friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc UpdateFriendshipEvent(UpdateFriendshipPayload) + returns (UpdateFriendshipResponse) {} + + // Subscribe to updates of friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc SubscribeFriendshipEventsUpdates(Payload) + returns (stream SubscribeFriendshipEventsUpdatesResponse) {} +} diff --git a/proto/decentraland/social_service/v2/social_service.proto b/proto/decentraland/social_service/v2/social_service.proto new file mode 100644 index 00000000..cf9cbd5b --- /dev/null +++ b/proto/decentraland/social_service/v2/social_service.proto @@ -0,0 +1,112 @@ +syntax = "proto3"; +package decentraland.social_service.v2; + +import "google/protobuf/empty.proto"; + +// Errors + +message InvalidFriendshipAction {} + +message InternalServerError {} + +// Types + +message User { string address = 1; } + +message RequestResponse { + User user = 1; + int64 created_at = 2; + optional string message = 3; +} + +message RequestPayload { + User user = 1; + optional string message = 3; +} + +message Requests { + repeated RequestResponse requests = 1; +} + +message AcceptResponse { User user = 1; } + +message AcceptPayload { User user = 1; } + +message RejectResponse { User user = 1; } + +message RejectPayload { User user = 1; } + +message DeleteResponse { User user = 1; } + +message DeletePayload { User user = 1; } + +message CancelResponse { User user = 1; } + +message CancelPayload { User user = 1; } + +message UpsertFriendshipPayload { + oneof action { + RequestPayload request = 1; + AcceptPayload accept = 2; + RejectPayload reject = 4; + DeletePayload delete = 5; + CancelPayload cancel = 6; + } +} + +message MutualFriendsPayload { + User user = 1; +} + +message UsersResponse { + repeated User users = 1; +} + +message FriendshipRequestsResponse { + oneof response { + Requests requests = 1; + InternalServerError internal_server_error = 2; + } +} + +message UpsertFriendshipResponse { + message Accepted {} + oneof response { + Accepted accepted = 1; + InvalidFriendshipAction invalid_friendship_action = 2; + InternalServerError internal_server_error = 3; + } +} + +message FriendshipUpdate { + oneof update { + RequestResponse request = 1; + AcceptResponse accept = 2; + RejectResponse reject = 4; + DeleteResponse delete = 5; + CancelResponse cancel = 6; + } +} + +// @deprecated, used for initial migration without Matrix +service SocialService { + // Get the list of friends for the authenticated user + rpc GetFriends(google.protobuf.Empty) returns (stream UsersResponse) {} + + // Get the list of mutual friends between the authenticated user and the one in the parameter + rpc GetMutualFriends(MutualFriendsPayload) returns (stream UsersResponse) {} + + // Get the pending friendship requests for the authenticated user + rpc GetPendingFriendshipRequests(google.protobuf.Empty) returns (FriendshipRequestsResponse) {} + + // Get the sent friendship requests for the authenticated user + rpc GetSentFriendshipRequests(google.protobuf.Empty) returns (FriendshipRequestsResponse) {} + + // Create or update friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc UpsertFriendship(UpsertFriendshipPayload) + returns (UpsertFriendshipResponse) {} + + // Subscribe to updates of friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc SubscribeToFriendshipUpdates(google.protobuf.Empty) + returns (stream FriendshipUpdate) {} +} diff --git a/proto/decentraland/social_service/v3/social_service.proto b/proto/decentraland/social_service/v3/social_service.proto new file mode 100644 index 00000000..167b0fde --- /dev/null +++ b/proto/decentraland/social_service/v3/social_service.proto @@ -0,0 +1,159 @@ +syntax = "proto3"; +package decentraland.social_service.v3; + +import "google/protobuf/empty.proto"; + +// Errors +message InvalidFriendshipAction {} +message InternalServerError {} + +// Types +message User { string address = 1; } + +message Pagination { + int32 limit = 1; + int32 offset = 2; +} + +message FriendshipRequestResponse { + User user = 1; + int64 created_at = 2; + optional string message = 3; +} + +message FriendshipRequests { + repeated FriendshipRequestResponse requests = 1; +} + +enum ConnectivityStatus { + ONLINE = 0; + OFFLINE = 1; + AWAY = 2; +} + +message GetFriendsPayload { + optional Pagination pagination = 1; + optional ConnectivityStatus status = 2; +} + +message GetFriendshipRequestsPayload { + optional Pagination pagination = 1; +} + +message UpsertFriendshipPayload { + message RequestPayload { + User user = 1; + optional string message = 3; + } + message AcceptPayload { User user = 1; } + message RejectPayload { User user = 1; } + message DeletePayload { User user = 1; } + message CancelPayload { User user = 1; } + + oneof action { + RequestPayload request = 1; + AcceptPayload accept = 2; + RejectPayload reject = 4; + DeletePayload delete = 5; + CancelPayload cancel = 6; + } +} + +message GetMutualFriendsPayload { + User user = 1; + optional Pagination pagination = 2; +} + +message PaginatedResponse { + int32 total = 1; + int32 page = 2; +} + +message PaginatedUsersResponse { + repeated User users = 1; + PaginatedResponse pagination_data = 2; +} + +message PaginatedFriendshipRequestsResponse { + oneof response { + FriendshipRequests requests = 1; + InternalServerError internal_server_error = 2; + } + optional PaginatedResponse pagination_data = 3; +} + +message UpsertFriendshipResponse { + message Accepted { + string id = 1; + int64 created_at = 2; + } + oneof response { + Accepted accepted = 1; + InvalidFriendshipAction invalid_friendship_action = 2; + InternalServerError internal_server_error = 3; + } +} + +message FriendshipUpdate { + message AcceptResponse { User user = 1; } + message RejectResponse { User user = 1; } + message DeleteResponse { User user = 1; } + message CancelResponse { User user = 1; } + + oneof update { + FriendshipRequestResponse request = 1; + AcceptResponse accept = 2; + RejectResponse reject = 3; + DeleteResponse delete = 4; + CancelResponse cancel = 5; + } +} + +message GetFriendshipStatusPayload { + User user = 1; +} + +enum FriendshipStatus { + REQUEST_SENT = 0; + REQUEST_RECEIVED = 1; + CANCELED = 2; + ACCEPTED = 3; + REJECTED = 4; + DELETED = 5; + BLOCKED = 6; +} + +message GetFriendshipStatusResponse { + message Ok { + FriendshipStatus status = 1; + optional string message = 2; + } + oneof response { + Ok accepted = 1; + InternalServerError internal_server_error = 2; + } +} + +service SocialService { + // Get the list of friends for the authenticated user + rpc GetFriends(GetFriendsPayload) returns (PaginatedUsersResponse) {} + + // Get the list of mutual friends between the authenticated user and the one in the parameter + rpc GetMutualFriends(GetMutualFriendsPayload) returns (PaginatedUsersResponse) {} + + // Get the pending friendship requests for the authenticated user + rpc GetPendingFriendshipRequests(GetFriendshipRequestsPayload) returns (PaginatedFriendshipRequestsResponse) {} + + // Get the sent friendship requests for the authenticated user + rpc GetSentFriendshipRequests(GetFriendshipRequestsPayload) returns (PaginatedFriendshipRequestsResponse) {} + + // Create or update friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc UpsertFriendship(UpsertFriendshipPayload) + returns (UpsertFriendshipResponse) {} + + // Subscribe to updates of friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc SubscribeToFriendshipUpdates(google.protobuf.Empty) + returns (stream FriendshipUpdate) {} + + rpc GetFriendshipStatus(GetFriendshipStatusPayload) returns (GetFriendshipStatusResponse) {} +} diff --git a/proto/decentraland/social_service_v2/social_service.proto b/proto/decentraland/social_service_v2/social_service.proto index 4c0a575e..d5802e49 100644 --- a/proto/decentraland/social_service_v2/social_service.proto +++ b/proto/decentraland/social_service_v2/social_service.proto @@ -88,6 +88,7 @@ message FriendshipUpdate { } } +// @deprecated service SocialService { // Get the list of friends for the authenticated user rpc GetFriends(google.protobuf.Empty) returns (stream UsersResponse) {} diff --git a/public/social_service.proto b/public/social_service.proto new file mode 100644 index 00000000..4d1ecbb0 --- /dev/null +++ b/public/social_service.proto @@ -0,0 +1,4 @@ +syntax = "proto3"; +package decentraland.social; + +import public "decentraland/social_service/v3/social_service.proto";