fix(scheduled): Remove roomId and parentId from response and make id a string

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2025-12-05 15:24:46 +01:00 committed by Anna Larch
parent 92a9e51991
commit 494ce57ce5
4 changed files with 53 additions and 87 deletions

View file

@ -37,7 +37,6 @@ use OCP\DB\Types;
* @method \DateTime|null getSendAt()
*
* @psalm-import-type TalkScheduledMessage from ResponseDefinitions
* @psalm-import-type TalkScheduledMessageMetaData from ResponseDefinitions
*/
class ScheduledMessage extends Entity implements \JsonSerializable {
public const METADATA_THREAD_TITLE = 'threadTitle';
@ -70,13 +69,16 @@ class ScheduledMessage extends Entity implements \JsonSerializable {
}
/**
* @return TalkScheduledMessageMetaData
* @return array{silent: bool, threadId: int, threadTitle?: string, lastEditedTime?: int}
*/
public function getDecodedMetaData(): array {
return json_decode($this->metaData, true, 512, JSON_THROW_ON_ERROR);
}
public function setMetaData(?array $metaData): void {
/**
* @param array{silent: bool, threadId: int, threadTitle?: string, lastEditedTime?: int} $metaData
*/
public function setMetaData(array $metaData): void {
$this->metaData = json_encode($metaData, JSON_THROW_ON_ERROR);
$this->markFieldUpdated('metaData');
}
@ -110,36 +112,33 @@ class ScheduledMessage extends Entity implements \JsonSerializable {
}
/**
* @param string $format
* @psalm-param 'json'|'xml' $format
* @return TalkScheduledMessage
*/
public function toArray(?Message $parent, ?Thread $thread) : array {
public function toArray(string $format, ?Message $parent, ?Thread $thread) : array {
$metaData = $this->getDecodedMetaData();
$data = [
'id' => $this->id,
'roomId' => $this->getRoomId(),
'id' => (string)$this->id,
'actorId' => $this->getActorId(),
'actorType' => $this->getActorType(),
'threadId' => $this->getThreadId(),
'parentId' => $this->getParentId(),
'message' => $this->getMessage(),
'messageType' => $this->getMessageType(),
'createdAt' => $this->getCreatedAt()->getTimestamp(),
'sendAt' => $this->getSendAt()?->getTimestamp(),
'sendAt' => $this->getSendAt()?->getTimestamp() ?? 0,
'silent' => $metaData['silent'] ?? false,
];
if ($parent !== null) {
$data['parent'] = $parent->toArray('json', $thread);
}
$metaData = $this->getDecodedMetaData();
if ($thread !== null) {
$data['threadExists'] = true;
$data['threadTitle'] = $thread->getName();
$metaData[self::METADATA_THREAD_TITLE] = $thread->getName();
} elseif (isset($metaData[self::METADATA_THREAD_TITLE]) && $this->getThreadId() === Thread::THREAD_CREATE) {
$data['threadExists'] = false;
$data['threadTitle'] = (string)$metaData[self::METADATA_THREAD_TITLE];
}
$data['metaData'] = $metaData;
return $data;
}
}

View file

@ -566,28 +566,19 @@ namespace OCA\Talk;
* },
* }
*
* @psalm-type TalkScheduledMessageMetaData = array{
* threadId: int,
* threadTitle: string,
* silent: bool,
* lastEditedTime?: int,
* }
*
* @psalm-type TalkScheduledMessage = array{
* id: int,
* roomId: int,
* actorId: string,
* actorType: string,
* threadId: int,
* threadExists?: boolean,
* threadTitle?: string,
* parentId: ?int,
* parent?: TalkChatMessage,
* message: string,
* messageType: string,
* createdAt: int,
* sendAt: ?int,
* metaData: TalkScheduledMessageMetaData,
* // SnowflakeID
* id: string,
* actorId: string,
* actorType: string,
* threadId: int,
* threadTitle?: string,
* parent?: TalkChatMessage,
* message: string,
* messageType: string,
* createdAt: int,
* sendAt: int,
* silent: bool,
* }
*/
class ResponseDefinitions {

View file

@ -1989,18 +1989,6 @@ class FeatureContext implements Context, SnippetAcceptingContext {
self::$messageIdToText[$response['id']] = $row['message'];
Assert::assertEquals($row['message'], $response['message']);
Assert::assertEquals($row['sendAt'], $response['sendAt']);
Assert::assertArrayHasKey('metaData', $response);
$metaData = $response['metaData'];
Assert::assertArrayHasKey('silent', $metaData);
Assert::assertArrayHasKey('threadTitle', $metaData);
Assert::assertArrayHasKey('threadId', $metaData);
Assert::assertArrayHasKey('lastEditedTime', $metaData);
if (isset($row['silent'])) {
Assert::assertEquals($metaData['silent'], (bool)$row['silent']);
}
if (isset($row['threadTitle'])) {
Assert::assertEquals($metaData['threadTitle'], (bool)$row['threadTitle']);
}
}
#[When('/^user "([^"]*)" deletes scheduled message "([^"]*)" from room "([^"]*)" with (\d+)(?: \((v1)\))?$/')]
@ -2034,38 +2022,26 @@ class FeatureContext implements Context, SnippetAcceptingContext {
Assert::assertArrayHasKey('createdAt', $message);
Assert::assertIsInt($message['createdAt']);
unset($message['createdAt']);
$metaData = $message['metaData'];
if (isset($metaData['lastEditedTime'])) {
$metaData['lastEditedTime'] = 0;
}
if (isset($message['parent'])) {
$parent = $message['parent'];
Assert::assertArrayHasKey('message', $parent);
Assert::assertArrayHasKey('actorId', $parent);
$message['parent'] = self::$messageIdToText[$parent['id']];
} else {
$message['parent'] = 'null';
}
$message['metaData'] = $metaData;
}
$expected = $formData->getColumnsHash();
foreach ($expected as &$row) {
$row['id'] = self::$textToMessageId[$row['message']];
$row['sendAt'] = (int)$row['sendAt'];
$row['metaData'] = json_decode($row['metaData'], true);
$row['roomId'] = self::$identifierToId[$row['roomId']];
$row['parentId'] = ($row['parentId'] === 'null' ? null : self::$textToMessageId[$row['parentId']]);
if (isset($row['parent'])) {
$parent = [];
}
$row['silent'] = $row['silent'] === 'true';
if ($row['threadId'] === '-1') {
$row['threadId'] = -1;
$row['threadExists'] = false;
$row['threadTitle'] = $row['metaData']['threadTitle'];
} elseif ($row['threadId'] !== '0') {
$row['threadTitle'] = $row['threadId'];
$row['threadId'] = self::$titleToThreadId[$row['threadId']];
$row['threadTitle'] = self::$threadIdToTitle[$row['threadId']];
$row['threadExists'] = true;
$row['metaData']['threadId'] = $row['threadId'];
} else {
$row['threadId'] = (int)$row['threadId'];
}

View file

@ -16,8 +16,8 @@ Feature: chat-4/scheduling
| message | Message 1 |
| sendAt | 1985514582 |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | message | messageType | sendAt | metaData |
| Message 1 | room | users | participant1 | 0 | null | Message 1 | comment | 1985514582 | {"threadTitle":"","silent":false,"threadId":0} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 1 | users | participant1 | 0 | null | Message 1 | comment | 1985514582 | false |
Then user "participant1" is participant of the following rooms (v4)
| id | type | hasScheduledMessages |
| room | 2 | true |
@ -28,8 +28,8 @@ Feature: chat-4/scheduling
| sendAt | 1985514582 |
| silent | true |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | message | messageType | sendAt | metaData |
| Message 2 | room | users | participant1 | 0 | null | Message 2 | comment | 1985514582 | {"threadTitle":"","silent":true,"threadId":0} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 2 | users | participant1 | 0 | null | Message 2 | comment | 1985514582 | true |
Then user "participant1" is participant of the following rooms (v4)
| id | type | hasScheduledMessages |
| room | 2 | true |
@ -40,8 +40,8 @@ Feature: chat-4/scheduling
| sendAt | 1985514582 |
| replyTo | Message |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | parent | message | messageType | sendAt | metaData |
| Message 3 | room | users | participant1 | 0 | Message | Message |Message 3 | comment | 1985514582 | {"threadTitle":"","silent":false,"threadId":0} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 3 | users | participant1 | 0 | Message |Message 3 | comment | 1985514582 | false |
Then user "participant1" is participant of the following rooms (v4)
| id | type | hasScheduledMessages |
| room | 2 | true |
@ -52,8 +52,8 @@ Feature: chat-4/scheduling
| sendAt | 1985514582 |
| threadTitle | Scheduled Thread |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | message | messageType | sendAt | metaData |
| Message 4 | room | users | participant1 | -1 | null | Message 4 | comment | 1985514582 | {"threadTitle":"Scheduled Thread","silent":false,"threadId":-1} |
| id | actorType | actorId | threadId | threadTitle | parent | message | messageType | sendAt | silent |
| Message 4 | users | participant1 | -1 | Scheduled Thread | null | Message 4 | comment | 1985514582 | false |
Then user "participant1" is participant of the following rooms (v4)
| id | type | hasScheduledMessages |
| room | 2 | true |
@ -65,8 +65,8 @@ Feature: chat-4/scheduling
| sendAt | 1985514582 |
| threadId | Thread 1 |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | message | messageType | sendAt | metaData |
| Message 5 | room | users | participant1 | Thread 1 | null | Message 5 | comment | 1985514582 | {"threadTitle":"Thread 1","silent":false,"threadId":"Thread 1"} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 5 | users | participant1 | Thread 1 | null | Message 5 | comment | 1985514582 | false |
Then user "participant1" is participant of the following rooms (v4)
| id | type | hasScheduledMessages |
| room | 2 | true |
@ -79,8 +79,8 @@ Feature: chat-4/scheduling
| replyTo | Message 0 |
| threadId | Thread 1 |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | parent | message | messageType | sendAt | metaData |
| Message 5 | room | users | participant1 | Thread 1 | Message 0 | Message 0 | Message 5 | comment | 1985514582 | {"threadTitle":"Thread 1","silent":false,"threadId":"Thread 1"} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 5 | users | participant1 | Thread 1 | Message 0 | Message 5 | comment | 1985514582 | false |
Then user "participant1" is participant of the following rooms (v4)
| id | type | hasScheduledMessages |
| room | 2 | true |
@ -95,16 +95,16 @@ Feature: chat-4/scheduling
| sendAt |1985514584 |
| silent | true |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | message | messageType | sendAt | metaData |
| Message 1 | room | users | participant1 | 0 | null | Message 1 | comment | 1985514582 | {"threadTitle":"","silent":false,"threadId":0} |
| Message 2 | room | users | participant1 | 0 | null | Message 2 | comment | 1985514584 | {"threadTitle":"","silent":true,"threadId":0} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 1 | users | participant1 | 0 | null | Message 1 | comment | 1985514582 | false |
| Message 2 | users | participant1 | 0 | null | Message 2 | comment | 1985514584 | true |
Then user "participant1" is participant of the following rooms (v4)
| id | type | hasScheduledMessages |
| room | 2 | true |
When user "participant1" deletes scheduled message "Message 1" from room "room" with 200
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | message | messageType | sendAt | metaData |
| Message 2 | room | users | participant1 | 0 | null | Message 2 | comment | 1985514584 | {"threadTitle":"","silent":true,"threadId":0} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 2 | users | participant1 | 0 | null | Message 2 | comment | 1985514584 | true |
Then user "participant1" is participant of the following rooms (v4)
| id | type | hasScheduledMessages |
| room | 2 | true |
@ -119,8 +119,8 @@ Feature: chat-4/scheduling
| message | Message 1 |
| sendAt | 1985514582 |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | message | messageType | sendAt | metaData |
| Message 1 | room | users | participant1 | 0 | null | Message 1 | comment | 1985514582 | {"threadTitle":"","silent":false,"threadId":0} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 1 | users | participant1 | 0 | null | Message 1 | comment | 1985514582 | false |
Then user "participant1" is participant of the following rooms (v4)
| id | type | hasScheduledMessages |
| room | 2 | true |
@ -131,19 +131,19 @@ Feature: chat-4/scheduling
| id | type | hasScheduledMessages |
| room | 2 | true |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | message | messageType | sendAt | metaData |
| Message 1 edited | room | users | participant1 | 0 | null | Message 1 edited | comment | 1985514582 | {"threadTitle":"","silent":false,"threadId":0,"lastEditedTime":0} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 1 edited | users | participant1 | 0 | null | Message 1 edited | comment | 1985514582 | false |
When user "participant1" updates scheduled message "Message 1" in room "room" with 202
| message | Message 1 edited |
| sendAt | 1985514582 |
| silent | true |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | message | messageType | sendAt | metaData |
| Message 1 edited | room | users | participant1 | 0 | null | Message 1 edited | comment | 1985514582 | {"threadTitle":"","silent":true,"threadId":0,"lastEditedTime":0} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 1 edited | users | participant1 | 0 | null | Message 1 edited | comment | 1985514582 | true |
When user "participant1" updates scheduled message "Message 1" in room "room" with 400
| message | Message 1 edited |
| sendAt | 1985514582 |
| threadTitle | Abcd |
Then user "participant1" sees the following scheduled messages in room "room" with 200
| id | roomId | actorType | actorId | threadId | parentId | message | messageType | sendAt | metaData |
| Message 1 edited | room | users | participant1 | 0 | null | Message 1 edited | comment | 1985514582 | {"threadTitle":"","silent":true,"threadId":0,"lastEditedTime":0} |
| id | actorType | actorId | threadId | parent | message | messageType | sendAt | silent |
| Message 1 edited | users | participant1 | 0 | null | Message 1 edited | comment | 1985514582 | true |