Import source: backend/src/lib/serializers

Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
arsam
2026-09-18 23:09:20 +03:30
parent 67fe90ac43
commit 965661d26a
+150
View File
@@ -0,0 +1,150 @@
import type {
Database,
DnsRecord,
Domain,
Mailbox,
Permission,
ResourceUsage,
Server,
Session,
User,
UserPermission,
Website,
} from "@prisma/client";
export function iso(value: Date | null | undefined) {
return value?.toISOString() ?? new Date(0).toISOString();
}
export function toRuntime(value: Website["runtime"]) {
if (value === "Node_js") return "Node.js";
if (value === "Reverse_proxy") return "Reverse proxy";
if (value === "Custom_service") return "Custom service";
return value;
}
export function fromRuntime(value: string | undefined) {
if (!value) return "PHP";
if (value === "Node.js") return "Node_js";
if (value === "Reverse proxy") return "Reverse_proxy";
if (value === "Custom service") return "Custom_service";
return value;
}
export function toPermission(value: Permission) {
return value.replaceAll("_", ":");
}
export function fromPermission(value: string) {
return value.replaceAll(":", "_") as Permission;
}
export function userDto(user: User & { permissions?: UserPermission[] }) {
return {
id: user.id,
name: user.name,
email: user.email,
role: user.role,
permissions: (user.permissions ?? []).map((entry) => toPermission(entry.permission)),
lastLogin: iso(user.lastLogin),
avatarInitials: user.avatarInitials,
twoFactorEnabled: user.twoFactorEnabled,
};
}
export function websiteDto(website: Website) {
return {
id: website.id,
name: website.name,
domain: website.domain,
runtime: toRuntime(website.runtime),
status: website.status,
ssl: website.ssl,
repository: website.repository ?? undefined,
environment: website.environment,
cpuLimit: website.cpuLimit,
memoryLimit: website.memoryLimit,
lastDeployment: iso(website.lastDeployment),
};
}
export function domainDto(domain: Domain) {
return {
id: domain.id,
name: domain.name,
type: domain.type,
documentRoot: domain.documentRoot,
sslStatus: domain.sslStatus,
dnssec: domain.dnssec,
propagation: domain.propagation,
};
}
export function dnsRecordDto(record: DnsRecord) {
return {
id: record.id,
name: record.name,
ttl: record.ttl,
class: "IN" as const,
type: record.type,
record: record.record,
priority: record.priority ?? undefined,
warning: record.warning ?? undefined,
};
}
export function serverDto(server: Server) {
return {
id: server.id,
name: server.name,
hostname: server.hostname,
os: server.os,
panelVersion: server.panelVersion,
load: [server.load1, server.load5, server.load15] as [number, number, number],
ipAddress: server.ipAddress,
status: server.status,
location: server.location,
};
}
export function databaseDto(database: Database & { users?: Array<{ username: string }> }) {
return {
id: database.id,
name: database.name,
engine: database.engine,
size: Number(database.size),
users: (database.users ?? []).map((entry) => entry.username),
tables: database.tables,
connections: database.connections,
lastBackup: iso(database.lastBackup),
};
}
export function mailboxDto(mailbox: Mailbox & { domain?: Domain }) {
return {
id: mailbox.id,
address: mailbox.address,
domain: mailbox.domain?.name ?? mailbox.address.split("@")[1] ?? "",
used: Number(mailbox.used),
quota: Number(mailbox.quota),
lastLogin: iso(mailbox.lastLogin),
forwarding: mailbox.forwarding,
spamScore: mailbox.spamScore,
authStatus: mailbox.authStatus,
};
}
export function resourceUsageDto(resource: ResourceUsage) {
return {
key: resource.key,
label: resource.label,
used: resource.used,
limit: resource.limit,
unit: resource.unit,
status: resource.status,
};
}
export type SessionContext = Session & {
user: User & { permissions: UserPermission[]; accounts: Array<{ accountId: string }> };
};