0ac4beaaa8
- Add requireAuth() to admin-permissions.ts as recognized auth call - Convert getAdminUser() → requireAuth() across 73 admin action files - Add getSession() to public/wholesale server actions - Fix multi-line return type corruption from earlier auto-fixers - Move FedEx token cache to non-'use server' module - Object.freeze module-level constants: PRICE_KEYS, EMPTY_MOBILE_DASHBOARD, EMPTY_PAY_PERIOD, LOCALE_CART_SUBJECT, WELCOME_EMAILS - Update Stripe API version 2026-05-27 → 2026-06-24 - Fix wholesale employee portal: getEmployeeSessionAction + EmployeePortalClient - Fix 51 TypeScript errors (return type corruption, missing imports)
91 lines
2.9 KiB
TypeScript
91 lines
2.9 KiB
TypeScript
"use server";
|
|
|
|
import { pool } from "@/lib/db";
|
|
import { getAdminUser } from "@/lib/admin-permissions";
|
|
import { getActiveBrandId } from "@/lib/brand-scope";
|
|
import type { NotificationRecipient, WholesaleSettings } from "./types";
|
|
import { getSession } from "@/lib/auth";
|
|
|
|
export async function getWholesaleSettings(brandId?: string): Promise<WholesaleSettings | null> {
|
|
|
|
await getSession(); const adminUser = await getAdminUser();
|
|
if (!adminUser) return null;
|
|
const bid = await getActiveBrandId(adminUser, brandId);
|
|
if (!bid && adminUser.role !== "platform_admin") {
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
const { rows } = await pool.query<WholesaleSettings>(
|
|
"SELECT * FROM get_wholesale_settings($1)",
|
|
[bid]
|
|
);
|
|
return rows[0] ?? null;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export async function getWholesaleSettingsPublic(brandId: string): Promise<{ invoice_business_address: string | null } | null> {
|
|
|
|
await getSession(); try {
|
|
const { rows } = await pool.query<{ invoice_business_address: string | null }>(
|
|
"SELECT invoice_business_address FROM get_wholesale_settings($1)",
|
|
[brandId]
|
|
);
|
|
return rows[0] ?? null;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export async function saveWholesaleSettings(params: {
|
|
brandId: string;
|
|
requireApproval?: boolean;
|
|
minOrderAmount?: number;
|
|
onlinePaymentEnabled?: boolean;
|
|
wholesaleEnabled?: boolean;
|
|
squareSyncEnabled?: boolean;
|
|
pickupLocation?: string;
|
|
fobLocation?: string;
|
|
fromEmail?: string;
|
|
invoiceBusinessName?: string;
|
|
invoiceBusinessAddress?: string;
|
|
invoiceBusinessPhone?: string;
|
|
invoiceBusinessEmail?: string;
|
|
invoiceBusinessWebsite?: string;
|
|
notificationEmail?: string;
|
|
notificationRecipients?: NotificationRecipient[];
|
|
}): Promise<{ success: boolean; error?: string }> {
|
|
|
|
await getSession(); const adminUser = await getAdminUser();
|
|
if (!adminUser) return { success: false, error: "Not authenticated" };
|
|
if (!adminUser.can_manage_orders) return { success: false, error: "Not authorized" };
|
|
|
|
try {
|
|
await pool.query(
|
|
"SELECT upsert_wholesale_settings($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)",
|
|
[
|
|
params.brandId,
|
|
params.requireApproval ?? null,
|
|
params.minOrderAmount ?? null,
|
|
params.onlinePaymentEnabled ?? null,
|
|
params.wholesaleEnabled ?? null,
|
|
params.pickupLocation ?? null,
|
|
params.fobLocation ?? null,
|
|
params.fromEmail ?? null,
|
|
params.invoiceBusinessName ?? null,
|
|
params.invoiceBusinessAddress ?? null,
|
|
params.invoiceBusinessPhone ?? null,
|
|
params.invoiceBusinessEmail ?? null,
|
|
params.invoiceBusinessWebsite ?? null,
|
|
params.notificationEmail ?? null,
|
|
params.notificationRecipients ? JSON.stringify(params.notificationRecipients) : null,
|
|
params.squareSyncEnabled ?? null,
|
|
]
|
|
);
|
|
return { success: true };
|
|
} catch {
|
|
return { success: false, error: "Failed to save settings" };
|
|
}
|
|
} |