diff --git a/proto/decentraland/social/friendships_v2/friendships_v2.proto b/proto/decentraland/social/friendships_v2/friendships_v2.proto new file mode 100644 index 00000000..b32d83c3 --- /dev/null +++ b/proto/decentraland/social/friendships_v2/friendships_v2.proto @@ -0,0 +1,203 @@ +syntax = "proto3"; +package decentraland.social.friendships_v2; + +// *** +// Domain messages +// *** + +message Position { + optional string realm = 1; + optional string x = 2; + optional string y = 3; +} +message Positions { + repeated Position positions = 1; +} + +message User { string address = 1; } +message Users { repeated User users = 1; } + +message RejectResponse { User user = 1; } +message DeleteResponse { User user = 1; } +message AcceptResponse { User user = 1; } +message CancelResponse { User user = 1; } + +message RequestResponse { + User user = 1; + int64 created_at = 2; + 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 +} + +// *** +// Payload +// *** + +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; } + +message FriendshipEventPayload { + oneof body { + RequestPayload request = 1; + AcceptPayload accept = 2; + RejectPayload reject = 4; + DeletePayload delete = 5; + CancelPayload cancel = 6; + } +} + +message UpdateFriendshipPayload { + FriendshipEventPayload event = 1; +} + +message MutualFriendsPayload { + User user = 1; +} + +message PositionPayload { + optional Position position = 1; +} + +// *** +// Response +// *** + +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; +} + +// 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 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 PositionResponse { + oneof response { + Position position = 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 SubscribeFriendshipPresenceUpdatesResponse { + oneof response { + Positions updates = 1; + InternalServerError internal_server_error = 2; + UnauthorizedError unauthorized_error = 3; + ForbiddenError forbidden_error = 4; + TooManyRequestsError too_many_requests_error = 5; + } +} + +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; + } +} + +message Empty {} + +service FriendshipsServiceV2 { + + // Message to set your position + rpc PositionHeartbeat(PositionPayload) returns (PositionResponse) {} + + // Get the list of friends for the authenticated user + rpc GetFriends(Empty) returns (stream UsersResponse) {} + + // Get the list of online presence friends for the authenticated user + rpc GetOnlineFriends(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 list of request events for the authenticated user + rpc GetRequestEvents(Empty) 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(Empty) + returns (stream SubscribeFriendshipEventsUpdatesResponse) {} + + // Subscribe to presence status updates of friends + rpc SubscribeFriendshipPresenceUpdates(Empty) + returns (stream SubscribeFriendshipPresenceUpdatesResponse) {} +}