Skip to content

Commit

Permalink
with rooms
Browse files Browse the repository at this point in the history
  • Loading branch information
jhnnsrs committed Jun 28, 2024
1 parent 32ddf3f commit 5e978c6
Show file tree
Hide file tree
Showing 21 changed files with 621 additions and 390 deletions.
76 changes: 76 additions & 0 deletions kammer/graphql/mutations/create_room.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import hashlib
import json
import logging
from typing import Any, Dict, List, Tuple

import strawberry
import strawberry_django
from ekke.types import Info
from komment import enums, inputs, models, scalars, types

logger = logging.getLogger(__name__)
from django.contrib.auth import get_user_model
from komment import inputs


@strawberry.input
class CreateRoomInput:
description: str | None
title: str | None


def create_comment(info: Info, input: CreateRoomInput) -> types.Comment:
creator = info.context.request.user

serialized_descendants = strawberry.asdict(input)["descendants"]

dicted_variables, mentions = recurse_parse_decendents(serialized_descendants)

# TODO: Check if user is allowed to comment on these types of objects

exp = models.Comment.objects.create(
identifier=input.identifier,
object=input.object,
user=creator,
text="",
descendants=serialized_descendants,
parent_id=input.parent,
)

users = [get_user_model().objects.get(id=m["user"]) for m in mentions]
if input.notify:
for user in users:
user.notify(
f"You have been mentioned in a comment by {creator.username}",
f"Comment on {input.identifier}",
)

print(users)
exp.mentions.set(users)
exp.save()

return exp

trace = models.User(name=input.user)
return trace


@strawberry.input
class ReplyToCommentInput:
descendants: list[inputs.DescendantInput]
parent: strawberry.ID | None
notify: bool | None


def reply_to(info: Info, input: ReplyToCommentInput) -> types.Comment:
raise NotImplementedError("TODO: Implement")


@strawberry.input
class ResolveCommentInput:
id: strawberry.ID
notify: bool | None


def resolve_comment(info: Info, input: ResolveCommentInput) -> types.Comment:
raise NotImplementedError("TODO: Implement")
2 changes: 1 addition & 1 deletion kammer/graphql/queries/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
from .comment import *
from .room import *
21 changes: 0 additions & 21 deletions kammer/graphql/queries/comment.py

This file was deleted.

11 changes: 11 additions & 0 deletions kammer/graphql/queries/room.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import hashlib
import json
import logging

import strawberry
from ekke.types import Info
from kammer import enums, inputs, models, scalars, types


def room(info: Info, id: strawberry.ID) -> types.Room:
return models.Room.objects.get(id=id)
167 changes: 144 additions & 23 deletions kammer/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Generated by Django 4.2.4 on 2023-09-05 16:53
# Generated by Django 4.2.5 on 2024-06-27 13:55

from django.conf import settings
from django.db import migrations, models
Expand All @@ -10,11 +10,12 @@ class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("fakts", "0008_alter_redeemtoken_client"),
]

operations = [
migrations.CreateModel(
name="Comment",
name="Agent",
fields=[
(
"id",
Expand All @@ -25,48 +26,168 @@ class Migration(migrations.Migration):
verbose_name="ID",
),
),
("identifier", models.CharField(max_length=1000)),
("object", models.PositiveIntegerField()),
("text", models.TextField()),
("created_at", models.DateTimeField(auto_now_add=True)),
("descendents", models.JSONField(default=list)),
("resolved", models.DateTimeField(blank=True, null=True)),
("name", models.CharField(max_length=10000, null=True)),
(
"mentions",
"app",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="fakts.app"
),
),
],
),
migrations.CreateModel(
name="Structure",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"identifier",
models.CharField(
help_text="The identifier of the object. Consult the documentation for the format",
max_length=1000,
),
),
(
"object",
models.PositiveIntegerField(
help_text="The object id of the object, on its associated service"
),
),
],
),
migrations.CreateModel(
name="Room",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"title",
models.CharField(
help_text="The Title of the Room", max_length=1000
),
),
("description", models.CharField(max_length=10000, null=True)),
(
"creator",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
(
"pinned_by",
models.ManyToManyField(
blank=True,
related_name="mentioned_in",
help_text="The users that have pinned the workspace",
related_name="pinned_rooms",
to=settings.AUTH_USER_MODEL,
),
),
],
),
migrations.CreateModel(
name="Message",
fields=[
(
"parent",
models.ForeignKey(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("is_streaming", models.BooleanField(default=False)),
(
"text",
models.TextField(
help_text="A clear text representation of the rich comment"
),
),
(
"created_at",
models.DateTimeField(
auto_now_add=True, help_text="The time this comment got created"
),
),
(
"descendants",
models.JSONField(
default=list,
help_text="The immediate descendends of the comments. Think typed Rich Representation",
),
),
(
"adresses",
models.ManyToManyField(
blank=True,
null=True,
help_text="The users that got mentioned in this comment",
related_name="addressed_in",
to=settings.AUTH_USER_MODEL,
),
),
(
"agent",
models.ForeignKey(
help_text="The user that created this comment",
on_delete=django.db.models.deletion.CASCADE,
related_name="children",
to="komment.comment",
related_name="sent_message",
to="kammer.agent",
),
),
("attached_structures", models.ManyToManyField(to="kammer.structure")),
(
"resolved_by",
"is_reply_to",
models.ForeignKey(
blank=True,
help_text="Is This a reply to a certain comment",
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="resolved_comments",
to=settings.AUTH_USER_MODEL,
related_name="replies",
to="kammer.message",
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="comments",
to=settings.AUTH_USER_MODEL,
"targets",
models.ManyToManyField(
help_text="The agents this message targets",
related_name="received_messages",
to="kammer.agent",
),
),
],
),
migrations.AddField(
model_name="agent",
name="room",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="kammer.room"
),
),
migrations.AddField(
model_name="agent",
name="user",
field=models.ForeignKey(
help_text="The user that created this comment",
on_delete=django.db.models.deletion.CASCADE,
related_name="agents",
to=settings.AUTH_USER_MODEL,
),
),
]
17 changes: 0 additions & 17 deletions kammer/migrations/0002_rename_descendents_comment_descendants.py

This file was deleted.

Loading

0 comments on commit 5e978c6

Please sign in to comment.