mirror of
https://github.com/versia-pub/server.git
synced 2026-03-13 05:49:16 +01:00
refactor(database): ♻️ Use dates instead of strings in database
Some checks failed
CodeQL Scan / Analyze (javascript-typescript) (push) Failing after 1s
Build Docker Images / lint (push) Failing after 7s
Build Docker Images / check (push) Failing after 7s
Build Docker Images / tests (push) Failing after 7s
Build Docker Images / detect-circular (push) Failing after 7s
Deploy Docs to GitHub Pages / build (push) Failing after 0s
Build Docker Images / build (server, Dockerfile, ${{ github.repository_owner }}/server) (push) Has been skipped
Build Docker Images / build (worker, Worker.Dockerfile, ${{ github.repository_owner }}/worker) (push) Has been skipped
Deploy Docs to GitHub Pages / Deploy (push) Has been skipped
Mirror to Codeberg / Mirror (push) Failing after 0s
Nix Build / check (push) Failing after 0s
Test Publish / build (client) (push) Failing after 0s
Test Publish / build (sdk) (push) Failing after 0s
Some checks failed
CodeQL Scan / Analyze (javascript-typescript) (push) Failing after 1s
Build Docker Images / lint (push) Failing after 7s
Build Docker Images / check (push) Failing after 7s
Build Docker Images / tests (push) Failing after 7s
Build Docker Images / detect-circular (push) Failing after 7s
Deploy Docs to GitHub Pages / build (push) Failing after 0s
Build Docker Images / build (server, Dockerfile, ${{ github.repository_owner }}/server) (push) Has been skipped
Build Docker Images / build (worker, Worker.Dockerfile, ${{ github.repository_owner }}/worker) (push) Has been skipped
Deploy Docs to GitHub Pages / Deploy (push) Has been skipped
Mirror to Codeberg / Mirror (push) Failing after 0s
Nix Build / check (push) Failing after 0s
Test Publish / build (client) (push) Failing after 0s
Test Publish / build (sdk) (push) Failing after 0s
This commit is contained in:
parent
1fefafdbad
commit
6056a6622c
25 changed files with 2548 additions and 67 deletions
|
|
@ -137,7 +137,7 @@ export const checkRouteNeedsChallenge = async (
|
|||
// Expire the challenge
|
||||
await db
|
||||
.update(Challenges)
|
||||
.set({ expiresAt: new Date().toISOString() })
|
||||
.set({ expiresAt: new Date() })
|
||||
.where(eq(Challenges.id, challenge_id));
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ export class Like extends BaseInterface<typeof Likes, LikeType> {
|
|||
this.data.liker.uri ? new URL(this.data.liker.uri) : null,
|
||||
).href,
|
||||
type: "pub.versia:likes/Like",
|
||||
created_at: new Date(this.data.createdAt).toISOString(),
|
||||
created_at: this.data.createdAt.toISOString(),
|
||||
liked: this.data.liked.uri
|
||||
? new URL(this.data.liked.uri).href
|
||||
: new URL(`/notes/${this.data.liked.id}`, config.http.base_url)
|
||||
|
|
|
|||
|
|
@ -513,7 +513,7 @@ export class Note extends BaseInterface<typeof Notes, NoteTypeWithRelations> {
|
|||
reblogId: this.id,
|
||||
visibility,
|
||||
sensitive: false,
|
||||
updatedAt: new Date().toISOString(),
|
||||
updatedAt: new Date(),
|
||||
clientId: null,
|
||||
uri: uri?.href,
|
||||
});
|
||||
|
|
@ -979,7 +979,7 @@ export class Note extends BaseInterface<typeof Notes, NoteTypeWithRelations> {
|
|||
authorId: author.id,
|
||||
visibility: "public",
|
||||
uri,
|
||||
createdAt: new Date(created_at).toISOString(),
|
||||
createdAt: new Date(created_at),
|
||||
}));
|
||||
|
||||
const attachments = await Promise.all(
|
||||
|
|
@ -1150,7 +1150,7 @@ export class Note extends BaseInterface<typeof Notes, NoteTypeWithRelations> {
|
|||
in_reply_to_id: data.replyId || null,
|
||||
in_reply_to_account_id: data.reply?.authorId || null,
|
||||
account: this.author.toApi(userFetching?.id === data.authorId),
|
||||
created_at: new Date(data.createdAt).toISOString(),
|
||||
created_at: data.createdAt.toISOString(),
|
||||
application: data.client
|
||||
? new Client(data.client).toApi()
|
||||
: undefined,
|
||||
|
|
@ -1200,9 +1200,7 @@ export class Note extends BaseInterface<typeof Notes, NoteTypeWithRelations> {
|
|||
(n) => n?.toApi(userFetching),
|
||||
)) ?? null)
|
||||
: null,
|
||||
edited_at: data.updatedAt
|
||||
? new Date(data.updatedAt).toISOString()
|
||||
: null,
|
||||
edited_at: data.updatedAt.toISOString(),
|
||||
reactions,
|
||||
text: data.contentSource,
|
||||
};
|
||||
|
|
@ -1246,7 +1244,7 @@ export class Note extends BaseInterface<typeof Notes, NoteTypeWithRelations> {
|
|||
const status = this.data;
|
||||
return new VersiaEntities.Note({
|
||||
type: "Note",
|
||||
created_at: new Date(status.createdAt).toISOString(),
|
||||
created_at: status.createdAt.toISOString(),
|
||||
id: status.id,
|
||||
author: this.author.uri.href,
|
||||
uri: this.getUri().href,
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ export class Notification extends BaseInterface<
|
|||
|
||||
return {
|
||||
account: account.toApi(),
|
||||
created_at: new Date(this.data.createdAt).toISOString(),
|
||||
created_at: this.data.createdAt.toISOString(),
|
||||
id: this.data.id,
|
||||
type: this.data.type,
|
||||
status: this.data.status
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ export class Reaction extends BaseInterface<typeof Reactions, ReactionType> {
|
|||
this.data.authorId,
|
||||
this.data.author.uri ? new URL(this.data.author.uri) : null,
|
||||
).href,
|
||||
created_at: new Date(this.data.createdAt).toISOString(),
|
||||
created_at: this.data.createdAt.toISOString(),
|
||||
id: this.id,
|
||||
object: this.data.note.uri
|
||||
? new URL(this.data.note.uri).href
|
||||
|
|
|
|||
|
|
@ -160,9 +160,7 @@ export class Token extends BaseInterface<typeof Tokens, TokenType> {
|
|||
access_token: this.data.accessToken,
|
||||
token_type: "Bearer",
|
||||
scope: this.data.scopes.join(" "),
|
||||
created_at: Math.floor(
|
||||
new Date(this.data.createdAt).getTime() / 1000,
|
||||
),
|
||||
created_at: Math.floor(this.data.createdAt.getTime() / 1000),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -475,7 +475,7 @@ export class User extends BaseInterface<typeof Users, UserWithRelations> {
|
|||
isNull(Users.instanceId),
|
||||
gte(
|
||||
Notes.createdAt,
|
||||
new Date(Date.now() - milliseconds).toISOString(),
|
||||
new Date(Date.now() - milliseconds),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
|
@ -803,7 +803,7 @@ export class User extends BaseInterface<typeof Users, UserWithRelations> {
|
|||
}
|
||||
|
||||
await user.update({
|
||||
createdAt: new Date(created_at).toISOString(),
|
||||
createdAt: new Date(created_at),
|
||||
endpoints: {
|
||||
inbox,
|
||||
outbox: collections.outbox,
|
||||
|
|
@ -940,7 +940,7 @@ export class User extends BaseInterface<typeof Users, UserWithRelations> {
|
|||
publicKey: keys.public_key,
|
||||
fields: [],
|
||||
privateKey: keys.private_key,
|
||||
updatedAt: new Date().toISOString(),
|
||||
updatedAt: new Date(),
|
||||
source: {
|
||||
language: "en",
|
||||
note: "",
|
||||
|
|
@ -1116,7 +1116,7 @@ export class User extends BaseInterface<typeof Users, UserWithRelations> {
|
|||
avatar: this.getAvatarUrl().proxied,
|
||||
header: this.getHeaderUrl()?.proxied ?? "",
|
||||
locked: user.isLocked,
|
||||
created_at: new Date(user.createdAt).toISOString(),
|
||||
created_at: user.createdAt.toISOString(),
|
||||
followers_count:
|
||||
user.isHidingCollections && !isOwnAccount
|
||||
? 0
|
||||
|
|
@ -1177,7 +1177,7 @@ export class User extends BaseInterface<typeof Users, UserWithRelations> {
|
|||
remote: false,
|
||||
},
|
||||
},
|
||||
created_at: new Date(user.createdAt).toISOString(),
|
||||
created_at: user.createdAt.toISOString(),
|
||||
collections: {
|
||||
featured: new URL(
|
||||
`/users/${user.id}/featured`,
|
||||
|
|
|
|||
45
packages/kit/tables/migrations/0053_lively_hellfire_club.sql
Normal file
45
packages/kit/tables/migrations/0053_lively_hellfire_club.sql
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
ALTER TABLE "AuthorizationCodes" ALTER COLUMN "expires_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "AuthorizationCodes" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "AuthorizationCodes" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Challenges" ALTER COLUMN "expires_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Challenges" ALTER COLUMN "expires_at" SET DEFAULT NOW() + INTERVAL '5 minutes';--> statement-breakpoint
|
||||
ALTER TABLE "Challenges" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Challenges" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Filters" ALTER COLUMN "expires_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Filters" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Filters" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Flags" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Flags" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Likes" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Likes" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Markers" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Markers" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "ModNotes" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "ModNotes" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "ModTags" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "ModTags" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Notes" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Notes" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Notes" ALTER COLUMN "updated_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Notes" ALTER COLUMN "updated_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Notifications" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Notifications" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "PushSubscriptions" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "PushSubscriptions" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "PushSubscriptions" ALTER COLUMN "updated_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "PushSubscriptions" ALTER COLUMN "updated_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Reaction" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Reaction" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Reaction" ALTER COLUMN "updated_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Reaction" ALTER COLUMN "updated_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Relationships" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Relationships" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Relationships" ALTER COLUMN "updated_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Relationships" ALTER COLUMN "updated_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Tokens" ALTER COLUMN "expires_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Tokens" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Tokens" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Users" ALTER COLUMN "created_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Users" ALTER COLUMN "created_at" SET DEFAULT now();--> statement-breakpoint
|
||||
ALTER TABLE "Users" ALTER COLUMN "updated_at" SET DATA TYPE timestamp (3) with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "Users" ALTER COLUMN "updated_at" SET DEFAULT now();
|
||||
2439
packages/kit/tables/migrations/meta/0053_snapshot.json
Normal file
2439
packages/kit/tables/migrations/meta/0053_snapshot.json
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -372,6 +372,13 @@
|
|||
"when": 1755732000165,
|
||||
"tag": "0052_complete_hellfire_club",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 53,
|
||||
"version": "7",
|
||||
"when": 1765422160004,
|
||||
"tag": "0053_lively_hellfire_club",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,13 +28,12 @@ import {
|
|||
import type { z } from "zod";
|
||||
|
||||
const createdAt = () =>
|
||||
// TODO: Change mode to Date
|
||||
timestamp("created_at", { precision: 3, mode: "string" })
|
||||
timestamp("created_at", { precision: 3, mode: "date", withTimezone: true })
|
||||
.defaultNow()
|
||||
.notNull();
|
||||
|
||||
const updatedAt = () =>
|
||||
timestamp("updated_at", { precision: 3, mode: "string" })
|
||||
timestamp("updated_at", { precision: 3, mode: "date", withTimezone: true })
|
||||
.defaultNow()
|
||||
.notNull();
|
||||
|
||||
|
|
@ -47,7 +46,8 @@ export const Challenges = pgTable("Challenges", {
|
|||
challenge: jsonb("challenge").notNull().$type<Challenge>(),
|
||||
expiresAt: timestamp("expires_at", {
|
||||
precision: 3,
|
||||
mode: "string",
|
||||
mode: "date",
|
||||
withTimezone: true,
|
||||
})
|
||||
.default(
|
||||
// 5 minutes
|
||||
|
|
@ -191,7 +191,11 @@ export const Filters = pgTable("Filters", {
|
|||
>(),
|
||||
title: text("title").notNull(),
|
||||
filterAction: text("filter_action").notNull().$type<"warn" | "hide">(),
|
||||
expireAt: timestamp("expires_at", { precision: 3, mode: "string" }),
|
||||
expireAt: timestamp("expires_at", {
|
||||
precision: 3,
|
||||
mode: "date",
|
||||
withTimezone: true,
|
||||
}),
|
||||
createdAt: createdAt(),
|
||||
});
|
||||
|
||||
|
|
@ -330,7 +334,11 @@ export const Tokens = pgTable("Tokens", {
|
|||
id: id(),
|
||||
scopes: text("scopes").array().notNull().default(sql`ARRAY[]::text[]`),
|
||||
accessToken: text("access_token").notNull(),
|
||||
expiresAt: timestamp("expires_at", { precision: 3, mode: "string" }),
|
||||
expiresAt: timestamp("expires_at", {
|
||||
precision: 3,
|
||||
mode: "date",
|
||||
withTimezone: true,
|
||||
}),
|
||||
createdAt: createdAt(),
|
||||
userId: uuid("userId")
|
||||
.references(() => Users.id, {
|
||||
|
|
@ -363,7 +371,8 @@ export const AuthorizationCodes = pgTable("AuthorizationCodes", {
|
|||
redirectUri: text("redirect_uri"),
|
||||
expiresAt: timestamp("expires_at", {
|
||||
precision: 3,
|
||||
mode: "string",
|
||||
mode: "date",
|
||||
withTimezone: true,
|
||||
}).notNull(),
|
||||
createdAt: createdAt(),
|
||||
codeChallenge: text("code_challenge"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue