core/appwrite-databases-schema.md
2025-12-11 18:02:53 -03:00

3.2 KiB

Appwrite Database Collections

Definição textual das coleções necessárias no Appwrite Console e um exemplo simples de script JavaScript para criá-las via SDK.

Collections

cloud_accounts

  • provider: string ('github' | 'cloudflare'), obrigatório.
  • apiKey: string (armazenada com criptografia no Appwrite), obrigatório.
  • label: string (nome amigável para exibir), obrigatório.

projects

  • name: string (nome do projeto), obrigatório.
  • repoUrl: string (URL do repositório), obrigatório.
  • deployStatus: string (status do deploy), obrigatório.

audit_logs

  • action: string (ação executada), obrigatório.
  • timestamp: datetime (instante do evento), obrigatório.
  • userId: string (ID do usuário responsável), obrigatório.

Script de exemplo (Node.js)

O script abaixo usa o SDK do Appwrite para criar as coleções e seus atributos em um database existente. Ajuste as variáveis APPWRITE_ENDPOINT, APPWRITE_PROJECT, APPWRITE_API_KEY e DATABASE_ID antes de executar.

npm install appwrite
node create-collections.js
// create-collections.js
import { Client, Databases, ID } from 'appwrite';

const client = new Client()
  .setEndpoint(process.env.APPWRITE_ENDPOINT || 'https://cloud.appwrite.io/v1')
  .setProject(process.env.APPWRITE_PROJECT)
  .setKey(process.env.APPWRITE_API_KEY);

const DATABASE_ID = process.env.DATABASE_ID; // ID do banco existente
const databases = new Databases(client);

async function createCollection({ id, name }) {
  await databases.createCollection(DATABASE_ID, id, name, [
    {
      type: 'document',
      roles: [
        { role: 'all', permission: 'read' },
        { role: 'users', permission: 'create' },
        { role: 'users', permission: 'update' },
        { role: 'users', permission: 'delete' },
      ],
    },
  ]);
}

async function createStringAttribute(collectionId, key, size = 255, required = true, defaultValue = undefined) {
  await databases.createStringAttribute(DATABASE_ID, collectionId, key, size, required, defaultValue);
}

async function createDatetimeAttribute(collectionId, key, required = true) {
  await databases.createDatetimeAttribute(DATABASE_ID, collectionId, key, required);
}

async function main() {
  // cloud_accounts
  await createCollection({ id: 'cloud_accounts', name: 'Cloud Accounts' });
  await createStringAttribute('cloud_accounts', 'provider', 20);
  await createStringAttribute('cloud_accounts', 'apiKey', 512);
  await createStringAttribute('cloud_accounts', 'label', 100);

  // projects
  await createCollection({ id: 'projects', name: 'Projects' });
  await createStringAttribute('projects', 'name', 200);
  await createStringAttribute('projects', 'repoUrl', 500);
  await createStringAttribute('projects', 'deployStatus', 100);

  // audit_logs
  await createCollection({ id: 'audit_logs', name: 'Audit Logs' });
  await createStringAttribute('audit_logs', 'action', 200);
  await createDatetimeAttribute('audit_logs', 'timestamp');
  await createStringAttribute('audit_logs', 'userId', 128);

  console.log('Collections e atributos criados.');
}

main().catch((err) => {
  console.error('Erro ao criar collections:', err);
  process.exit(1);
});