feat(db): add users/currency/bans/settings read repositories
This commit is contained in:
1 parent
3e3776b477
commit
d04ed42586
7 files changed
+76
No files matched your search
@@ -11,6 +11,7 @@
|
|||||||
"db:pull": "drizzle-kit pull"
|
"db:pull": "drizzle-kit pull"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@atomcms/settings": "workspace:*",
|
||||||
"drizzle-orm": "^0.38.0",
|
"drizzle-orm": "^0.38.0",
|
||||||
"mysql2": "^3.11.0"
|
"mysql2": "^3.11.0"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
export { createDb } from "./client.js";
|
||||||
|
export type { Database } from "./client.js";
|
||||||
|
export * as schema from "./schema/index.js";
|
||||||
|
export { isBanActive } from "./bans/is-ban-active.js";
|
||||||
|
export { makeUsersRepo } from "./repositories/users-repo.js";
|
||||||
|
export { makeCurrencyRepo } from "./repositories/currency-repo.js";
|
||||||
|
export { makeBansRepo } from "./repositories/bans-repo.js";
|
||||||
|
export { makeSettingsRepo } from "./repositories/settings-repo.js";
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import { eq } from "drizzle-orm";
|
||||||
|
import type { Database } from "../client.js";
|
||||||
|
import { bans } from "../schema/bans.js";
|
||||||
|
import { isBanActive } from "../bans/is-ban-active.js";
|
||||||
|
|
||||||
|
export function makeBansRepo(db: Database) {
|
||||||
|
return {
|
||||||
|
activeForUser: async (userId: number, nowUnixSeconds: number) => {
|
||||||
|
const rows = await db.select().from(bans).where(eq(bans.userId, userId));
|
||||||
|
return rows.filter((b) => isBanActive(b, nowUnixSeconds));
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import { eq } from "drizzle-orm";
|
||||||
|
import type { Database } from "../client.js";
|
||||||
|
import { usersCurrency } from "../schema/users-currency.js";
|
||||||
|
|
||||||
|
export function makeCurrencyRepo(db: Database) {
|
||||||
|
return {
|
||||||
|
// Returns a map of currency type -> amount for one user.
|
||||||
|
forUser: async (userId: number): Promise<Map<number, number>> => {
|
||||||
|
const rows = await db
|
||||||
|
.select()
|
||||||
|
.from(usersCurrency)
|
||||||
|
.where(eq(usersCurrency.userId, userId));
|
||||||
|
return new Map(rows.map((r) => [r.type, r.amount]));
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import type { Database } from "../client.js";
|
||||||
|
import { websiteSettings } from "../schema/website-settings.js";
|
||||||
|
import type { SettingRow } from "@atomcms/settings";
|
||||||
|
|
||||||
|
export function makeSettingsRepo(db: Database) {
|
||||||
|
return {
|
||||||
|
// Shaped to match @atomcms/settings SettingsFetcher.
|
||||||
|
all: async (): Promise<SettingRow[]> => {
|
||||||
|
const rows = await db
|
||||||
|
.select({ key: websiteSettings.key, value: websiteSettings.value })
|
||||||
|
.from(websiteSettings);
|
||||||
|
return rows;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import { eq } from "drizzle-orm";
|
||||||
|
import type { Database } from "../client.js";
|
||||||
|
import { users } from "../schema/users.js";
|
||||||
|
|
||||||
|
export function makeUsersRepo(db: Database) {
|
||||||
|
return {
|
||||||
|
findById: async (id: number) => {
|
||||||
|
const rows = await db.select().from(users).where(eq(users.id, id)).limit(1);
|
||||||
|
return rows[0] ?? null;
|
||||||
|
},
|
||||||
|
findByUsername: async (username: string) => {
|
||||||
|
const rows = await db
|
||||||
|
.select()
|
||||||
|
.from(users)
|
||||||
|
.where(eq(users.username, username))
|
||||||
|
.limit(1);
|
||||||
|
return rows[0] ?? null;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
Generated
+3
@@ -26,6 +26,9 @@ importers:
|
|||||||
|
|
||||||
packages/db:
|
packages/db:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
'@atomcms/settings':
|
||||||
|
specifier: workspace:*
|
||||||
|
version: link:../settings
|
||||||
drizzle-orm:
|
drizzle-orm:
|
||||||
specifier: ^0.38.0
|
specifier: ^0.38.0
|
||||||
version: 0.38.4([email protected](@types/[email protected]))
|
version: 0.38.4([email protected](@types/[email protected]))
|
||||||
|
|||||||
Reference in new issue
Block a user