From 727addb656df137e8d0873eab133a334f03e8661 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Fri, 5 Nov 2021 22:21:28 +0100
Subject: [PATCH] Create models for profiles, rooms and spaces

---
 aleksis/apps/matrix/model_extensions.py |  9 -----
 aleksis/apps/matrix/models.py           | 52 +++++++++++++++++++++++++
 2 files changed, 52 insertions(+), 9 deletions(-)
 delete mode 100644 aleksis/apps/matrix/model_extensions.py
 create mode 100644 aleksis/apps/matrix/models.py

diff --git a/aleksis/apps/matrix/model_extensions.py b/aleksis/apps/matrix/model_extensions.py
deleted file mode 100644
index 7075310..0000000
--- a/aleksis/apps/matrix/model_extensions.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.utils.translation import gettext_lazy as _
-
-from jsonstore import CharField
-
-from aleksis.core.models import Group, Person
-
-
-Person.field(matrix_id=CharField(verbose_name=_("Matrix ID")))
-Group.field(matrix_room_id=CharField(verbose_name=_("Matrix room ID")))
diff --git a/aleksis/apps/matrix/models.py b/aleksis/apps/matrix/models.py
new file mode 100644
index 0000000..3b3dd68
--- /dev/null
+++ b/aleksis/apps/matrix/models.py
@@ -0,0 +1,52 @@
+from django.db import models
+from django.utils.translation import gettext_lazy as _
+
+from aleksis.core.mixins import ExtensibleModel, ExtensiblePolymorphicModel
+from aleksis.core.models import Group, Person
+
+
+class MatrixProfile(ExtensibleModel):
+    """Model for a Matrix profile."""
+
+    matrix_id = models.CharField(verbose_name=_("Matrix ID"), unique=True)
+    person = models.OneToOneField(
+        Person,
+        on_delete=models.CASCADE,
+        verbose_name=_("Person"),
+        null=True,
+        blank=True,
+        related_name="matrix_profile",
+    )
+
+    class Meta:
+        verbose_name = _("Matrix profile")
+        verbose_name_plural = _("Matrix profiles")
+
+
+class MatrixRoom(ExtensiblePolymorphicModel):
+    """Model for a Matrix room."""
+
+    room_id = models.CharField(verbose_name=_("Room ID"), unique=True)
+    alias = models.CharField(verbose_name=_("Alias"), unique=True, blank=True, null=True)
+    group = models.ForeignKey(
+        Group,
+        on_delete=models.CASCADE,
+        verbose_name=_("Group"),
+        null=True,
+        blank=True,
+        related_name="matrix_spaces",
+    )
+
+    class Meta:
+        verbose_name = _("Matrix room")
+        verbose_name_plural = _("Matrix rooms")
+
+
+class MatrixSpace(MatrixRoom):
+    children = models.ManyToManyField(
+        to=MatrixRoom, verbose_name=_("Child rooms/spaces"), blank=True, related_name="parents"
+    )
+
+    class Meta:
+        verbose_name = _("Matrix space")
+        verbose_name_plural = _("Matrix spaces")
-- 
GitLab