diff --git a/backend/:database.db/000012.log b/backend/:database.db/000012.log deleted file mode 100644 index 3b27be6..0000000 Binary files a/backend/:database.db/000012.log and /dev/null differ diff --git a/backend/:database.db/000016.sst b/backend/:database.db/000016.sst deleted file mode 100644 index 63f0015..0000000 Binary files a/backend/:database.db/000016.sst and /dev/null differ diff --git a/backend/:database.db/000036.sst b/backend/:database.db/000036.sst new file mode 100644 index 0000000..b89b49f Binary files /dev/null and b/backend/:database.db/000036.sst differ diff --git a/backend/:database.db/000039.log b/backend/:database.db/000039.log new file mode 100644 index 0000000..9101dc5 Binary files /dev/null and b/backend/:database.db/000039.log differ diff --git a/backend/:database.db/CURRENT b/backend/:database.db/CURRENT index 625d147..e2c0c4b 100644 --- a/backend/:database.db/CURRENT +++ b/backend/:database.db/CURRENT @@ -1 +1 @@ -MANIFEST-000013 +MANIFEST-000040 diff --git a/backend/:database.db/LOG.old.1733153202364941 b/backend/:database.db/LOG.old.1733153202364941 new file mode 100644 index 0000000..e69de29 diff --git a/backend/:database.db/LOG.old.1733153214576839 b/backend/:database.db/LOG.old.1733153214576839 new file mode 100644 index 0000000..e69de29 diff --git a/backend/:database.db/LOG.old.1733153244020989 b/backend/:database.db/LOG.old.1733153244020989 new file mode 100644 index 0000000..e69de29 diff --git a/backend/:database.db/MANIFEST-000013 b/backend/:database.db/MANIFEST-000013 deleted file mode 100644 index 419544e..0000000 Binary files a/backend/:database.db/MANIFEST-000013 and /dev/null differ diff --git a/backend/:database.db/MANIFEST-000040 b/backend/:database.db/MANIFEST-000040 new file mode 100644 index 0000000..eced684 Binary files /dev/null and b/backend/:database.db/MANIFEST-000040 differ diff --git a/backend/:database.db/OPTIONS-000007 b/backend/:database.db/OPTIONS-000033 similarity index 100% rename from backend/:database.db/OPTIONS-000007 rename to backend/:database.db/OPTIONS-000033 diff --git a/backend/:database.db/OPTIONS-000015 b/backend/:database.db/OPTIONS-000042 similarity index 100% rename from backend/:database.db/OPTIONS-000015 rename to backend/:database.db/OPTIONS-000042 diff --git a/backend/sql/functions/auth.surql b/backend/sql/functions/auth.surql new file mode 100644 index 0000000..4ccfa7e --- /dev/null +++ b/backend/sql/functions/auth.surql @@ -0,0 +1,12 @@ +DEFINE FUNCTION auth::sessiontoken::new($user: uuid) { + LET $token = rand::string(64); + + CREATE SessionToken CONTENT { + id: rand::uuid::v4(), + created: time::now(), + expires: time::now() + 7d, + token: $token, + user: Entity:user, + }; +} + diff --git a/backend/sql/functions/channel.surql b/backend/sql/functions/channel.surql new file mode 100644 index 0000000..e69de29 diff --git a/backend/sql/functions/friend.surql b/backend/sql/functions/friend.surql index a102d66..21832cb 100644 --- a/backend/sql/functions/friend.surql +++ b/backend/sql/functions/friend.surql @@ -1,26 +1,28 @@ DEFINE FUNCTION friend::request($from: uuid, $to: uuid) { - CREATE FriendRequest SET - in = Entity:from, - out = Entity:to, - created = time::now(), + RELATE Entity:from -> FriendRequest -> Entity:to + content { + created = time::now() + }; } -DEFINE FUNCTION friend::accept($request: record) { +DEFINE FUNCTION friend::accept($from: uuid, $to: uuid) { - LET $fsid = uuid::new(); + -- check if there is a friend request - CREATE Friendship SET - dm_channel = channel::new(), - id = $fsid, - since = time::now(), + IF !HasFriendRequest WHERE out = Entity:from AND in = Entity:to { + RETURN; + } - CREATE HasFriendShip SET - in = Entity:request.in, - out = Friendship:fsid, - nickname = Entity:request.out.displayname, + LET $fsid: uuid = rand::uuid::v4(); + CREATE Friendship SET id = $fsid, channel_id = fn::channel::new(), since = time::now(); + RELATE Entity:from -> HasFriendship -> Friendship:fsid CONTENT { nickname = Entity:from.displayname }; + RELATE Entity:to -> HasFriendship -> Friendship:fsid CONTENT { nickname = Entity:to.displayname }; +} - CREATE HasFriendShip SET - in = Entity:request.out, - out = Friendship:fsid, - nickname = Entity:request.in.displayname, +DEFINE FUNCTION friend::reject($from: uuid, $to: uuid) { + DELETE Entity:from -> FriendRequest WHERE out = Entity:to +} + +DEFINE FUNCTION friend::remove($from: uuid, $to: uuid) { + DELETE Entity:from -> HasFriendship -> Friendship WHERE <- HasFriendship.out <- Entity:to } \ No newline at end of file diff --git a/backend/sql/functions/icon.surql b/backend/sql/functions/icon.surql new file mode 100644 index 0000000..ac2298c --- /dev/null +++ b/backend/sql/functions/icon.surql @@ -0,0 +1,4 @@ +DEFINE FUNCTION icon::default() { + RETURN "/static/public/server_default.png"; +} + diff --git a/backend/sql/functions/server.surql b/backend/sql/functions/server.surql index e72478b..68b6e63 100644 --- a/backend/sql/functions/server.surql +++ b/backend/sql/functions/server.surql @@ -1,11 +1,26 @@ -DEFINE FUNCTION server::join($server_id: uuid, $entity_id: uuid) { +DEFINE FUNCTION server::join($server: uuid, $entity: uuid) { + LET $user = (SELECT displayname FROM Entity WHERE id = $entity); + RELATE Entity:entity -> HasServer -> Server:server CONTENT { + joined: time::now(), + nickname: $user.displayname + }; +} - LET $user = (SELECT displayname FROM Entity WHERE id = $entity_id)[0]; +DEFINE FUNCTION server::leave($server: uuid, $entity: uuid) { + DELETE HasServer WHERE out = Server:server AND in = Entity:entity; + DELETE HasRole WHERE in = Entity:entity AND ->Role.server = Server:server; +} - CREATE HasServer SET - in = Entity:entity_id, - out = Server:server_id, - nickname = $user.displayname, - permissions = [], - joined = time::now(), +DEFINE FUNCTION server::new($name: string, $creator: uuid) { + LET $id = rand::uuid::v4(); + + CREATE Server CONTENT { + created: time::now(), + name: $name, + owner: $creator, + id: $id, + icon_uri: fn::icon::default(), + }; + + fn::server::join($id, $creator) } \ No newline at end of file