← ClaudeAtlas

graphql-schema--dataloader-builderlisted

Designs performance-optimized GraphQL APIs with strict type definitions, clean Query/Mutation resolvers, and batching mechanisms to eliminate N+1 database queries.
RMAzrim/opencode-artes · ★ 2 · API & Backend · score 76
Install: claude install-skill RMAzrim/opencode-artes
# GraphQL Schema & DataLoader Builder ## 1. System Architecture & Prerequisites - Node.js >= 18 LTS (runtime), npm >= 9 (package manager), TypeScript >= 5.5 compiler. - Runtime deps: `@apollo/server@^4.11.0`, `graphql@^16.9.0`, `dataloader@^2.2.2`. - Dev deps: `typescript@^5.5.2`, `tsx@^4.16.2`, `@types/node@^20.14.9`. - The server uses Apollo Server 4's `startStandaloneServer` with an async `context` factory that creates fresh `DataLoader` instances per HTTP request so batched caches never leak across requests or sessions. - The reference implementation uses an in-memory repository (`db.ts`) to remain fully runnable; swapping in a `pg`/Prisma/Knex repository keeps the loaders and resolvers unchanged. ## 2. Input/Output Data Contracts ### Execution inputs - GraphQL query/mutation documents over SDL with types `User`, `Post`, `Comment`, interface `Node`, enum `SortOrder`, and `post`/`comment` input objects. - `context` shape injected into every resolver: `{ loaders: Loaders }` where `Loaders` exposes `usersById`, `postsByAuthorId`, `commentsByPostId`, `commentsByAuthorId`, `postById`, `commentById` (each a `DataLoader<K, V>`). ### N+1 elimination contract - Resolver fields that resolve related entities (`Post.author`, `Post.comments`, `Comment.author`, `User.posts`) MUST go through a per-request loader, never a raw repository call in a loop. - Any mutation that writes to a collection served by a loader MUST call `loader.clear(key)` after the write so cached rows stay co