refactor(database): ♻️ Use new Drizzle count API

This commit is contained in:
Jesse Wierzbinski 2024-10-11 15:46:05 +02:00
parent 7f17074d16
commit ce781f3336
No known key found for this signature in database
5 changed files with 43 additions and 93 deletions

View file

@ -1,7 +1,7 @@
import { apiRoute, applyConfig, auth, idValidator } from "@/api";
import { createRoute } from "@hono/zod-openapi";
import type { Marker as ApiMarker } from "@versia/client/types";
import { and, count, eq } from "drizzle-orm";
import { and, eq } from "drizzle-orm";
import { z } from "zod";
import { db } from "~/drizzle/db";
import { Markers, RolePermissions } from "~/drizzle/schema";
@ -140,22 +140,15 @@ export default apiRoute((app) => {
),
});
const totalCount = await db
.select({
count: count(),
})
.from(Markers)
.where(
and(
eq(Markers.userId, user.id),
eq(Markers.timeline, "home"),
),
);
const totalCount = await db.$count(
Markers,
and(eq(Markers.userId, user.id), eq(Markers.timeline, "home")),
);
if (found?.noteId) {
markers.home = {
last_read_id: found.noteId,
version: totalCount[0].count,
version: totalCount,
updated_at: new Date(found.createdAt).toISOString(),
};
}
@ -170,22 +163,18 @@ export default apiRoute((app) => {
),
});
const totalCount = await db
.select({
count: count(),
})
.from(Markers)
.where(
and(
eq(Markers.userId, user.id),
eq(Markers.timeline, "notifications"),
),
);
const totalCount = await db.$count(
Markers,
and(
eq(Markers.userId, user.id),
eq(Markers.timeline, "notifications"),
),
);
if (found?.notificationId) {
markers.notifications = {
last_read_id: found.notificationId,
version: totalCount[0].count,
version: totalCount,
updated_at: new Date(found.createdAt).toISOString(),
};
}
@ -222,21 +211,14 @@ export default apiRoute((app) => {
.returning()
)[0];
const totalCount = await db
.select({
count: count(),
})
.from(Markers)
.where(
and(
eq(Markers.userId, user.id),
eq(Markers.timeline, "home"),
),
);
const totalCount = await db.$count(
Markers,
and(eq(Markers.userId, user.id), eq(Markers.timeline, "home")),
);
markers.home = {
last_read_id: homeId,
version: totalCount[0].count,
version: totalCount,
updated_at: new Date(insertedMarker.createdAt).toISOString(),
};
}
@ -253,21 +235,17 @@ export default apiRoute((app) => {
.returning()
)[0];
const totalCount = await db
.select({
count: count(),
})
.from(Markers)
.where(
and(
eq(Markers.userId, user.id),
eq(Markers.timeline, "notifications"),
),
);
const totalCount = await db.$count(
Markers,
and(
eq(Markers.userId, user.id),
eq(Markers.timeline, "notifications"),
),
);
markers.notifications = {
last_read_id: notificationsId,
version: totalCount[0].count,
version: totalCount,
updated_at: new Date(insertedMarker.createdAt).toISOString(),
};
}

View file

@ -4,7 +4,7 @@ import {
Collection as CollectionSchema,
Note as NoteSchema,
} from "@versia/federation/schemas";
import { and, count, eq, inArray } from "drizzle-orm";
import { and, eq, inArray } from "drizzle-orm";
import { z } from "zod";
import { db } from "~/drizzle/db";
import { Notes } from "~/drizzle/schema";
@ -102,19 +102,13 @@ export default apiRoute((app) =>
NOTES_PER_PAGE * (pageNumber - 1),
);
const totalNotes = (
await db
.select({
count: count(),
})
.from(Notes)
.where(
and(
eq(Notes.authorId, uuid),
inArray(Notes.visibility, ["public", "unlisted"]),
),
)
)[0].count;
const totalNotes = await db.$count(
Notes,
and(
eq(Notes.authorId, uuid),
inArray(Notes.visibility, ["public", "unlisted"]),
),
);
const json = {
first: new URL(

View file

@ -10,7 +10,6 @@ import {
type InferInsertModel,
type InferSelectModel,
type SQL,
count,
desc,
eq,
inArray,
@ -340,13 +339,7 @@ export class Instance extends BaseInterface<typeof Instances> {
});
}
static async getCount() {
return (
await db
.select({
count: count(),
})
.from(Instances)
)[0].count;
static getCount(): Promise<number> {
return db.$count(Instances);
}
}

View file

@ -18,7 +18,6 @@ import {
type InferInsertModel,
type SQL,
and,
count,
desc,
eq,
inArray,
@ -349,16 +348,10 @@ export class Note extends BaseInterface<typeof Notes, StatusWithRelations> {
* @returns The number of notes in the database
*/
static async getCount(): Promise<number> {
return (
await db
.select({
count: count(),
})
.from(Notes)
.where(
sql`EXISTS (SELECT 1 FROM "Users" WHERE "Users"."id" = ${Notes.authorId} AND "Users"."instanceId" IS NULL)`,
)
)[0].count;
return await db.$count(
Notes,
sql`EXISTS (SELECT 1 FROM "Users" WHERE "Users"."id" = ${Notes.authorId} AND "Users"."instanceId" IS NULL)`,
);
}
/**

View file

@ -24,7 +24,6 @@ import {
type InferInsertModel,
type SQL,
and,
count,
countDistinct,
desc,
eq,
@ -327,15 +326,8 @@ export class User extends BaseInterface<typeof Users, UserWithRelations> {
);
}
static async getCount() {
return (
await db
.select({
count: count(),
})
.from(Users)
.where(isNull(Users.instanceId))
)[0].count;
static getCount(): Promise<number> {
return db.$count(Users, isNull(Users.instanceId));
}
static async getActiveInPeriod(milliseconds: number) {