refactor: resolve hotel name directly from HOTEL_NAME env
resolveHotelName() now returns env.HOTEL_NAME directly — the single source of truth. The CMS hotel_name site setting and its DEFAULTS entry are removed as dead code since they no longer influence the displayed name. Call sites are unchanged (still await resolveHotelName()); only the lookup behind it is gone, so the public site always shows the configured env name with no DB round-trip and no preset.
This commit is contained in:
1 parent
164a4f4ef6
commit
750fcb2e5c
4 files changed
+6
-17
No files matched your search
@@ -44,13 +44,6 @@ export const SETTINGS_GROUPS: SettingsGroup[] = [
|
|||||||
icon: "building",
|
icon: "building",
|
||||||
description: "Name, branding and defaults shown across the site.",
|
description: "Name, branding and defaults shown across the site.",
|
||||||
fields: [
|
fields: [
|
||||||
{
|
|
||||||
key: "hotel_name",
|
|
||||||
label: "Hotel name",
|
|
||||||
type: "text",
|
|
||||||
placeholder: "Epicnabbo",
|
|
||||||
defaultValue: "",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
key: "cms_logo",
|
key: "cms_logo",
|
||||||
label: "Logo URL",
|
label: "Logo URL",
|
||||||
|
|||||||
@@ -1,16 +1,12 @@
|
|||||||
import "server-only";
|
import "server-only";
|
||||||
|
|
||||||
import { env } from "@/env";
|
import { env } from "@/env";
|
||||||
import { siteSettings } from "@/lib/services/site-settings";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolve the public hotel name: CMS `hotel_name` setting, falling back to the
|
* The public hotel name is read directly from the required HOTEL_NAME env var.
|
||||||
* required HOTEL_NAME env var. There is no hardcoded preset — the site must be
|
* There is no CMS override or hardcoded preset — the site must be configured,
|
||||||
* configured, otherwise HOTEL_NAME fails validation at startup.
|
* otherwise HOTEL_NAME fails validation at startup.
|
||||||
*/
|
*/
|
||||||
export async function resolveHotelName(): Promise<string> {
|
export async function resolveHotelName(): Promise<string> {
|
||||||
const fromSettings = (
|
return env.HOTEL_NAME;
|
||||||
await siteSettings.get("hotel_name", env.HOTEL_NAME)
|
|
||||||
)?.trim();
|
|
||||||
return fromSettings || env.HOTEL_NAME;
|
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,6 @@ import { logger } from "@/lib/logger";
|
|||||||
import { redis } from "@/lib/redis";
|
import { redis } from "@/lib/redis";
|
||||||
|
|
||||||
const DEFAULTS: Record<string, string> = {
|
const DEFAULTS: Record<string, string> = {
|
||||||
hotel_name: "",
|
|
||||||
habbo_imaging_url: "/imaging",
|
habbo_imaging_url: "/imaging",
|
||||||
logo_url: "",
|
logo_url: "",
|
||||||
nitro_client_url: "",
|
nitro_client_url: "",
|
||||||
@@ -15,7 +14,7 @@ const DEFAULTS: Record<string, string> = {
|
|||||||
const CACHE_TTL_MS = 300_000;
|
const CACHE_TTL_MS = 300_000;
|
||||||
const REDIS_CACHE_KEY = "site_settings";
|
const REDIS_CACHE_KEY = "site_settings";
|
||||||
// Short in-process window so repeated getters in one request (header, nav,
|
// Short in-process window so repeated getters in one request (header, nav,
|
||||||
// footer all read hotel_name / logo) don't each pay a Redis round-trip.
|
// footer all read logo and other settings) don't each pay a Redis round-trip.
|
||||||
// Redis stays the source of truth across instances.
|
// Redis stays the source of truth across instances.
|
||||||
const MEMORY_TTL_MS = 60_000;
|
const MEMORY_TTL_MS = 60_000;
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ export default defineConfig({
|
|||||||
// unit tests run without a populated .env.
|
// unit tests run without a populated .env.
|
||||||
env: {
|
env: {
|
||||||
SKIP_ENV_VALIDATION: "1",
|
SKIP_ENV_VALIDATION: "1",
|
||||||
|
HOTEL_NAME: "TestHotel",
|
||||||
DATABASE_URL: "mysql://root:root@localhost:3306/test",
|
DATABASE_URL: "mysql://root:root@localhost:3306/test",
|
||||||
},
|
},
|
||||||
testTimeout: 10000,
|
testTimeout: 10000,
|
||||||
|
|||||||
Reference in new issue
Block a user