# 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 tüm projeler gösterilir.</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> |

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

```javascript
Project[]
```

{% endtab %}
{% endtabs %}

## Veriler

#### Projeler

```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 grupların ID'leri
    groups: string[];
    // 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,
        }
    }
}
```

#### 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 : '#f39c12',
		textColor : '#fff',
		isDefault : true
	},
	{
		name : 'cb_active',
		type : 'active',
		color : '#2ecc71',
		textColor : '#fff'
	},
	{
		name : 'cb_completed',
		type : 'completed',
		color : '#d8d8d8',
		textColor : '#333'
	},
	{
		name : 'cb_suspended',
		type : 'suspended',
		color : '#7d5fff',
		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',
}
```


---

# 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/projeler.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.
