tachybase_todo/docs/tr-TR/api/actions.md
altaytahsin ad4929e48b
Turkish language created for Docs. Belgeler için türkçe dil desteği (#1071)
* Turkish language created for Docs. Belgeler için türkçe dil desteği oluşturuldu.

* Turkish docs fix
2022-12-23 09:42:44 +08:00

11 KiB
Raw Blame History

Yerleşik ortak kaynak işlemleri

NocoBase, CRUD gibi yaygın olarak kullanılan veri kaynaklarının işlemleri için yerleşik işlem yöntemlerine sahiptir ve ilgili işlemleri veri tablosu kaynakları aracılığıyla otomatik olarak eşler.

Tüm işlem yöntemleri, kaynak sağlayıcı örneğine kaydedilir ve ayrıca standart Koa uyumlu ara yazılım işlevleridir ((ctx, next) => Promise<void>). Eylemin parametreleri, rota tarafından ayrıştırılır ve 'ctx.action' nesnesine eklenir ve sonraki parametre açıklamaları bu nesneyi temel alır.

Genellikle, yerleşik eylem yöntemini doğrudan çağırmaya gerek yoktur.Varsayılan eylem davranışını genişletmeniz gerektiğinde, özel eylem yönteminde varsayılan yöntemi çağırabilirsiniz.

Paket yapısı

İlişkili varlıklar aşağıdaki şekillerde tanıtılabilir:

import actions from '@nocobase/actions';

Tek Veri Kaynağı İşlemi

list()

Bir veri listesi alınması işlemine karşılık gelen URL GET /api/<resource>:list şeklindedir.

参数

parametre adı tür varsayılan değer ıklama
filter Filter - filtre parametresi
fields string[] - Çekilecek alanlar
except string[] - Çekilmeyecek alanlar
appends string[] - İlişkisel alanlar
sort string[] - Sıralama
page number 1 Sayfalandırma
pageSize number 20 Sayfa başına veri sayısı

Örnek

Bir veri listesini sorgulamak için bir arabirim sağlamanız gerektiğinde fakat varsayılan olarak JSON biçiminde çıktı almadığınızda, onu yerleşik varsayılan yönteme göre genişletebilirsiniz:

import actions from '@nocobase/actions';

app.actions({
  async ['books:list'](ctx, next) {
    ctx.action.mergeParams({
      except: ['content']
    });

    await actions.list(ctx, async () => {
      const { rows } = ctx.body;
      // JSON'u CSV çıktısına dönüştürün
      ctx.body = rows.map(row => Object.keys(row).map(key => row[key]).join(',')).join('\n');
      ctx.type = 'text/csv';

      await next();
    });
  }
});

İstek örneği, CSV biçimindeki dosyanın dönüşünü alacaktır:

curl -X GET http://localhost:13000/api/books:list

get()

Tek bir veri parçası almak için işlem URL'si GET /api/<resource>:get şeklindedir.

Parametre

parametre adı tür varsayılan değer ıklama
filterByTk number | string - birincil anahtarı filtrele
filter Filter - filtre parametresi
fields string[] - Çekilecek alanlar
except string[] - Çekilmeyecek alanlar
appends string[] - İlişkisel alanlar
sort string[] - Sıralama
page number 1 Sayfalandırma
pageSize number 20 Sayfa başı veri sayısı

Örnek

NocoBase'in yerleşik dosya yönetimi eklentisine dayanarak, istemci kaynak tanımlayıcılı bir dosya indirmeyi istediğinde dosya akışını döndürecek şekilde genişletilebilir:

import path from 'path';
import actions from '@nocobase/actions';
import { STORAGE_TYPE_LOCAL } from '@nocobase/plugin-file-manager';

app.actions({
  async ['attachments:get'](ctx, next) {
    ctx.action.mergeParams({
      appends: ['storage'],
    });

    await actions.get(ctx, async () => {
      if (ctx.accepts('json', 'application/octet-stream') === 'json') {
        return next();
      }

      const { body: attachment } = ctx;
      const { storage } = attachment;

      if (storage.type !== STORAGE_TYPE_LOCAL) {
        return ctx.redirect(attachment.url);
      }

      ctx.body = fs.createReadStream(path.resolve(storage.options.documentRoot?, storage.path));
      ctx.attachment(attachment.filename);
      ctx.type = 'application/octet-stream';

      await next();
    });
  }
});

İstek örneği, dosya akışının dönüşünü alacak

curl -X GET -H "Accept: application/octet-stream" http://localhost:13000/api/attachments:get?filterByTk=1

create()

Tek bir veri parçası oluşturma işleminin URL'si "POST /api/:create" şeklindedir.

Parametre

parametre adı tür varsayılan değer ıklama
values Object - oluşturulacak veriler

Örnek

Dosya yönetimi eklentisine benzer şekilde, yüklenen dosyaya ek olarak ikili içerikli veri oluşturma:

import multer from '@koa/multer';
import actions from '@nocobase/actions';

app.actions({
  async ['files:create'](ctx, next) {
    if (ctx.request.type === 'application/json') {
      return actions.create(ctx, next);
    }

    if (ctx.request.type !== 'multipart/form-data') {
      return ctx.throw(406);
    }

    // Dosya kaydetme işlemi yalnızca örnek olarak multer() kullanır ve tam mantığı temsil etmez
    multer().single('file')(ctx, async () => {
      const { file, body } = ctx.request;
      const { filename, mimetype, size, path } = file;

      ctx.action.mergeParams({
        values: {
          filename,
          mimetype,
          size,
          path: file.path,
          meta: typeof body.meta === 'string' ? JSON.parse(body.meta) : {};
        }
      });

      await actions.create(ctx, next);
    });
  }
});

İstek örneği; dosya tablosunda sıradan veriler oluşturabilir veya eklerle birlikte gönderebilirsiniz:

# Yalnızca normal veriler oluşturun
curl -X POST -H "Content-Type: application/json" -d '{"filename": "some-file.txt", "mimetype": "text/plain", "size": 5, "url": "https://cdn.yourdomain.com/some-file.txt"}' "http://localhost:13000/api/files:create"

# Eklerle birlikte gönder
curl -X POST -F "file=@/path/to/some-file.txt" -F 'meta={"length": 100}' "http://localhost:13000/api/files:create"

update()

Bir veya daha fazla veri parçasını güncellemek için kullanılan URL, "PUT /api/:update" şeklindedir.

Parametre

parametre adı tür varsayılan değer ıklama
filter Filter - filtre parametresi
filterByTk number | string - birincil anahtarı filtrele
values Object - güncellenecek veri değeri

Not: parametrelerdeki filter ve filterByTk en az bir öğe sağlar.

Örnek

"create()" örneğine benzer şekilde, güncellenmiş dosya olarak ikili içerik verilerini taşımak için de kullanılabilir.

import multer from '@koa/multer';
import actions from '@nocobase/actions';

app.actions({
  async ['files:update'](ctx, next) {
    if (ctx.request.type === 'application/json') {
      return actions.update(ctx, next);
    }

    if (ctx.request.type !== 'multipart/form-data') {
      return ctx.throw(406);
    }

    // Dosya kaydetme işlemi yalnızca örnek olarak multer() kullanır ve tam mantığı temsil etmez
    multer().single('file')(ctx, async () => {
      const { file, body } = ctx.request;
      const { filename, mimetype, size, path } = file;

      ctx.action.mergeParams({
        values: {
          filename,
          mimetype,
          size,
          path: file.path,
          meta: typeof body.meta === 'string' ? JSON.parse(body.meta) : {};
        }
      });

      await actions.update(ctx, next);
    });
  }
});

İstek örneği, dosya tablosunda sıradan veriler oluşturabilir veya eklerle birlikte gönderebilirsiniz:

# Yalnızca normal veriler oluşturun
curl -X PUT -H "Content-Type: application/json" -d '{"filename": "some-file.txt", "mimetype": "text/plain", "size": 5, "url": "https://cdn.yourdomain.com/some-file.txt"}' "http://localhost:13000/api/files:update"

# Eklerle birlikte gönderme
curl -X PUT -F "file=@/path/to/some-file.txt" -F 'meta={"length": 100}' "http://localhost:13000/api/files:update"

destroy()

Bir veya daha fazla veri parçasını silin. Karşılık gelen URL "DELETE /api/:destroy" şeklindedir.

Parametre

parametre adı tür varsayılan değer ıklama
filter Filter - filtre parametresi
filterByTk number | string - birincil anahtarı filtrele

Not: parametrelerdeki filter ve filterByTk en az bir öğe sağlar.

Örnek

Dosya verilerini silmek için bir dosya yönetimi eklentisinin uzantısına benzer şekilde dosyayı da silmek gerekir:

import actions from '@nocobase/actions';

app.actions({
  async ['files:destroy'](ctx, next) {
    // const repository = getRepositoryFromParams(ctx);

    // const { filterByTk, filter } = ctx.action.params;

    // const items = await repository.find({
    //   fields: [repository.collection.filterTargetKey],
    //   appends: ['storage'],
    //   filter,
    //   filterByTk,
    //   context: ctx,
    // });

    // await items.reduce((promise, item) => promise.then(async () => {
    //   await item.removeFromStorage();
    //   await item.destroy();
    // }), Promise.resolve());

    await actions.destroy(ctx, async () => {
      // yapılacak işler
      await next();
    });
  }
});

move()

Karşılık gelen URL 'POST /api/:move' şeklindedir.

Bu yöntem, verileri taşımak ve verilerin sırasını ayarlamak için kullanılır. Örneğin, bir sayfada bir öğeyi başka bir öğenin üstüne veya altına sürükleyip bırakın, sırayı ayarlamak için de bu yöntemi kullanabilirsiniz.

Parametre

parametre adı tür varsayılan değer ıklama
sourceId targetKey - Kaynak öğe kimliği
targetId targetKey - Hedef öğe kimliği
sortField string sort Depolanan alan adını sırala
targetScope string - Sıralanmış kapsam, bir kaynak farklı kapsamlara göre sıralanabilir
sticky boolean - Hareketli elemanın üstte olup olmadığı
method insertAfter | prepend - Ekleme türü, hedef öğenin eklenmesinden önce veya sonra

İlişkisel Kaynak Kaynak İşlemleri

add()

Bir nesneyle ilişki eklemek için, karşılık gelen URL POST /api/<resource.assocition>:add şeklindedir. "hasMany" ve "belongsToMany" ilişkilendirmeleri için geçerlidir.

Parametre

parametre adı tür varsayılan değer ıklama
values TargetKey | TargetKey[] - Eklenen ilişkili nesne kimliği

remove()

Bir nesneyle olan ilişkilendirmeyi kaldırmak için karşılık gelen URL 'POST /api/<resource.assocition>:remove' şeklindedir.

Parametre

parametre adı tür varsayılan değer ıklama
values TargetKey | TargetKey[] - Kaldırılan ilişkili nesne kimliği

set()

İlişkili ilişkilendirme nesnesini ayarlamaya karşılık gelen URL 'POST /api/<resource.assocition>:set' şeklindedir.

Parametre

parametre adı tür varsayılan değer ıklama
values TargetKey | TargetKey[] - İlişkili nesnenin kimliğini ayarlayın

toggle()

İlişkili ilişkilendirme nesnesini değiştirmeye karşılık gelen URL 'POST /api/<resource.assocition>:toggle' şeklindedir. "toggle", ilişkili nesnenin zaten var olup olmadığını dahili olarak belirler, varsa onu kaldırır ve yoksa ekler.

Parametre

parametre adı tür varsayılan değer ıklama
values TargetKey - Anahtarın ilişkili nesnesinin kimliği