mirror of
https://github.com/ajnart/homarr.git
synced 2026-01-30 11:19:12 +01:00
* feat: add analytics * feat: send data to umami * refactor: fix format * fix: click behavior of switches * refactor: format * chore: rerun ci --------- Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
63 lines
2.2 KiB
TypeScript
63 lines
2.2 KiB
TypeScript
import SuperJSON from "superjson";
|
|
|
|
import { eq } from "@homarr/db";
|
|
import { serverSettings } from "@homarr/db/schema/sqlite";
|
|
import { logger } from "@homarr/log";
|
|
import type { defaultServerSettings, ServerSettings } from "@homarr/server-settings";
|
|
import { defaultServerSettingsKeys } from "@homarr/server-settings";
|
|
import { z } from "@homarr/validation";
|
|
|
|
import { createTRPCRouter, protectedProcedure, publicProcedure } from "../trpc";
|
|
|
|
export const serverSettingsRouter = createTRPCRouter({
|
|
// this must be public so anonymous users also get analytics
|
|
getAnalytics: publicProcedure.query(async ({ ctx }) => {
|
|
const setting = await ctx.db.query.serverSettings.findFirst({
|
|
where: eq(serverSettings.settingKey, "analytics"),
|
|
});
|
|
|
|
if (!setting) {
|
|
logger.info(
|
|
"Server settings for analytics is currently undefined. Using default values instead. If this persists, there may be an issue with the server settings",
|
|
);
|
|
return {
|
|
enableGeneral: true,
|
|
enableIntegrationData: false,
|
|
enableUserData: false,
|
|
enableWidgetData: false,
|
|
} as (typeof defaultServerSettings)["analytics"];
|
|
}
|
|
|
|
return SuperJSON.parse<(typeof defaultServerSettings)["analytics"]>(setting.value);
|
|
}),
|
|
getAll: protectedProcedure.query(async ({ ctx }) => {
|
|
const settings = await ctx.db.query.serverSettings.findMany();
|
|
|
|
const data = {} as ServerSettings;
|
|
defaultServerSettingsKeys.forEach((key) => {
|
|
const settingValue = settings.find((setting) => setting.settingKey === key)?.value;
|
|
if (!settingValue) {
|
|
return;
|
|
}
|
|
data[key] = SuperJSON.parse(settingValue);
|
|
});
|
|
return data;
|
|
}),
|
|
saveSettings: protectedProcedure
|
|
.input(
|
|
z.object({
|
|
settingsKey: z.enum(defaultServerSettingsKeys),
|
|
value: z.record(z.string(), z.unknown()),
|
|
}),
|
|
)
|
|
.mutation(async ({ ctx, input }) => {
|
|
const databaseRunResult = await ctx.db
|
|
.update(serverSettings)
|
|
.set({
|
|
value: SuperJSON.stringify(input.value),
|
|
})
|
|
.where(eq(serverSettings.settingKey, input.settingsKey));
|
|
return databaseRunResult.changes === 1;
|
|
}),
|
|
});
|