// Enforces Head Shakers Drizzle ORM coding conventions when creating or modifying database queries, schemas, and migrations. This skill ensures consistent patterns for query structure, type safety, permission filtering, pagination, resilience, and database operations.
| name | drizzle-orm |
| description | Enforces Head Shakers Drizzle ORM coding conventions when creating or modifying database queries, schemas, and migrations. This skill ensures consistent patterns for query structure, type safety, permission filtering, pagination, resilience, and database operations. |
This skill enforces the Head Shakers Drizzle ORM coding conventions automatically during database query development. It ensures consistent patterns for query structure, type safety, permission filtering, pagination, circuit breaker resilience, and database operations.
This skill activates when:
src/lib/queries/src/lib/db/schema/drizzle-orm or path contains queries/ or db/schema)references/Drizzle-ORM-Conventions.mdBaseQuery class for all query classesQueryContext for database instance and user contextthis.getDbInstance(context) for database accessthis.applyPagination(options) for list queriesthis.combineFilters() to combine multiple SQL conditionscreatePublicQueryContext() - public read operations (isPublic = true)createUserQueryContext(userId) - authenticated user operationscreateProtectedQueryContext(requiredUserId) - owner-only operationscreateAdminQueryContext(adminUserId) - admin access to all contentthis.buildBaseFilters(isPublicCol, userIdCol, deletedAtCol, context) for permission + soft delete@/lib/queries/base/permission-filters:
buildPermissionFilter() - handles public/user/owner visibilitybuildSoftDeleteFilter() - handles deletedAt filtering (returns isNull(deletedAt))buildOwnershipFilter() - handles owner-only accesscombineFilters() - combines multiple SQL conditions with ANDthis.executeWithRetry(operation, operationName) for circuit breaker + retry logicthis.executeWithRetryDetails(operation, operationName) when you need retry metadataT | null (return null for not found)Array<T> (return [] for empty)number (return 0 for none)boolean (return false for not found)Map<K, V> (return new Map() for empty)db directly - Always use this.getDbInstance(context)buildBaseFilters for user-visible datanull for missing single itemsapplyPaginationdeletedAt timestamp columnexecuteWithRetry for external callsreferences/Drizzle-ORM-Conventions.md - Complete Drizzle ORM conventions