mirror of
https://github.com/Portabase/portabase.git
synced 2026-07-14 11:16:13 +02:00
49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
"use server"
|
|
|
|
import {userAction} from "@/lib/safe-actions/actions";
|
|
import {db} from "@/db";
|
|
import * as drizzleDb from "@/db";
|
|
import {eq} from "drizzle-orm";
|
|
import {ServerActionResult} from "@/types/action-type";
|
|
import {Setting} from "@/db/schema/01_setting";
|
|
import {z} from "zod";
|
|
import {DefaultNotificationSchema} from "@/features/settings/schemas/notification.schema";
|
|
import {withUpdatedAt} from "@/db/utils";
|
|
|
|
export const updateNotificationSettingsAction = userAction
|
|
.schema(
|
|
z.object({
|
|
name: z.string(),
|
|
data: DefaultNotificationSchema,
|
|
})
|
|
)
|
|
.action(async ({parsedInput}): Promise<ServerActionResult<Setting>> => {
|
|
const {name, data} = parsedInput;
|
|
|
|
try {
|
|
const [updatedSettings] = await db
|
|
.update(drizzleDb.schemas.setting)
|
|
.set(withUpdatedAt({
|
|
defaultNotificationChannelId: data.notificationChannelId ?? null,
|
|
}))
|
|
.where(eq(drizzleDb.schemas.setting.name, name))
|
|
.returning();
|
|
return {
|
|
success: true,
|
|
value: updatedSettings,
|
|
actionSuccess: {
|
|
message: "Settings successfully updated",
|
|
},
|
|
};
|
|
} catch (_error) {
|
|
return {
|
|
success: false,
|
|
actionError: {
|
|
message: "Failed update settings.",
|
|
status: 500,
|
|
cause: _error instanceof Error ? _error.message : "Unknown error",
|
|
},
|
|
};
|
|
}
|
|
});
|