First Commit. Duplicate bunext-sqlite preset

This commit is contained in:
2026-10-18 16:47:11 +01:00
commit 81e4a8aecc
718 changed files with 41695 additions and 0 deletions
@@ -0,0 +1,44 @@
import userAuth from "@/src/functions/backend/auth/user-auth";
import grabUsers from "@/src/functions/backend/db/users/grab-users";
import sanitizeUserBio from "@/src/functions/backend/db/users/sanitize-user-bio";
import grabUserPasswordHash from "@/src/functions/backend/auth/grab-user-password-hash";
import type { PagePropsType } from "@/src/types";
import type { BunextPageServerFn } from "@moduletrace/bunext/types";
type Params = Parameters<BunextPageServerFn<PagePropsType>>[0];
/**
* Shared server props for the `/admin/settings` sub-pages.
*/
export default async function grabSettingsServerProps({ req }: Params) {
const { user } = await userAuth({ req });
if (!user?.id) {
return {
redirect: {
destination: "/auth/login",
},
};
}
const user_res = await grabUsers({ user_id: user.id });
if (!user_res.singleRes) {
return {
redirect: {
destination: "/admin",
},
};
}
const has_password = Boolean(
await grabUserPasswordHash({ user_id: user.id }),
);
return {
props: {
person: sanitizeUserBio({ user: user_res.singleRes }),
has_password,
},
};
}
@@ -0,0 +1,25 @@
import type { PagePropsType } from "@/src/types";
import type { BunextPageModuleMetaFn } from "@moduletrace/bunext/types";
import { SiteData } from "@/src/data/site-data";
type Params = {
label: string;
};
export default function settingsPageMeta({
label,
}: Params): BunextPageModuleMetaFn {
return async (params) => {
const person = (params.serverRes?.props as PagePropsType | undefined)
?.person;
const person_name = person
? `${person.first_name + (person.last_name ? ` ${person.last_name}` : "")}`
: "";
return {
title: `${label} Settings${person_name ? ` - ${person_name}` : ""} | ${SiteData["SiteName"]}`,
description: `Manage your ${label.toLowerCase()} settings on ${SiteData["SiteName"]}.`,
};
};
}
@@ -0,0 +1,85 @@
import type { BUN_SQLITE_BSQLITE_USERS } from "@/db/types/db";
import adminCrudHandler from "@/src/functions/frontend/admin-crud-handler";
import clientDeleteMediaHandler from "@/src/functions/frontend/client-delete-media-handler";
import clientUploadMediaHandler from "@/src/functions/frontend/client-upload-media-handler";
import type useFormInit from "@/src/hooks/use-form-init";
import type { UserFormObject } from "@/src/types";
import _ from "lodash";
export default async function submitAccountForm({
setLoading,
setStatus,
form,
existing_full,
image,
}: ReturnType<typeof useFormInit<UserFormObject>>) {
try {
const user_id = existing_full?.id;
if (!user_id) {
return;
}
if (!window.confirm("Update your account details?")) {
return;
}
const new_user_data: BUN_SQLITE_BSQLITE_USERS = _.pick<
UserFormObject,
keyof UserFormObject
>(form, ["first_name", "last_name", "email", "username", "bio"]);
setLoading(true);
const update_user_res = await adminCrudHandler({
action: "update",
table: "users",
update_data: new_user_data,
id: user_id,
});
if (!update_user_res.success) {
throw new Error(update_user_res.msg || "Account Update Failed");
}
if (image?.imageBase64Full) {
const delete_media_res = await clientDeleteMediaHandler({
user_id: user_id,
media_paradigm: "user-profile-image",
});
if (!delete_media_res.success) {
throw new Error(
delete_media_res.msg ||
delete_media_res.error ||
`Couldn't delete old media`,
);
}
const upload_image_res = await clientUploadMediaHandler({
user_id: user_id,
media_base_64_data_url: image.imageBase64Full,
media_paradigms: ["user-profile-image"],
media_type: "image",
is_media_primary: true,
update_on_duplicate: true,
reauth: true,
});
if (!upload_image_res.success) {
throw new Error(
upload_image_res.msg || "Couldn't upload Image",
);
}
}
window.location.reload();
} catch (error: any) {
setStatus({
error: true,
msg: error.message || "Account Form Error",
});
setLoading(false);
}
}