From 6e79da0b0c4aeee14da50c0ad5d0500b4a58eebb Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 9 Jul 2021 07:09:33 +0000 Subject: [PATCH] The uri-id is now in all contact tables --- database.sql | 8 +++++- doc/database/db_apcontact.md | 3 +++ doc/database/db_fcontact.md | 46 ++++++++++++++++++++--------------- src/Model/APContact.php | 6 +++++ src/Model/Contact.php | 8 ++---- src/Model/FContact.php | 1 + static/dbstructure.config.php | 6 ++++- 7 files changed, 51 insertions(+), 27 deletions(-) diff --git a/database.sql b/database.sql index ca248875b..5ee4ef053 100644 --- a/database.sql +++ b/database.sql @@ -335,6 +335,7 @@ CREATE TABLE IF NOT EXISTS `addon` ( -- CREATE TABLE IF NOT EXISTS `apcontact` ( `url` varbinary(255) NOT NULL COMMENT 'URL of the contact', + `uri-id` int unsigned COMMENT 'Id of the item-uri table entry that contains the apcontact url', `uuid` varchar(255) COMMENT '', `type` varchar(20) NOT NULL COMMENT '', `following` varchar(255) COMMENT '', @@ -367,6 +368,8 @@ CREATE TABLE IF NOT EXISTS `apcontact` ( INDEX `baseurl` (`baseurl`(190)), INDEX `sharedinbox` (`sharedinbox`(190)), INDEX `gsid` (`gsid`), + UNIQUE INDEX `uri-id` (`uri-id`), + FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE, FOREIGN KEY (`gsid`) REFERENCES `gserver` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='ActivityPub compatible contacts - used in the ActivityPub implementation'; @@ -598,6 +601,7 @@ CREATE TABLE IF NOT EXISTS `fcontact` ( `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID', `guid` varchar(255) NOT NULL DEFAULT '' COMMENT 'unique id', `url` varchar(255) NOT NULL DEFAULT '' COMMENT '', + `uri-id` int unsigned COMMENT 'Id of the item-uri table entry that contains the fcontact url', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `photo` varchar(255) NOT NULL DEFAULT '' COMMENT '', `request` varchar(255) NOT NULL DEFAULT '' COMMENT '', @@ -614,7 +618,9 @@ CREATE TABLE IF NOT EXISTS `fcontact` ( `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', PRIMARY KEY(`id`), INDEX `addr` (`addr`(32)), - UNIQUE INDEX `url` (`url`(190)) + UNIQUE INDEX `url` (`url`(190)), + UNIQUE INDEX `uri-id` (`uri-id`), + FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Diaspora compatible contacts - used in the Diaspora implementation'; -- diff --git a/doc/database/db_apcontact.md b/doc/database/db_apcontact.md index ede71d1d0..5abf60f10 100644 --- a/doc/database/db_apcontact.md +++ b/doc/database/db_apcontact.md @@ -9,6 +9,7 @@ Fields | Field | Description | Type | Null | Key | Default | Extra | | ---------------- | ------------------------------------------------------------------- | -------------- | ---- | --- | ------------------- | ----- | | url | URL of the contact | varbinary(255) | NO | PRI | NULL | | +| uri-id | Id of the item-uri table entry that contains the apcontact url | int unsigned | YES | | NULL | | | uuid | | varchar(255) | YES | | NULL | | | type | | varchar(20) | NO | | NULL | | | following | | varchar(255) | YES | | NULL | | @@ -47,12 +48,14 @@ Indexes | baseurl | baseurl(190) | | sharedinbox | sharedinbox(190) | | gsid | gsid | +| uri-id | UNIQUE, uri-id | Foreign Keys ------------ | Field | Target Table | Target Field | |-------|--------------|--------------| +| uri-id | [item-uri](help/database/db_item-uri) | id | | gsid | [gserver](help/database/db_gserver) | id | Return to [database documentation](help/database) diff --git a/doc/database/db_fcontact.md b/doc/database/db_fcontact.md index 43a073f61..51cfac764 100644 --- a/doc/database/db_fcontact.md +++ b/doc/database/db_fcontact.md @@ -6,25 +6,26 @@ Diaspora compatible contacts - used in the Diaspora implementation Fields ------ -| Field | Description | Type | Null | Key | Default | Extra | -| -------- | ------------- | ---------------- | ---- | --- | ------------------- | -------------- | -| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment | -| guid | unique id | varchar(255) | NO | | | | -| url | | varchar(255) | NO | | | | -| name | | varchar(255) | NO | | | | -| photo | | varchar(255) | NO | | | | -| request | | varchar(255) | NO | | | | -| nick | | varchar(255) | NO | | | | -| addr | | varchar(255) | NO | | | | -| batch | | varchar(255) | NO | | | | -| notify | | varchar(255) | NO | | | | -| poll | | varchar(255) | NO | | | | -| confirm | | varchar(255) | NO | | | | -| priority | | tinyint unsigned | NO | | 0 | | -| network | | char(4) | NO | | | | -| alias | | varchar(255) | NO | | | | -| pubkey | | text | YES | | NULL | | -| updated | | datetime | NO | | 0001-01-01 00:00:00 | | +| Field | Description | Type | Null | Key | Default | Extra | +| -------- | ------------------------------------------------------------- | ---------------- | ---- | --- | ------------------- | -------------- | +| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment | +| guid | unique id | varchar(255) | NO | | | | +| url | | varchar(255) | NO | | | | +| uri-id | Id of the item-uri table entry that contains the fcontact url | int unsigned | YES | | NULL | | +| name | | varchar(255) | NO | | | | +| photo | | varchar(255) | NO | | | | +| request | | varchar(255) | NO | | | | +| nick | | varchar(255) | NO | | | | +| addr | | varchar(255) | NO | | | | +| batch | | varchar(255) | NO | | | | +| notify | | varchar(255) | NO | | | | +| poll | | varchar(255) | NO | | | | +| confirm | | varchar(255) | NO | | | | +| priority | | tinyint unsigned | NO | | 0 | | +| network | | char(4) | NO | | | | +| alias | | varchar(255) | NO | | | | +| pubkey | | text | YES | | NULL | | +| updated | | datetime | NO | | 0001-01-01 00:00:00 | | Indexes ------------ @@ -34,6 +35,13 @@ Indexes | PRIMARY | id | | addr | addr(32) | | url | UNIQUE, url(190) | +| uri-id | UNIQUE, uri-id | +Foreign Keys +------------ + +| Field | Target Table | Target Field | +|-------|--------------|--------------| +| uri-id | [item-uri](help/database/db_item-uri) | id | Return to [database documentation](help/database) diff --git a/src/Model/APContact.php b/src/Model/APContact.php index fd9026def..5c60ebae5 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -349,6 +349,12 @@ class APContact $apcontact['alias'] = null; } + if (empty($apcontact['uuid'])) { + $apcontact['uri-id'] = ItemURI::getIdByURI($apcontact['url']); + } else { + $apcontact['uri-id'] = ItemURI::insert(['uri' => $apcontact['uri'], 'guid' => $apcontact['uuid']]); + } + $apcontact['updated'] = DateTimeFormat::utcNow(); // We delete the old entry when the URL is changed diff --git a/src/Model/Contact.php b/src/Model/Contact.php index ecebe79b9..30158c5b4 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -185,11 +185,7 @@ class Contact $fields['gsid'] = GServer::getID($fields['baseurl'], true); } - if (!empty($fields['url']) && !empty($fields['guid'])) { - $fields['uri-id'] = ItemURI::insert(['uri' => $fields['url'], 'guid' => $fields['guid']]); - } elseif (!empty($fields['url'])) { - $fields['uri-id'] = ItemURI::getIdByURI($fields['url']); - } + $fields['uri-id'] = ItemURI::getIdByURI($fields['url']); if (empty($fields['created'])) { $fields['created'] = DateTimeFormat::utcNow(); @@ -2161,7 +2157,7 @@ class Contact if (empty($guid)) { $ret['uri-id'] = ItemURI::getIdByURI($ret['url']); } else { - $ret['uri-id'] = ItemURI::insert(['uri' => $ret['uri'], 'guid' => $guid]); + $ret['uri-id'] = ItemURI::insert(['uri' => $ret['uri'], 'guid' => $guid]); } $ret['nurl'] = Strings::normaliseLink($ret['url']); diff --git a/src/Model/FContact.php b/src/Model/FContact.php index cf75a03db..24421b8c0 100644 --- a/src/Model/FContact.php +++ b/src/Model/FContact.php @@ -100,6 +100,7 @@ class FContact 'batch' => $arr["batch"], 'notify' => $arr["notify"], 'poll' => $arr["poll"], 'confirm' => $arr["confirm"], 'alias' => $arr["alias"], 'pubkey' => $arr["pubkey"], + 'uri-id' => ItemURI::insert(['uri' => $arr['url'], 'guid' => $arr['guid']]), 'updated' => DateTimeFormat::utcNow()]; $condition = ['url' => $arr["url"], 'network' => $arr["network"]]; diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index f15bc7075..e47f0d5dc 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -395,6 +395,7 @@ return [ "comment" => "ActivityPub compatible contacts - used in the ActivityPub implementation", "fields" => [ "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "URL of the contact"], + "uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the apcontact url"], "uuid" => ["type" => "varchar(255)", "comment" => ""], "type" => ["type" => "varchar(20)", "not null" => "1", "comment" => ""], "following" => ["type" => "varchar(255)", "comment" => ""], @@ -428,7 +429,8 @@ return [ "followers" => ["followers(190)"], "baseurl" => ["baseurl(190)"], "sharedinbox" => ["sharedinbox(190)"], - "gsid" => ["gsid"] + "gsid" => ["gsid"], + "uri-id" => ["UNIQUE", "uri-id"], ] ], "application" => [ @@ -660,6 +662,7 @@ return [ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"], "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "unique id"], "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], + "uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the fcontact url"], "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "request" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], @@ -679,6 +682,7 @@ return [ "PRIMARY" => ["id"], "addr" => ["addr(32)"], "url" => ["UNIQUE", "url(190)"], + "uri-id" => ["UNIQUE", "uri-id"], ] ], "fsuggest" => [