# Dosyalar

Bu doküman aşağıdaki uç noktalarını içerir:

1. Dosyaları uygulamanın farklı bölümlerine yükleme
2. Projelerde dosyalar özelliği

## Yükleme ve İndirme

Dosyalar görevlere, görev aktivitelerine, sohbet mesajlarına, müşterilere ve dosyalar sayfasına yüklenebilir. Tüm bu işlemler için öncelikle dosyayı yüklemek için istek göndermeniz gerekmektedir. Yükleme tamamlandıktan sonra, sunucu yüklenen dosyanın ID'sini döndürür. Ardından, bu ID değerini diğer API uç noktalarında kullanabilirsiniz.

## Dosya Yükle

<mark style="color:green;">`POST`</mark> `https://cubicl.io/api/v1/files/upload`

Daha sonra kullanmak üzere bir dosya yükler. Kaydedilen dosyanın ayrıntılarını döndürür.

Diğer API adreslerinden farklı olarak, bu adres `multipart/form-data` isteğini kabul eder. `Content-Length` başlığı form verisinin boyutuna ayarlanmalıdır.

4 GB boyutuna kadar dosya yüklenebilir.

#### Request Body

| Name | Type | Description                |
| ---- | ---- | -------------------------- |
| file | blob | Dosya içeriği ve dosya adı |

{% tabs %}
{% tab title="200: OK Dosya Ayrıntıları" %}

```javascript
File
```

{% endtab %}

{% tab title="400: Bad Request Geçersiz parametreler" %}

```javascript
// Hata detayları
```

{% endtab %}

{% tab title="403: Forbidden Depolama alanı dolu" %}

```javascript
{
    code: 204,
    // Bayt cinsinden boyut
    totalCapacity: number,
    totalSize: number,
}
```

{% endtab %}
{% endtabs %}

## İndirme Bağlantısı Al

<mark style="color:blue;">`GET`</mark> `https://cubicl.io/api/v1/files/:id/url`

Cubicl'e yüklenen dosyalara izinsiz erişim sağlanamaz.

Bir dosyayı indirmek için bir indirme bağlantısı istemeniz gerekir.

Ardından, dosyayı indirmek için döndürülen bağlantıya bir HTTP isteği gönderebilirsiniz. Linklerin süresi 5 dakikadır. Bundan sonra, başka bir bağlantı almanız gerekir.

#### Path Parameters

| Name                                 | Type   | Description |
| ------------------------------------ | ------ | ----------- |
| id<mark style="color:red;">\*</mark> | string | Dosya ID'si |

{% tabs %}
{% tab title="200: OK URL'yi JSON formatında indirin" %}

```javascript
string
```

{% endtab %}
{% endtabs %}

## Dosya Sayfası Uç Noktaları

Bu uç noktalar, bir projenin ve bir müşterinin Dosyalar sayfasındaki dosya ve klasörleri görüntülemenize, oluşturmanıza, düzenlemenize ve silmenize olanak tanır.

Cubicl, hem projeler hem de müşteriler için dosya ve dizinleri düzenlemenizi sağlar.

Dosyalar sayfasının yapısı, bir bilgisayardaki veya Google Drive gibi diğer dosya depolama hizmetlerindeki dosya sistemine benzer. İç içe geçmiş dosya ve dizin düğümlerinden oluşur. En üstte bir kök dizin düğümü bulunur. Dizinler alt dosya ve dizin düğümlerini tutar. Dosya düğümleri, [**Dosya Yükle**](#dosya-yuekle) uç noktasından döndürülen dosya kaydıyla aynı değildir. Dosya düğümü kayıtları, dosya kayıtlarına işaret eder.

## Düğümleri Getir

<mark style="color:blue;">`GET`</mark> `https://cubicl.io/api/v1/file-system-nodes`

Bir dizindeki dosya ve dizin düğümlerini alır. İstek, 'group' veya 'customer' parametreleri ile gönderilmelidir.

#### Query Parameters

| Name     | Type   | Description                                                                                                                  |
| -------- | ------ | ---------------------------------------------------------------------------------------------------------------------------- |
| group    | string | Proje ID'si                                                                                                                  |
| customer | string | Müşteri ID'si                                                                                                                |
| parent   | string | <p>Aranacak dizinin ID'si</p><p>Kök dizin için 'null' kullanın. </p><p></p><p>Belirtilmezse, tüm dizinlerde arama yapar.</p> |
| search   | string | Dosya ve dizin adlarında aranacak metin                                                                                      |

{% tabs %}
{% tab title="200: OK Dosya sistemi düğümlerinin listesi" %}

```javascript
FileSystemNode[]
```

{% endtab %}
{% endtabs %}

## Dosya Ekle

<mark style="color:green;">`POST`</mark> `https://cubicl.io/api/v1/file-system-nodes/files`

Yüklenen dosyalar için dosya düğümleri oluşturur.

Dosyalar, bir projenin veya müşterinin dosyalar sayfasında oluşturulabilir. `group` veya `customer` parametresi ayarlanmalıdır.

#### Request Body

| Name                                     | Type           | Description                                                               |
| ---------------------------------------- | -------------- | ------------------------------------------------------------------------- |
| group                                    | string         | Proje ID'si, eğer dosya bir projenin dosyalar sayfasında oluşturuluyorsa. |
| customer                                 | string         | Müşteri ID'si, eğer dosya müşterinin dosya sayfasında oluşturuluyorsa.    |
| parent<mark style="color:red;">\*</mark> | string \| null | <p>Üst dizin ID'si</p><p>Üst dizin kök dizin ise 'null' olmalı.</p>       |
| files<mark style="color:red;">\*</mark>  | string         | Dosyaların ID listesi                                                     |

{% tabs %}
{% tab title="200: OK Dosya sistemi düğüm listesi" %}

```javascript
FileSystemNode[]
```

{% endtab %}
{% endtabs %}

## Dizin Ekle

<mark style="color:green;">`POST`</mark> `https://cubicl.io/api/v1/file-system-nodes/directories`

Bir dizin düğümü oluşturur.

Dosyalar, bir projenin veya müşterinin dosyalar sayfasında oluşturulabilir. `group` veya `customer` parametresi ayarlanmalıdır.

#### Request Body

| Name                                   | Type           | Description                                                               |
| -------------------------------------- | -------------- | ------------------------------------------------------------------------- |
| group                                  | string         | Proje ID'si, eğer dosya bir projenin dosyalar sayfasında oluşturuluyorsa. |
| customer                               | string         | Müşteri ID'si, eğer dosya müşterinin dosya sayfasında oluşturuluyorsa.    |
| parent                                 | string \| null | <p>Üst dizin ID'si</p><p>Üst dizin kök dizin ise 'null' olmalı.</p>       |
| name<mark style="color:red;">\*</mark> | string         | Dizin adı                                                                 |

{% tabs %}
{% tab title="200: OK Dosya sistemi düğümü" %}

```javascript
FileSystemNode
```

{% endtab %}
{% endtabs %}

## Düğümleri Sil

<mark style="color:red;">`DELETE`</mark> `https://cubicl.io/api/v1/file-system-nodes`

Bir projeden veya müşteriden dosya ve dizin düğümlerini siler.

Dosya düğümleri, dosya kayıtları ve yüklenen dosya ile birlikte silinir.

Farklı projelerden veya istemcilerden birden çok düğüm, tek bir istekte silinemez.

#### Request Body

| Name                                    | Type      | Description              |
| --------------------------------------- | --------- | ------------------------ |
| nodes<mark style="color:red;">\*</mark> | string\[] | Düğüm ID'lerinin listesi |

{% tabs %}
{% tab title="204: No Content İçerik yok" %}

{% endtab %}
{% endtabs %}

## Veriler

#### Dosya

```typescript
type File = {
    _id: string;
    name: string;
    // Dosya desteklenen bir resimse, küçük resim URL'ine ait bağlantı
    thumbnail?: string;
    // Dosya Google Drive'dan eklenmişse
    google?: {
        id: string;
        extension: string;
        webViewLink: string;
        mimeType: string;
    },
    // Dosya Dropbox'tan eklenmişse
    dropbox?: {
        id: string;
        webViewLink: string;
    }
}
```

#### File System Node

```typescript
type FileSystemNode = {
    _id : string;
    // Üst dizin ID'si. Üst dizin, kök dizin olduğunda 'null' olmalıdır.
    parent: string | null;
    group?: string; // Proje ID'si
    customer?: string; // Müşteri ID'si
    type: 'f' | 'd'; // Tip > f : dosya, d : dizin
    file: File | null; // Tip 'f' ise dosya, d ise 'null' olmalıdır.
    // Tip 'd' olduğunda ayarlanmalıdır. Tip 'f' ise, 'file' alanından adı alın.
    name?: string;
    createdAt: number;
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kilavuz.cubicl.io/api-entegrasyonu/dosyalar.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
