From ab77ca536c6c77bb915c9322f54a76b78e883244 Mon Sep 17 00:00:00 2001
From: Pavel Antonov <antonov@perx.ru>
Date: Fri, 15 Nov 2024 11:53:04 +0400
Subject: [PATCH] Events (WIP)

---
 proto/events/event.proto | 158 +++++++++++++++++++++++++++++++++------
 1 file changed, 135 insertions(+), 23 deletions(-)

diff --git a/proto/events/event.proto b/proto/events/event.proto
index 98d2c39..98fbc88 100644
--- a/proto/events/event.proto
+++ b/proto/events/event.proto
@@ -5,6 +5,8 @@ package events;
 option go_package = "git.perx.ru/perxis/perxis-go/proto/events";
 
 import "google/protobuf/struct.proto";
+import "google/protobuf/any.proto";
+import "google/protobuf/api.proto";
 import "google/protobuf/timestamp.proto";
 import "spaces/spaces.proto";
 import "users/users.proto";
@@ -20,37 +22,147 @@ import "extensions/extension.proto";
 import "items/items.proto";
 import "members/members.proto";
 
-message EventMetadata {
-
-}
-
 // Event описывает все события передаваемые в системе
 message Event {
-
   // Идентификатор события
   string id = 1;
 
   // Время наступления события
   google.protobuf.Timestamp time = 2;
 
+  // Сервис, инициировавший событие
+  string service = 3;
+
+  // Имя события
+  string name = 4;
+
+  // Тема события
+  string subject = 5;
+
   // Идентификатор инициатора события
-  string principal = 5;
-
-  EventMetadata metadata = 10;
-
-  oneof event {
-    account.organizations.OrganizationEvent organization = 200;
-    account.users.UserEvent user = 250;
-    account.members.MemberEvent member = 275;
-    content.spaces.SpaceEvent space = 300;
-    content.environments.EnvironmentEvent environment = 400;
-    content.collections.CollectionEvent collection = 450;
-    content.items.ItemEvent item = 500;
-    content.roles.RoleEvent role = 550;
-    content.clients.ClientEvent client = 600;
-    content.locales.LocaleEvent locale = 700;
-    content.collaborators.CollaboratorEvent collaborator = 800;
-    files.FileEvent file = 900;
-    extensions.ExtensionEvent extension = 1000;
+  string principal = 6;
+
+  // Теги события
+  repeated string tags = 7;
+
+  // Идентификатор трассировки
+  string traceId = 8;
+
+  // Cодержимое события
+  Message message = 10;
+
+  // Метаданные события
+  Metadata metadata = 100;
+}
+
+message Metadata {}
+
+message Message {
+  oneof value {
+    Account.Organizations.Create org_create = 100;
+    Account.Organizations.Update org_update = 101;
+    Account.Organizations.Delete org_delete = 102;
+
+    Account.Users.Create user_create = 200;
+    Account.Users.Update user_update = 201;
+    Account.Users.Delete user_delete = 202;
+
+    Account.Members.Set member_set = 300;
+    Account.Members.Remove member_remove = 301;
+
+    Content.Spaces.Create space_create = 400;
+    Content.Spaces.Update space_update = 401;
+    Content.Spaces.Delete space_delete = 402;
+    Content.Spaces.Move space_move = 403;
+    Content.Spaces.StateChange space_state_change = 404;
+
+    //      account.organizations.OrganizationEvent organization = 200;
+    //      account.users.UserEvent user = 250;
+//          account.members.MemberEvent member = 275;
+//          content.spaces.SpaceEvent space = 300;
+//          content.environments.EnvironmentEvent environment = 400;
+//          content.collections.CollectionEvent collection = 450;
+//          content.items.ItemEvent item = 500;
+//          content.roles.RoleEvent role = 550;
+//          content.clients.ClientEvent client = 600;
+//          content.locales.LocaleEvent locale = 700;
+//          content.collaborators.CollaboratorEvent collaborator = 800;
+//          files.FileEvent file = 900;
+//          extensions.ExtensionEvent extension = 1000;
   }
+}
+
+message Account {
+  message Organizations {
+    message Create {
+      string org_id = 1;
+    }
+
+    message Update {
+      string org_id = 1;
+    }
+    message Delete {
+      string org_id = 1;
+    }
+  }
+
+  message Users {
+    message Create {
+      string user_id = 1;
+    }
+    message Update {
+      string user_id = 1;
+    }
+    message Delete {
+      string user_id = 1;
+    }
+  }
+
+  message Members {
+    message Set{}
+    message Remove {}
+
+    string org_id = 1;
+    string user_id = 2;
+    string role_id = 3;
+
+    oneof value {
+      Set set = 100;
+      Remove remove = 101;
+    }
+  }
+}
+
+message Content {
+
+  message Spaces {
+    message Create {
+      string space_id = 1;
+      string org_id = 2;
+    }
+
+    message Update {
+      string space_id = 1;
+      string org_id = 2;
+    }
+
+    message Delete {
+      string space_id = 1;
+      string org_id = 2;
+    }
+
+    message Move {
+      string space_id = 1;
+      string org_id = 2;
+      string prev_org_id = 3;
+    }
+
+    message StateChange {
+      string space_id = 1;
+      string org_id = 2;
+      content.spaces.StateInfo state = 3;
+      content.spaces.StateInfo prev = 4;
+    }
+  }
+
 }
\ No newline at end of file
-- 
GitLab