@oberoncms/plugin-pgsql
Version:
A PostgreSQL database plugin for OberonCMS
88 lines (87 loc) • 2.89 kB
JavaScript
import { eq } from "drizzle-orm";
import { users } from "./schema/next-auth-schema.js";
import { pages } from "./schema/puck-schema.js";
import { images } from "./schema/image-schema.js";
import { site } from "./schema/site-schema.js";
import { getAuthAdapter } from "./auth-adapter.js";
const getDatabaseAdapter = (db) => ({
getSite: async () => {
const result = await db.select({
version: site.version,
components: site.components,
updatedAt: site.updatedAt,
updatedBy: site.updatedBy
}).from(site).where(eq(site.id, 1)).execute();
return result[0];
},
updateSite: async ({ version, components, updatedAt, updatedBy }) => {
await db.insert(site).values({ id: 1, version, components, updatedAt, updatedBy }).onConflictDoUpdate({
target: site.id,
set: { version, components, updatedAt, updatedBy }
}).execute();
},
getAllUsers: async () => {
return await db.select({ id: users.id, email: users.email, role: users.role }).from(users).execute();
},
addUser: async ({ email, role }) => {
return await getAuthAdapter(db).createUser({
email,
role,
emailVerified: null
});
},
deleteUser: async (id) => {
var _a, _b;
await ((_b = (_a = getAuthAdapter(db)).deleteUser) == null ? void 0 : _b.call(_a, id));
},
changeRole: async ({ role, id }) => {
await db.update(users).set({ role }).where(eq(users.id, id)).execute();
},
addImage: async (image) => {
await db.insert(images).values(image).execute();
},
deleteImage: async (key) => {
await db.delete(images).where(eq(images.key, key)).execute();
},
getAllImages: async () => {
return await db.select({
key: images.key,
alt: images.alt,
url: images.url,
size: images.size,
height: images.height,
width: images.width,
updatedAt: images.updatedAt,
updatedBy: images.updatedBy
}).from(images).execute();
},
addPage: async ({ key, data, updatedAt, updatedBy }) => {
await db.insert(pages).values({ key, data, updatedAt, updatedBy }).execute();
},
deletePage: async (key) => {
await db.delete(pages).where(eq(pages.key, key)).execute();
},
getPageData: async (key) => {
var _a;
const result = await db.select({
data: pages.data
}).from(pages).where(eq(pages.key, key)).execute();
return ((_a = result[0]) == null ? void 0 : _a.data) || null;
},
updatePageData: async ({ key, data, updatedAt, updatedBy }) => {
await db.insert(pages).values({ key, data, updatedAt, updatedBy }).onConflictDoUpdate({
target: pages.key,
set: { data, updatedAt, updatedBy }
}).execute();
},
getAllPages: async () => {
return await db.select({
key: pages.key,
updatedAt: pages.updatedAt,
updatedBy: pages.updatedBy
}).from(pages).execute();
}
});
export {
getDatabaseAdapter
};