> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

# יצירת Functions

> פונקציות Base44 הן פונקציות backend serverless שרצות על Deno. הן מוגדרות מקומית בפרויקט שלך ונפרסות ל-Base44 backend.

<Warning>
  דף זה הוא חלק ממיומנות של סוכן קידוד AI ונכתב לסוכנים, לא לבני אדם. לתיעוד Base44 הקריא לבני אדם, ראה את [תיעוד המפתחים](/developers).
</Warning>

# Creating Functions

פונקציות Base44 הן פונקציות backend serverless שרצות על Deno. הן מוגדרות מקומית בפרויקט שלך ונפרסות ל-Base44 backend.

## תיקיית Functions

כל הגדרות הפונקציות חייבות להיות ממוקמות בתיקיית `base44/functions/` בפרויקט שלך. הפונקציה הפשוטה ביותר היא תיקייה עם קובץ `entry.ts` או `entry.js` בתוכה.

מבנה לדוגמה:

```
my-app/
  base44/
    functions/
      process-order/
        entry.ts
      send-notification/
        entry.ts
```

## איך ליצור פונקציה

1. צור תיקייה חדשה ב-`base44/functions/` עם שם הפונקציה שלך (השתמש ב-kebab-case)
2. צור `entry.ts` (או `entry.js`) באותה תיקייה
3. פרוס את הפונקציה באמצעות ה-CLI

## גילוי פונקציות

ה-CLI מגלה פונקציות מקבצי `entry.ts` או `entry.js`. תיקייה שמכילה אחד מהקבצים האלה היא פונקציה:

```
base44/
  functions/
    process-order/
      entry.ts
```

שם הפונקציה הוא הנתיב משורש ה-functions לאותה תיקייה. לדוגמה:

| קובץ                                       | שם פונקציה       |
| ------------------------------------------ | ---------------- |
| `base44/functions/process-order/entry.ts`  | `process-order`  |
| `base44/functions/orders/process/entry.ts` | `orders/process` |

כללים:

* `entry.ts` או `entry.js` חייבים להיות בתוך תת-תיקייה בעלת שם, לא ישירות ב-`base44/functions/`
* כל קבצי `*.js`, `*.ts`, ו-`*.json` תחת תיקיית הפונקציה נכללים בעת פריסה
* נתיבי פונקציה עם נקודה בכל קטע נתיב מתעלמים

## קובץ Entry Point

הפונקציות רצות על Deno וחייבות לייצא באמצעות `Deno.serve()`. השתמש בקידומת `npm:` עבור חבילות npm.

```typescript theme={null}
import { createClientFromRequest } from "npm:@base44/sdk";

Deno.serve(async (req) => {
  // Get authenticated client from request
  const base44 = createClientFromRequest(req);
  
  // Parse input
  const { orderId, action } = await req.json();
  
  // Your logic here
  const order = await base44.entities.Orders.get(orderId);
  
  // Return response
  return Response.json({
    success: true,
    order: order
  });
});
```

### אובייקט Request

הפונקציה מקבלת אובייקט Deno `Request` סטנדרטי:

* `req.json()` - נתח גוף JSON
* `req.text()` - קבל גוף טקסט גולמי
* `req.headers` - גש לכותרות בקשה
* `req.method` - שיטת HTTP

### אובייקט Response

החזר באמצעות `Response.json()` לתגובות JSON:

```typescript theme={null}
// Success response
return Response.json({ data: result });

// Error response with status code
return Response.json({ error: "Something went wrong" }, { status: 400 });

// Not found
return Response.json({ error: "Order not found" }, { status: 404 });
```

## דוגמה מלאה

### מבנה תיקייה

```
base44/
  functions/
    process-order/
      entry.ts
```

### entry.ts

```typescript theme={null}
import { createClientFromRequest } from "npm:@base44/sdk";

Deno.serve(async (req) => {
  try {
    const base44 = createClientFromRequest(req);
    const { orderId } = await req.json();
    
    // Validate input
    if (!orderId) {
      return Response.json(
        { error: "Order ID is required" },
        { status: 400 }
      );
    }
    
    // Fetch and process the order
    const order = await base44.entities.Orders.get(orderId);
    if (!order) {
      return Response.json(
        { error: "Order not found" },
        { status: 404 }
      );
    }
    
    return Response.json({
      success: true,
      orderId: order.id,
      processedAt: new Date().toISOString()
    });
    
  } catch (error) {
    return Response.json(
      { error: error.message },
      { status: 500 }
    );
  }
});
```

## שימוש בגישת Service Role

לפעולות ברמת אדמין, השתמש ב-`asServiceRole`:

```typescript theme={null}
import { createClientFromRequest } from "npm:@base44/sdk";

Deno.serve(async (req) => {
  const base44 = createClientFromRequest(req);
  
  // Check user is authenticated
  const user = await base44.auth.me();
  if (!user) {
    return Response.json({ error: "Unauthorized" }, { status: 401 });
  }
  
  // Use service role for admin operations
  const allOrders = await base44.asServiceRole.entities.Orders.list();
  
  return Response.json({ orders: allOrders });
});
```

## שימוש בסודות

גש למשתני סביבה שהוגדרו בלוח האפליקציה:

```typescript theme={null}
Deno.serve(async (req) => {
  // Access environment variables (configured in app settings)
  const apiKey = Deno.env.get("STRIPE_API_KEY");
  
  const response = await fetch("https://api.stripe.com/v1/charges", {
    headers: {
      "Authorization": `Bearer ${apiKey}`
    }
  });
  
  return Response.json(await response.json());
});
```

## מוסכמות מתן שמות

* **שם תיקייה**: השתמש ב-kebab-case (למשל, `process-order`, `send-notification`)
* **שם פונקציה**: מגיע מנתיב התיקייה תחת `base44/functions/`
  * תקף: `process-order`, `orders/process`, `send_notification`, `myFunction`
  * לא תקף: `process.order`, `send.notification.v2`
* **קובץ entry**: השתמש ב-`entry.ts` או `entry.js`

## פריסת פונקציות

לאחר יצירת הפונקציה שלך, פרוס אותה ל-Base44:

```bash theme={null}
npx base44 functions deploy
```

לפרטים נוספים על פריסה, ראה [functions-deploy.md](https://docs.base44.com/developers/skills/base44-cli/references/functions-deploy.md).

## הערות

* פונקציות רצות על Deno runtime, לא Node.js
* השתמש בקידומת `npm:` עבור חבילות npm (למשל, `npm:@base44/sdk`)
* השתמש ב-`createClientFromRequest(req)` כדי לקבל client שיורש את הקשר האימות של הקורא
* הגדר סודות דרך לוח האפליקציה עבור מפתחות API
* ודא לטפל בשגיאות בחסד ולהחזיר קודי סטטוס HTTP מתאימים

## טעויות נפוצות

| שגוי                                         | נכון                                    | למה                                      |
| -------------------------------------------- | --------------------------------------- | ---------------------------------------- |
| `base44/functions/myFunction.js` (קובץ יחיד) | `base44/functions/my-function/entry.ts` | פונקציות חייבות לחיות בתת-תיקייה בעלת שם |
| `base44/functions/entry.ts`                  | `base44/functions/my-function/entry.ts` | שם הפונקציה מגיע מנתיב תת-התיקייה        |
| `import { ... } from "@base44/sdk"`          | `import { ... } from "npm:@base44/sdk"` | Deno דורש קידומת `npm:` עבור חבילות npm  |
| תיקיית `MyFunction` או `myFunction`          | תיקיית `my-function`                    | השתמש ב-kebab-case לשמות תיקיות          |

<Note>דף זה תורגם באמצעות בינה מלאכותית. למידע המדויק והעדכני ביותר, עיין ב[גרסה האנגלית](/). </Note>
