Generieren Sie Onboarding-Leitfäden, Architekturkarten und Live-Metriken. Verwandeln Sie Ihren Legacy-Code sofort in eine übersichtliche Wissensdatenbank.
Dokumentieren Sie Projekte, die mit erstellt wurden
Wir erledigen die schwere Arbeit asynchron. Sie erhalten das Ergebnis einfach sofort.
Alles, was Sie brauchen, um Ihre Codebasis in eine klare, aktuelle Dokumentation umzuwandeln.
Integrieren Sie es direkt in Ihre CI/CD-Pipeline oder führen Sie es lokal mit einem einzigen Befehl aus.
Verfolgen Sie den Umfang und die Qualität der Dokumentation im Laufe der Zeit. Identifizieren Sie undokumentierte Module sofort.
Wir raten nicht nur. Wir analysieren den AST, um Ihre Codestruktur genau zu verstehen.
Ihr Code trainiert niemals unsere Modelle. SOC2-Typ-II-konforme Infrastruktur.
Exportieren Sie nach Markdown, PDF, Notion oder stellen Sie es automatisch als statische Site bereit.
Verfolgen Sie technische Schulden und identifizieren Sie sie
Busfaktor
1.2Kritisches Risiko: Modul „auth/core“.
Wartbarkeit
A+Für Open Source
Kostenlos startenFür professionelle Entwickler
Gehen Sie zum ProfiFür Ingenieurteams
Kontaktieren Sie den VertriebBeginnen Sie noch heute mit der Nutzung von Doxynix
export async function processSub(uId: string, plan: string) {
const user = await db.user.findById(uId);
if (!user.isActive) throw new Error("403");
if (user.sub === plan) return null;
const price = PRICING[plan];
// Charge the user
await stripe.charges.create({
amount: price * 100,
currency: 'usd',
customer: user.stripeId
});
await db.user.update(uId, { sub: plan, status: 'active' });
await email.sendWelcome(user.email, plan);
return true;
}/**
* Upgrades user subscription and handles payment processing.
*
* @description
* 1. Verifies user status (must be active).
* 2. Deduplicates requests (returns null if already on plan).
* 3. Charges card via Stripe and updates local DB.
*
* @param {string} uId - Internal user UUID.
* @param {string} plan - Target plan ID (e.g., 'PRO_YEARLY').
* @throws {Error} "403" if user is suspended/inactive.
* @returns {Promise<boolean|null>} True on success, null if no change needed.
*
* @example
* try {
* await processSub("user_123", "ENTERPRISE");
* } catch (err) {
* logger.error("Payment failed", err);
* }
*/
export async function processSub(uId: string, plan: string) {
const user = await db.user.findById(uId);
if (!user.isActive) throw new Error("403"); // User suspended
if (user.sub === plan) return null; // Already subscribed
const price = PRICING[plan];
// Charge the user
await stripe.charges.create({
amount: price * 100, // Convert to cents
currency: 'usd',
customer: user.stripeId
});
// Update db and send email
await db.user.update(uId, { sub: plan, status: 'active' });
await email.sendWelcome(user.email, plan);
return true;
}Von der Übersicht auf hoher Ebene bis zur Byte-Manipulation auf niedriger Ebene. Wir generieren jedes Format, das Ihr Team benötigt.
Legen Sie eine einfache Konfigurationsdatei in Ihrem Root ab. Wir kümmern uns automatisch um Parsing, Token-Limits und Prompt Engineering.
{
"project": "my-awesome-saas",
"entry": ["src/**/*.ts"],
"exclude": ["**/*.spec.ts"],
"output": {
"modes": ["onboarding", "technical", "migration-guide"],
"metrics": true,
"format": "markdown",
"path": "./docs"
},
"metrics": ["complexity", "bus-factor"]
}