- added settings page and function
- add Role Ring for avatar and display role for user nav
This commit is contained in:
47
src/service/setting.api.ts
Normal file
47
src/service/setting.api.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { prisma } from '@/db';
|
||||
import { Setting } from '@/generated/prisma/client';
|
||||
import { authMiddleware } from '@/lib/middleware';
|
||||
import { createServerFn } from '@tanstack/react-start';
|
||||
import { settingSchema } from './setting.schema';
|
||||
// import { settingSchema } from './setting.schema';
|
||||
|
||||
export type SettingReturn = {
|
||||
[key: string]: Setting;
|
||||
};
|
||||
|
||||
export const getSettings = createServerFn({ method: 'GET' })
|
||||
.middleware([authMiddleware])
|
||||
.handler(async () => {
|
||||
const settings = await prisma.setting.findMany();
|
||||
|
||||
const results: SettingReturn = {};
|
||||
|
||||
settings.forEach((setting) => {
|
||||
results[setting.key] = setting;
|
||||
});
|
||||
|
||||
return results;
|
||||
});
|
||||
|
||||
export const updateSettings = createServerFn({ method: 'POST' })
|
||||
.inputValidator(settingSchema)
|
||||
.middleware([authMiddleware])
|
||||
.handler(async ({ data }) => {
|
||||
// Update each setting
|
||||
const updates = Object.entries(data).map(([key, value]) =>
|
||||
prisma.setting.upsert({
|
||||
where: { key },
|
||||
update: { value },
|
||||
create: {
|
||||
key,
|
||||
value,
|
||||
description: key, // or provide proper descriptions
|
||||
relation: 'admin',
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
await prisma.$transaction(updates);
|
||||
|
||||
return { success: true };
|
||||
});
|
||||
Reference in New Issue
Block a user