> For the complete documentation index, see [llms.txt](https://kilavuz.cubicl.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kilavuz.cubicl.io/api-entegrasyonu/projeler.md).

# Projeler

Projeler bir kullanıcı grubu olarak oluşturulur. Bu nedenle `group` ve `project` kavramları API'da aynı şeyi temsil etmektedir.

## Uç Noktaları

### Projeleri Getir

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

#### Query Parameters

| Name            | Type    | Description                                                                                                                                                                                  |
| --------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| parent          | string  | <p>Üst projenin ID'si.</p><p></p><p>Bu değer ayarlanmazsa kurumdaki ana proje getirilir. </p>                                                                                                |
| recursive       | boolean | <p><code>false</code> : sadece 1. seviye alt projeleri de getirir.</p><p><code>true</code> : tüm seviyelerdeki alt projeleri de getirir.</p><p><br>Varsayılan değer : <code>false</code></p> |
| onlyNonArchived | boolean | <p><code>false</code> : Arşivlenmiş projeleri de getirir.</p><p><code>true</code> : Sadece arşivlenmemiş olanları getirir.</p><p><br>Varsayılan değer : <code>true</code></p>                |

{% tabs %}
{% tab title="200: OK Proje listesi" %}

```javascript
Project[]
```

{% endtab %}
{% endtabs %}

### ID'ye Göre Proje Getir

<mark style="color:$primary;">`GET`</mark> `https://cubicl.io/api/v1/groups/:id`

Verilen ID'ye sahip projeyi getirir. Kullanıcının erişemediği veya başka kuruma ait projeler için 403 döner.

**Path Parameters**

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

{% tabs %}
{% tab title="200: OK Proje detayları" %}

```javascript
Project
```

{% endtab %}

{% tab title="403: Forbidden Proje görüntüleme izniniz yok." %}

```javascript
{ code: 4 }
```

{% endtab %}

{% tab title="404: Not Found Proje bulunamadı" %}

{% endtab %}
{% endtabs %}

## Veriler

### Proje

```typescript
type Project = {
    _id: string;
    name: string;
    // Projelerin birden çok üst projesi olabilir. Ana projenin bir üst projesi yoktur.
    parents: string[] | null;
    // "yönetici" rolüne sahip kullanıcıların ID'leri
    admins: string[];
    // "üye" rolüne sahip kullanıcıların ID'leri
    members: string[];
    // Alt projelerin ID'leri
    groups: string[];
    // Projeye ait Gantt Çizelgesinin ID'si
    gantt: string;
    private: boolean;
    // Projenin ait olduğu kurumun ID'si
    orgId: string;
    // Proje no
    no: string;
    // Proje tipi. Cubicl'ın varsayılan 5 tipinden biri veya özel tanımlanmış değer
    // Varsayılan tipler:
		// pt-client: Müşteri,
		// pt-design: Tasarım,
		// pt-randd: ARGE,
		// pt-sales: Satış,
		// pt-standard: Standart
    typeId: string;
    status: "waiting" | "active" | "completed";
    priority: "low" | "medium" | "high" | "critical";
    icon: string;
    // Tahmini bitiş tarihi
    estimatedFinish: Date | null;
    // Çalışma günleri. Pazartesiden Pazara hangi günlerin seçili olduğunu gösterir.
    // Örneğin Pazartesi-Cuma aktif ise [true, true, true, true, true, false, false]
    workDays: boolean[];
    // Çalışma saatlerini saniye cinsinden içeren nesne
    workHours: {
        start: number;
        end: number;
    };
    // Çalışma saatlerini görev formuna otomatik olarak yerleştirmenin ayarı
    workTimesActive: boolean;    
    // Görev aşamaları tanımları. Yalnızca aşamalar özelleştirildiğinde mevcuttur.
    // Daha fazla bilgi için Görev Aşamaları bölümünü okuyun.
    taskStates?: TaskState[];
    // Projede ayarlanan izinler. Yalnızca proje izinleri özelleştirildiğinde mevcuttur.
    // Daha fazla bilgi için İzinler bölümünü okuyun.
    perms: {
        members: PermissionLevels,
        everybody: PermissionLevels,
        // Kullanıcı ID'lerinin ve izin seviyelerinin bulunduğu nesne
        users?: {
            [userId: string]: PermissionLevels,
        }
    };
    // Sadece arşivlenmiş projelerde mevcuttur.
    archivedAt?: Date;
    // Proje için müşteri seçilmişse mevcuttur.
    customerId?: string;
    // Görev ek alanları. Yalnızca ek alan tanımlanmışsa mevcuttur.
    // Daha fazla bilgi için Görev Ek Alanları bölümünü okuyun.
    customTaskFields?: CustomTaskField[];
    // Ayarlar > Detaylar > Görevin Gösterilecek Bilgileri kartındaki bilgiler
    taskShownFields?: {
        list: {
            name: string;
            visible: string;
            // Eğer bu nesne bir ek alana aitse onun id'sini tutar.
            customFieldId?: string;
        };
        kanban: {
            name: string;
            visible: string;
            // Liste görünümünde 1'den fazla ek alan seçilebilir. Ama Kanban görünümünde
            // tek 1 ek alan seçilebilir.
            // Bu liste tüm ek alanları içerir ama "selected = true" olan 1 alan vardır.
            options?: {
                name: string;
                selected: boolean;
                value?: string;
            }[];
        };
    };
    // Projeler sayfasında eklenmiş "proje ek alanına" ait tutulan değerler.
    // Ek alan tanımlanmış ve doldurulmuş ise mevcuttur.
    customFieldValues?: {[fieldId: string]: any};
    // Görevlerin otomatik arşivlenme ayarı
    autoArchivingEnabled: boolean;
    // Görev formunda "tahmini süre" girdisini gösterme ayarı
    estimatedTimeEnabled: boolean;
    // Tarihi olan görevlerin otomatik Gantt Çizelgesine eklenme ayarı
    // none: Hiçbirini ekleme,
    // only-with-dates: Sadece başlangıç ve bitiş tarihi olanları ekle,
    // all: Hepsini ekle. Görevin tarihi yoksa 1 günlük otomatik tarih ataması yapılır.
    autoAddingGanttChartSettings: "none" | "only-with-dates" | "all",
    // Destek Talepleri için otomatik aşama değiştirme ayarı.
    autoChangeSupportRequestState?: {
        // Talep oluşturulduğunda görev aktifleştirilsin mi?
        active: boolean;
        // Yeni görev hangi aşamaya alınsın?
        activeState: string | null;
        // Mevcut görev tamamlanmışken müşteriden yanıt gelirse aktifleştirilsin mi?
        completed: boolean;
        // Tamamlanmış görev hangi aşamaya alınsın?
        completedState: string | null;
        // Mevcut görev arşivlenmişken müşteriden yanıt gelirse aktifleştirilsin mi?
        restoreFromArchive: boolean;
        // Arşivlenmiş görev hangi aşamaya alınsın?
        restoreState: string | null;
    };
    // Proje açıldığında varsayılan olarak hangi sayfanın gösterileceğini tutar.
    defaultPage?: string;
    // Görevler sayfası açıldığında hangi görünümün gösterileceğini tutar.
    defaultTaskView?: string;
    // Varsa gizlenmiş sayfalar
    hiddenPages: string[];
}
```

### Görev Aşamaları

```typescript
type TaskState = {
    name: string;
    type: 'waiting' | 'active' | 'completed' | 'suspended';
    color: string; // Hex renk kodu
    textColor: string; // Hex renk kodu
    // Bir görev oluştururken aşama belirtilmemişse varsayılan olarak hangi
    // aşamanın tanımlanacağını belirtir.
    isDefault?: boolean;
}
```

Projede görev durumları özelleştirilmişse, "taskStates" özelliği, görev aşamaları tanımlanmış nesnelerinin listesini tutar. Aksi takdirde, aşağıdaki varsayılan değerler kullanılır.

```typescript
[
	{
		name : 'cb_waiting',
		type : 'waiting',
		color : '#ff7700',
		textColor : '#fff',
		isDefault : true
	},
	{
		name : 'cb_active',
		type : 'active',
		color : '#449900',
		textColor : '#fff'
	},
	{
		name : 'cb_completed',
		type : 'completed',
		color : '#dddddd',
		textColor : '#333'
	},
	{
		name : 'cb_suspended',
		type : 'suspended',
		color : '#1a7bb9',
		textColor : '#fff'
	}
]
```

### İzinler

İzinler aşağıdaki sırayla 4 adımda ayarlanır ve kontrol edilir:

1. **Yöneticiler:** Yöneticiler, projedeki tüm eylemleri gerçekleştirebilir. Bir yönetici, alt projelerin üyesi olmasa bile tüm alt projelerde de yönetici ayrıcalığına sahiptir.
2. **Kullanıcı İzinleri:** İzinler bir kullanıcı için tanımlandıysa, aşağıdaki adımlar kontrol edilmeden kullanılacaktır. Kullanıcı izinleri `perms.users` özelliğinde tanımlanır.
3. **Proje Üyeleri:** Proje üyeleri ve diğer kullanıcılar için genel izinler belirlenir. Kullanıcı bir proje üyesiyse, bir sonraki adım kontrol edilmeden bu izinler kullanılacaktır.
4. **Proje Haricindeki Üyeler:** Bu izin düzeyi `perms.everybody` özelliğinde tanımlaır.

Projedeki her ana özellik için izin seviyeleri ayrı ayrı belirlenir.

```typescript
type FeaturePermLevels = {
    // Görevler, Takvim ve Zaman Çizelgesi sayfalarında kullanılır
    tasks: 'none' | 'view' | 'contribute' | 'edit' | 'manage',
    files: 'none' | 'view' | 'edit' | 'manage',
    gantt: 'none' | 'view' | 'edit',
    reports: 'none' | 'view',
}
```

### Görev Ek Alanları

Burada tanımlanan alanlar projede açılan görev formlarına eklenir. Bu sayede projede oluşturulan görevlere ek bilgi ekleyebilirsiniz. Formda doldurulan bu alanlar görev detay sayfasında sağ kısımda "Ek Alanlar" başlığı altında listelenecektir.

<pre class="language-typescript"><code class="lang-typescript"><strong>type CustomTaskFields = {
</strong>    id: string;
    name: string;
    type: string;
    // Arayüzden ek alanı silmek bu değeri true yapar.
    // Çünkü bu alan bir görevde doldurulmuşsa orada gösterilmeye devam etmesi gerekir.
    deleted: boolean;
}
</code></pre>

<br>
