---
title: Yeni ürün ekleme
description: Uygulamanız üzerinden ikas Admin API ile mağazaya yeni ürün ekleyin.
---

Ürün eklemek için uygulama sayfasındaki **Add Product** butonuna tıklayın.

![Yeni ürün ekleme modal'ı](https://builders.ikas.com/media/ikas-dev/add-product-modal-c1f37424c598a2df94fd334c14a6b8cc.jpg)

<Callout type="warn" title="Gerekli scope">
`product_created` scope'a eklenmiş olmalıdır.
</Callout>

- Önce `pages/api` klasörü içinde `ikas` adında bir klasör oluşturun (daha önce oluşturmadıysanız).
- Ardından `pages/api/ikas` klasörü içinde `add-product.ts` adında bir dosya oluşturun.

Dosya yapınız şu şekilde olmalıdır:

```txt
pages/
  api/
    ikas/
      add-product.ts
```

Artık API'mizi yazmaya hazırız. `add-product.ts` dosyasını açın ve aşağıdaki kodu yapıştırın.

```typescript title="File: pages/api/ikas/add-product.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { Product, ProductTypeEnum } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type AddProductApiRequest = {
  name: string;
  sellPrice: number;
  discountPrice?: number;
};

export type AddProductApiResponse = Partial<Product>;

const router = createRouter<NextApiRequest, NextApiResponse<AddProductApiResponse | ApiErrorResponse>>();

/**
 * This api creates simple product on ikas with name, sellPrice and discountPrice
 */
router.use(ensureLoggedIn).post(async (req, res) => {
  try {
    const data = req.body as AddProductApiRequest;
    const token = await RedisDB.token.get(req.user!.authorizedAppId);
    if (token) {
      const ikas = getIkas(token);
      const productsRes = await ikas.adminApi.mutations.saveProduct({
        variables: {
          input: {
            name: data.name,
            type: ProductTypeEnum.PHYSICAL,
            variants: [
              {
                prices: [
                  {
                    discountPrice: data.discountPrice,
                    sellPrice: data.sellPrice,
                  },
                ],
              },
            ],
          },
        },
      });

      if (productsRes.isSuccess && productsRes.data) res.status(200).json(productsRes.data);
    }
    res.status(400).json({ statusCode: 400, message: 'Bad Request' });
  } catch (err: any) {
    res.status(500).json({ statusCode: 500, message: err.message });
  }
});

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

### `api-requests.ts` Dosyasını Güncelleme

Client tarafında kullanabilmek için API'mizi `ApiRequests` objesine eklememiz gerekiyor.

- `api-requests.ts` dosyasını açın ve `ApiRequests` objesini aşağıdaki kodla güncelleyin:

```typescript title="File: lib/api-request.ts"
export const ApiRequests = {
  ikas: {
    addProduct: (data: AddProductApiRequest, token: string) =>
      makePostRequest<AddProductApiResponse>({ url: '/api/ikas/add-product', data, token }),
  },
};
```

`ApiRequests` objesine ürün ekleme fonksiyonunu ekliyoruz. Bu fonksiyon, API'ye POST isteği göndermek için kullanılır.

Örneğin Dashboard sayfasından ürün eklemek istediğimizi varsayalım. Bunun için `onSaveProduct` adında bir fonksiyon oluşturuyor ve bu fonksiyonda `api-requests` dosyasına eklediğimiz kodu çağırıyoruz.

```typescript title="File: app/dashboard/page.tsx"
const onSaveProduct = async (event: FormEvent<HTMLFormElement>) => {
  event.preventDefault();
  try {
    if (token) {
      const res = await ApiRequests.ikas.addProduct(newProduct, token);
      if (res.status == 200 && res.data) {
        setNewProduct({ name: '', sellPrice: 0 });
        toggleModal();
        await loadProducts(1);
      }
    }
  } finally {
  }
};
```

### Kodun Açıklaması

- `AddProductApiRequest`, API'ye gönderdiğimiz verinin type'ıdır. Bu örnekte API'ye ürün verisini gönderiyoruz.
- `AddProductApiResponse`, API'den aldığımız verinin type'ıdır. Bu örnekte API'den ürün verisini alıyoruz.
- `handler` fonksiyonunda önce kullanıcının oturum açıp açmadığını kontrol ediyoruz. Oturum açıksa token'ı RedisDB'den alıp ikas API'ye gönderiyoruz. Ardından ürünü API üzerinden oluşturup client'a döndürüyoruz.
