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)
89 lines
3.5 KiB
TypeScript
89 lines
3.5 KiB
TypeScript
"use server";
|
|
|
|
import { pool } from "@/lib/db";
|
|
import { getAdminUser } from "@/lib/admin-permissions";
|
|
import { getActiveBrandId } from "@/lib/brand-scope";
|
|
import { enqueueWholesaleWebhook } from "./webhooks";
|
|
import { getSession } from "@/lib/auth";
|
|
|
|
export async function recordWholesaleDeposit(
|
|
orderId: string,
|
|
amount: number,
|
|
method: string = "cash",
|
|
reference?: string,
|
|
brandId?: string
|
|
): 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" };
|
|
|
|
const activeBrandId = await getActiveBrandId(adminUser, brandId);
|
|
let data: { success?: boolean; error?: string } | null = null;
|
|
try {
|
|
const { rows } = await pool.query<{ success: boolean; error?: string }>(
|
|
"SELECT * FROM record_wholesale_deposit($1, $2, $3, $4, $5, $6)",
|
|
[orderId, amount, method, reference ?? null, adminUser.user_id, activeBrandId]
|
|
);
|
|
data = Array.isArray(rows) ? rows[0] : rows;
|
|
if (!data?.success) {
|
|
return { success: false, error: data?.error ?? "Failed to record deposit" };
|
|
}
|
|
} catch (e: unknown) {
|
|
return { success: false, error: e instanceof Error ? e.message : "Failed to record deposit" };
|
|
}
|
|
|
|
// Fire webhook — fire-and-forget
|
|
enqueueWholesaleWebhook("deposit_recorded", orderId, { order_id: orderId, amount }, activeBrandId ?? undefined).catch(() => {});
|
|
|
|
return { success: true };
|
|
}
|
|
|
|
export async function bulkFulfillWholesaleOrders(
|
|
orderIds: string[]
|
|
): Promise<{ success: boolean; count?: number; 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 {
|
|
const { rows } = await pool.query<{ success: boolean; count?: number; error?: string }>(
|
|
"SELECT * FROM bulk_fulfill_wholesale_orders($1, $2, $3)",
|
|
[orderIds, adminUser.user_id, await getActiveBrandId(adminUser)]
|
|
);
|
|
const data = Array.isArray(rows) ? rows[0] : rows;
|
|
if (!data?.success) {
|
|
return { success: false, error: data?.error ?? "Failed to bulk fulfill orders" };
|
|
}
|
|
return { success: true, count: data.count };
|
|
} catch (e: unknown) {
|
|
return { success: false, error: e instanceof Error ? e.message : "Failed to bulk fulfill orders" };
|
|
}
|
|
}
|
|
|
|
export async function bulkRecordWholesaleDeposit(
|
|
orderIds: string[],
|
|
amount: number,
|
|
method: string = "cash",
|
|
reference?: string
|
|
): Promise<{ success: boolean; count?: number; 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 {
|
|
const { rows } = await pool.query<{ success: boolean; count?: number; error?: string }>(
|
|
"SELECT * FROM bulk_record_wholesale_deposit($1, $2, $3, $4, $5, $6)",
|
|
[orderIds, amount, method, reference ?? null, adminUser.user_id, await getActiveBrandId(adminUser)]
|
|
);
|
|
const data = Array.isArray(rows) ? rows[0] : rows;
|
|
if (!data?.success) {
|
|
return { success: false, error: data?.error ?? "Failed to bulk record deposits" };
|
|
}
|
|
return { success: true, count: data.count };
|
|
} catch (e: unknown) {
|
|
return { success: false, error: e instanceof Error ? e.message : "Failed to bulk record deposits" };
|
|
}
|
|
} |