diff --git a/src/api/routes/channels/#channel_id/messages/pins/index.ts b/src/api/routes/channels/#channel_id/messages/pins/index.ts
index 32e3e9014..717f5d5a0 100644
--- a/src/api/routes/channels/#channel_id/messages/pins/index.ts
+++ b/src/api/routes/channels/#channel_id/messages/pins/index.ts
@@ -63,6 +63,7 @@ router.put(
throw DiscordApiErrors.MAXIMUM_PINS.withParams(maxPins);
message.pinned = true;
+ message.pinned_at = new Date();
const author = await User.getPublicUser(req.user_id);
@@ -182,11 +183,19 @@ router.get(
const pins = await Message.find({
where: { channel_id: channel_id, pinned: true },
relations: ["author"],
+ order: {
+ pinned_at: "DESC",
+ },
});
+ const items = pins.map((message) => ({
+ message,
+ pinned_at: message.pinned_at,
+ }));
+
res.send({
- items: pins,
- has_more: false
+ items,
+ has_more: false,
});
},
);
diff --git a/src/util/entities/Message.ts b/src/util/entities/Message.ts
index 236ee5879..b089a196d 100644
--- a/src/util/entities/Message.ts
+++ b/src/util/entities/Message.ts
@@ -188,6 +188,9 @@ export class Message extends BaseClass {
@Column({ nullable: true })
pinned?: boolean;
+ @Column({ nullable: true })
+ pinned_at?: Date;
+
@Column({ type: "int" })
type: MessageType;
diff --git a/src/util/migration/postgres/1752383879533-message_pinned_at.ts b/src/util/migration/postgres/1752383879533-message_pinned_at.ts
new file mode 100644
index 000000000..f96d284c1
--- /dev/null
+++ b/src/util/migration/postgres/1752383879533-message_pinned_at.ts
@@ -0,0 +1,17 @@
+import { MigrationInterface, QueryRunner } from "typeorm";
+
+export class MessagePinnedAt1752383879533 implements MigrationInterface {
+ name = "MessagePinnedAt1752383879533";
+
+ public async up(queryRunner: QueryRunner): Promise<void> {
+ await queryRunner.query(
+ `ALTER TABLE "messages" ADD "pinned_at" TIMESTAMP`,
+ );
+ }
+
+ public async down(queryRunner: QueryRunner): Promise<void> {
+ await queryRunner.query(
+ `ALTER TABLE "messages" DROP COLUMN "pinned_at"`,
+ );
+ }
+}
|