К основному содержанию
скилл CX Codex

dynamodb-toolbox-patterns — скилл для Claude Code: типизированный

Скилл с готовыми шаблонами TypeScript для DynamoDB-Toolbox v2: схемы, сущности, .build()-команды, запросы и транзакции.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add giuseppe-trisciuoglio/developer-kit --skill dynamodb-toolbox-patterns -a claude-code
Открыть на GitHub

Что делает dynamodb-toolbox-patterns

Скилл подсказывает агенту, как писать слой доступа к DynamoDB на DynamoDB-Toolbox v2 поверх AWS SDK v3 DocumentClient. Внутри — примеры объявления таблицы с ключами и GSI, сущностей через item(), string(), number(), list(), map(), а также модификаторов .key(), .required(), .default(), .transform(), .link().

Отдельный блок посвящён командам: PutItemCommand, GetItemCommand, UpdateItemCommand, DeleteItemCommand собираются через .build(), а не вручную. Есть примеры QueryCommand и ScanCommand с диапазоном по beginsWith и обращением к индексу, плюс BatchWriteCommand и TransactWriteCommand для пакетных и атомарных операций.

Для работы нужны пакеты dynamodb-toolbox, @aws-sdk/client-dynamodb и @aws-sdk/lib-dynamodb. Скилл опирается на AWS SDK v3, поэтому на v2-клиенте примеры не соберутся. Транзакции в DynamoDB медленнее одиночной записи и имеют лимиты — это повод проверить, где без атомарности можно обойтись.

Какие задачи решает

  • описать таблицу и сущности в строгой типизации TypeScript
  • собрать CRUD-операции через .build() вместо ручных команд
  • построить запросы по ключу и GSI с диапазоном beginsWith
  • сложить пакетную запись или транзакцию из нескольких сущностей
  • спроектировать single-table схему с вычисляемыми ключами

Примеры запросов агенту

  • Помоги описать таблицу и сущность User для DynamoDB-Toolbox v2 с ключами PK/SK и GSI
  • Перепиши мои запросы к DynamoDB на .build(QueryCommand) с диапазоном по beginsWith
  • Собери транзакцию из PutItem и UpdateItem через TransactWriteCommand

Как установить dynamodb-toolbox-patterns

1Через Skills CLI (Vercel)

npx skills add giuseppe-trisciuoglio/developer-kit --skill dynamodb-toolbox-patterns -a claude-code

2Вручную: положить файлы

~/.claude/skills/dynamodb-toolbox-patterns/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/dynamodb-toolbox-patterns/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о dynamodb-toolbox-patterns

Как установить dynamodb-toolbox-patterns в Claude?

Выполните npx skills add giuseppe-trisciuoglio/developer-kit --skill dynamodb-toolbox-patterns -a claude-code. После этого файл скилла лежит в ~/.claude/skills/dynamodb-toolbox-patterns/SKILL.md.

Что делает dynamodb-toolbox-patterns?

Даёт агенту шаблоны TypeScript для DynamoDB-Toolbox v2: моделирование схем и сущностей, команды через .build(), запросы и сканирование, пакетные и транзакционные операции.

Что нужно для работы скилла?

Пакеты dynamodb-toolbox, @aws-sdk/client-dynamodb и @aws-sdk/lib-dynamodb. Скилл построен на AWS SDK v3 DocumentClient.

Исходный текст

SKILL.md · MIT
---
name: dynamodb-toolbox-patterns
description: Provides TypeScript patterns for DynamoDB-Toolbox v2 including schema/table/entity modeling, .build() command workflow, query/scan access patterns, batch and transaction operations, and single-table design with computed keys. Use when implementing type-safe DynamoDB access layers with DynamoDB-Toolbox v2 in TypeScript services or serverless applications.
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
---

# DynamoDB-Toolbox v2 Patterns (TypeScript)

## Overview

This skill provides practical TypeScript patterns for using DynamoDB-Toolbox v2 with AWS SDK v3 DocumentClient. It focuses on type-safe schema modeling, `.build()` command usage, and production-ready single-table design.

## When to Use

- Defining DynamoDB tables and entities with strict TypeScript inference
- Modeling schemas with `item`, `string`, `number`, `list`, `set`, `map`, and `record`
- Implementing `GetItem`, `PutItem`, `UpdateItem`, `DeleteItem` via `.build()`
- Building query and scan access paths with primary keys and GSIs
- Handling batch and transactional operations
- Designing single-table systems with computed keys and entity patterns

## Instructions

1. **Start from access patterns**: identify read/write queries first, then design keys.
2. **Create table + entity boundaries**: one table, multiple entities if using single-table design.
3. **Define schemas with constraints**: apply `.key()`, `.required()`, `.default()`, `.transform()`, `.link()`.
4. **Use `.build()` commands everywhere**: avoid ad-hoc command construction for consistency and type safety.
5. **Add query/index coverage**: validate GSI/LSI paths for each required access pattern.
6. **Use batch/transactions intentionally**: batch for throughput, transactions for atomicity.
7. **Keep items evolvable**: use optional fields, defaults, and derived attributes for schema evolution.

## Examples

### Install and Setup

```bash
npm install dynamodb-toolbox @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb
```

```typescript
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
import { Table } from 'dynamodb-toolbox/table';
import { Entity } from 'dynamodb-toolbox/entity';
import { item, string, number, list, map } from 'dynamodb-toolbox/schema';

const client = new DynamoDBClient({ region: process.env.AWS_REGION ?? 'eu-west-1' });
const documentClient = DynamoDBDocumentClient.from(client);

export const AppTable = new Table({
  name: 'app-single-table',
  partitionKey: { name: 'PK', type: 'string' },
  sortKey: { name: 'SK', type: 'string' },
  indexes: {
    byType: { type: 'global', partitionKey: { name: 'GSI1PK', type: 'string' }, sortKey: { name: 'GSI1SK', type: 'string' } }
  },
  documentClient
});
```

### Entity Schema with Modifiers and Complex Attributes

```typescript
const now = () => new Date().toISOString();

export const UserEntity = new Entity({
  name: 'User',
  table: AppTable,
  schema: item({
    tenantId: string().required('always'),
    userId: string().required('always'),
    email: string().required('always').transform(input => input.toLowerCase()),
    role: string().enum('admin', 'member').default('member'),
    loginCount: number().default(0),
    tags: list(string()).default([]),
    profile: map({
      displayName: string().optional(),
      timezone: string().default('UTC')
    }).default({ timezone: 'UTC' })
  }),
  computeKey: ({ tenantId, userId }) => ({
    PK: `TENANT#${tenantId}`,
    SK: `USER#${userId}`,
    GSI1PK: `TENANT#${tenantId}#TYPE#USER`,
    GSI1SK: `EMAIL#${userId}`
  })
});
```

### `.build()` CRUD Commands

```typescript
import { PutItemCommand } from 'dynamodb-toolbox/entity/actions/put';
import { GetItemCommand } from 'dynamodb-toolbox/entity/actions/get';
import { UpdateItemCommand, $add } from 'dynamodb-toolbox/entity/actions/update';
import { DeleteItemCommand } from 'dynamodb-toolbox/entity/actions/delete';

await UserEntity.build(PutItemCommand)
  .item({ tenantId: 't1', userId: 'u1', email: '[email protected]' })
  .send();

const { Item } = await UserEntity.build(GetItemCommand)
  .key({ tenantId: 't1', userId: 'u1' })
  .send();

await UserEntity.build(UpdateItemCommand)
  .item({ tenantId: 't1', userId: 'u1', loginCount: $add(1) })
  .send();

await UserEntity.build(DeleteItemCommand)
  .key({ tenantId: 't1', userId: 'u1' })
  .send();
```

### Query and Scan Patterns

```typescript
import { QueryCommand } from 'dynamodb-toolbox/table/actions/query';
import { ScanCommand } from 'dynamodb-toolbox/table/actions/scan';

const byTenant = await AppTable.build(QueryCommand)
  .query({
    partition: `TENANT#t1`,
    range: { beginsWith: 'USER#' }
  })
  .send();

const byTypeIndex = await AppTable.build(QueryCommand)
  .query({
    index: 'byType',
    partition: 'TENANT#t1#TYPE#USER'
  })
  .options({ limit: 25 })
  .send();

const scanned = await AppTable.build(ScanCommand)
  .options({ limit: 100 })
  .send();
```

### Batch and Transaction Workflows

```typescript
import { BatchWriteCommand } from 'dynamodb-toolbox/table/actions/batchWrite';
import { TransactWriteCommand } from 'dynamodb-toolbox/table/actions/transactWrite';

await AppTable.build(BatchWriteCommand)
  .requests(
    UserEntity.build(PutItemCommand).item({ tenantId: 't1', userId: 'u2', email: '[email protected]' }),
    UserEntity.build(PutItemCommand).item({ tenantId: 't1', userId: 'u3', email: '[email protected]' })
  )
  .send();

await AppTable.build(TransactWriteCommand)
  .requests(
    UserEntity.build(PutItemCommand).item({ tenantId: 't1', userId: 'u4', email: '[email protected]' }),
    UserEntity.build(UpdateItemCommand).item({ tenantId: 't1', userId: 'u1', loginCount: $add(1) })
  )
  .send();
```

## Single-Table Design Guidance

- Model each business concept as an entity with strict schema.
- Keep PK/SK predictable and composable (`TENANT#`, `USER#`, `ORDER#`).
- Encode access paths into GSI keys, not in-memory filters.
- Prefer append-only timelines for audit/history data.
- Keep hot partitions under control with scoped partitions and sharding where needed.

## Best Practices

- Design keys from access patterns first, then derive entity attributes.
- Keep one source of truth for key composition (`computeKey`) to avoid drift.
- Use `.options({ consistent: true })` only where strict read-after-write is required.
- Prefer targeted queries over scans for runtime request paths.
- Add conditional expressions for idempotency and optimistic concurrency control.
- Validate batch/transaction size limits before execution to avoid partial failures.

## Constraints and Warnings

- DynamoDB-Toolbox v2 relies on AWS SDK v3 DocumentClient integration.
- Avoid table scans in request paths unless explicitly bounded.
- Use conditional writes for concurrency-sensitive updates.
- Transactions are limited and slower than single-item writes; use only for true atomic requirements.
- Validate key design against target throughput before implementation.

## References

Primary references curated from Context7 are available in:

- `references/api-dynamodb-toolbox-v2.md`

© giuseppe-trisciuoglio · MIT · giuseppe-trisciuoglio/developer-kit

Похожие скиллы

Все скиллы по теме «Данные и базы» →
aws-dynamodb alinaqi Скилл учит агента проектировать базы по методу single-table design и собирать запросы через AWS SDK v3 для TypeScript или Python. CX Codex +1 522установок connecting-lambda-to-dynamodb aws Помогает связать функцию AWS Lambda с таблицей DynamoDB. Настраивает роли IAM, потоки DynamoDB Streams и триггеры обработки событий. CX Codex +1 6 500установок aws-sdk-js-v3-usage aws Задаёт правила и паттерны работы с AWS SDK v3 в коде на JavaScript и TypeScript. Помогает писать вызовы сервисов AWS без устаревшего синтаксиса v2. CX Codex +1 8 000установок aws-solution-architect Alireza Rezvani Проектирует архитектуру AWS, генерирует шаблоны IaC и разбирает расходы. Пригодится при запуске серверлес-приложения, миграции или настройке CI/CD. 1 586установок aws-serverless-eda zxkane Помогает проектировать бессерверные API и событийно-ориентированные системы в AWS по принципам Well-Architected. Пригодится при настройке Lambda, DynamoDB и Step Functions. CX Codex +1 701установок aws-development Mindrally Скилл задаёт агенту правила разработки на AWS: Lambda, CDK, SAM, DynamoDB, IAM и serverless-архитектура через Infrastructure as Code. CX Codex +1 701установок

Из того же набора93

aws-lambda-typescript-integration Помогает проектировать серверлесс-функции на TypeScript под AWS Lambda, выбирая между NestJS и чистым кодом с оптимизацией холодного старта. CX Codex +1 3 600установок aws-lambda-python-integration Подсказывает агенту, как писать и разворачивать Python-функции в AWS Lambda: Chalice или чистый Python, холодный старт, API Gateway и ALB. CX Codex +1 3 600установок graalvm-native-image Скилл помогает компилировать Java-приложения в нативные бинарники с помощью GraalVM Native Image. Пригодится для сокращения времени холодного старта и потребления памяти. CX Codex +1 3 500установок memory-md-management Скилл проверяет файлы памяти проекта вроде CLAUDE.md, ставит им оценку по шести критериям и предлагает точечные правки. CX Codex +1 3 500установок github-issue-workflow Пошаговый сценарий из 8 фаз для решения задач на GitHub от чтения описания до создания пулл-реквеста. Помогает безопасно разобрать issue и написать проверенный код. CX Codex +1 3 500установок notebooklm Скилл подключает агента к Google NotebookLM через CLI nlm: поиск по документации, добавление источников, генерация подкастов и отчётов. CX Codex +1 3 500установок docs-updater Скилл сравнивает текущую ветку с последним релизным тегом и правит README, CHANGELOG и папки с документацией. Пригодится перед релизом или пул-реквестом. CX Codex +1 3 500установок spring-boot-project-creator Скилл разворачивает проект на Spring Boot 3.x или 4.x через Spring Initializr с архитектурой DDD или Layered. Пригодится для быстрого старта микросервисов с JPA, OpenAPI и Docker Compose. CX Codex +1 3 500установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой