Files

137 lines
3.9 KiB
TypeScript

import { z } from "zod";
export declare const ROLES: readonly ["ADMIN", "EDITOR"];
export type Role = (typeof ROLES)[number];
export declare const ROLE_LABELS: Record<Role, string>;
/** Normalize Iranian mobile to `09XXXXXXXXX` (Latin digits). */
export declare function normalizeIrMobile(raw: string): string;
export declare const irMobileSchema: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
export declare const loginSchema: z.ZodObject<{
phone: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
password: z.ZodString;
}, z.core.$strip>;
export type LoginInput = z.infer<typeof loginSchema>;
export declare const changePasswordSchema: z.ZodObject<{
currentPassword: z.ZodString;
newPassword: z.ZodString;
}, z.core.$strip>;
export type ChangePasswordInput = z.infer<typeof changePasswordSchema>;
export declare const userCreateSchema: z.ZodObject<{
phone: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
name: z.ZodString;
role: z.ZodEnum<{
ADMIN: "ADMIN";
EDITOR: "EDITOR";
}>;
password: z.ZodString;
}, z.core.$strip>;
export type UserCreateInput = z.infer<typeof userCreateSchema>;
export declare const userUpdateSchema: z.ZodObject<{
name: z.ZodString;
role: z.ZodEnum<{
ADMIN: "ADMIN";
EDITOR: "EDITOR";
}>;
isActive: z.ZodBoolean;
password: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
export type UserUpdateInput = z.infer<typeof userUpdateSchema>;
export interface AdminUserDto {
id: number;
phone: string;
name: string;
role: Role;
isActive: boolean;
lastLoginAt: string | null;
createdAt: string;
}
export interface AuthResponse {
accessToken: string;
user: AdminUserDto;
}
export declare const MESSAGE_STATUSES: readonly ["NEW", "READ", "ARCHIVED"];
export type MessageStatus = (typeof MESSAGE_STATUSES)[number];
export declare const MESSAGE_STATUS_LABELS: Record<MessageStatus, string>;
export declare const contactInputSchema: z.ZodObject<{
name: z.ZodString;
org: z.ZodString;
phone: z.ZodString;
message: z.ZodDefault<z.ZodString>;
website: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
export type ContactInput = z.infer<typeof contactInputSchema>;
export declare const messageUpdateSchema: z.ZodObject<{
status: z.ZodEnum<{
NEW: "NEW";
READ: "READ";
ARCHIVED: "ARCHIVED";
}>;
}, z.core.$strip>;
export interface ContactMessageDto {
id: number;
name: string;
org: string;
phone: string;
message: string;
status: MessageStatus;
createdAt: string;
}
export interface MediaDto {
id: number;
url: string;
alt: string;
mime: string;
size: number;
width: number | null;
height: number | null;
originalName: string;
createdAt: string;
}
export declare const mediaUpdateSchema: z.ZodObject<{
alt: z.ZodDefault<z.ZodString>;
}, z.core.$strip>;
export interface Paginated<T> {
items: T[];
total: number;
page: number;
pageSize: number;
}
export interface DashboardCategoryStat {
id: number;
name: string;
count: number;
}
export interface DashboardTrendDay {
date: string;
dayName: string;
messages: number;
}
export interface DashboardDto {
categories: number;
products: number;
draftProducts: number;
newMessages: number;
media: number;
recentMessages: ContactMessageDto[];
recentActivity: {
id: number;
action: string;
entity: string;
summary: string;
user: string | null;
createdAt: string;
}[];
categoryStats: DashboardCategoryStat[];
messageBreakdown: {
new: number;
read: number;
archived: number;
total: number;
};
sectionsSummary: {
total: number;
visible: number;
hidden: number;
};
trend: DashboardTrendDay[];
}
//# sourceMappingURL=admin.d.ts.map