← スキル一覧に戻る

check-repository-pattern
by Async-IO
MCP/A2A/Rest Fitness Intelligence platform.
⭐ 16🍴 2📅 2026年1月24日
SKILL.md
name: check-repository-pattern description: Validates database access follows repository pattern, detects god-trait regression, ensures focused repositories user-invocable: true
Check Repository Pattern Skill
Purpose
Quick validation that database access follows the repository pattern (commit 6f3efef). Detects god-trait regression and ensures proper use of focused repositories.
CLAUDE.md Compliance
- ✅ Enforces SOLID principles (Single Responsibility)
- ✅ Validates focused repository usage
- ✅ Prevents monolithic database patterns
Usage
Run this skill:
- Before committing database changes
- Daily pre-commit validation
- After adding new repositories
- When reviewing database-related PRs
Prerequisites
- ripgrep (
rg)
Commands
Quick Check (Fast)
# Check for repository pattern compliance
echo "🔍 Checking repository pattern..."
# 1. Check for DatabaseProvider god-trait (FORBIDDEN)
if rg "trait DatabaseProvider|impl DatabaseProvider" src/ --type rust --quiet; then
echo "❌ FAIL: DatabaseProvider god-trait detected!"
rg "DatabaseProvider" src/ --type rust -n | head -10
exit 1
else
echo "✓ PASS: No DatabaseProvider god-trait"
fi
# 2. Verify repository directory exists
if [ -d "src/database/repositories" ]; then
REPO_COUNT=$(ls -1 src/database/repositories/*_repository.rs 2>/dev/null | wc -l)
echo "✓ PASS: $REPO_COUNT repository files found"
else
echo "❌ FAIL: Repository directory missing!"
exit 1
fi
# 3. Check for direct database access in routes (anti-pattern)
if rg "sqlx::query|\.execute\(|\.fetch" src/routes/ --type rust --quiet; then
echo "⚠️ WARNING: Direct database access in routes detected"
rg "sqlx::query" src/routes/ --type rust -n | head -5
else
echo "✓ PASS: No direct database access in routes"
fi
# 4. Verify repository usage
REPO_USAGE=$(rg "Repository" src/routes/ src/protocols/ --type rust | wc -l)
echo "✓ Repository usage: $REPO_USAGE references"
echo ""
echo "✅ Repository pattern check PASSED"
Success Criteria
- ✅ Zero DatabaseProvider trait references
- ✅ All 13 repository files exist
- ✅ Repository files have <25 methods each
- ✅ No direct database access in routes/protocols
- ✅ Repository usage > 50 references
Expected Output (Success)
🔍 Checking repository pattern...
✓ PASS: No DatabaseProvider god-trait
✓ PASS: 13 repository files found
✓ PASS: No direct database access in routes
✓ Repository usage: 127 references
✅ Repository pattern check PASSED
Fixing Violations
Remove god-trait usage
// ❌ Before
async fn handler(
Extension(db): Extension<Arc<dyn DatabaseProvider>>,
) -> AppResult<Json<User>> {
let user = db.get_user(id).await?;
Ok(Json(user))
}
// ✅ After
async fn handler(
Extension(user_repo): Extension<Arc<dyn UserRepository>>,
) -> AppResult<Json<User>> {
let user = user_repo.get_by_id(id).await?
.ok_or(AppError::new(
ErrorCode::ResourceNotFound,
format!("User {} not found", id)
))?;
Ok(Json(user))
}
Replace direct database access
// ❌ Before (direct sqlx usage in route)
async fn get_user(
Extension(pool): Extension<Arc<Pool<Database>>>,
Path(id): Path<Uuid>,
) -> AppResult<Json<User>> {
let user = sqlx::query_as::<_, User>(
"SELECT * FROM users WHERE id = $1"
)
.bind(id)
.fetch_one(&*pool)
.await?;
Ok(Json(user))
}
// ✅ After (use repository)
async fn get_user(
Extension(user_repo): Extension<Arc<dyn UserRepository>>,
Path(id): Path<Uuid>,
) -> AppResult<Json<User>> {
let user = user_repo.get_by_id(id).await?
.ok_or(AppError::new(
ErrorCode::ResourceNotFound,
format!("User {} not found", id)
))?;
Ok(Json(user))
}
Related Files
src/database/repositories/mod.rs- Repository traitssrc/database/repositories/*_repository.rs- 13 implementations- Commit 6f3efef - Repository pattern migration
Related Agents
repository-pattern-guardian- Comprehensive repository validation
Quick Reference
# One-line check
rg "trait DatabaseProvider" src/ --type rust && echo "FAIL" || echo "PASS"
# Check repository count
ls -1 src/database/repositories/*_repository.rs | wc -l
# Check for direct database access
rg "sqlx::query" src/routes/ --type rust && echo "WARNING" || echo "PASS"
# Repository usage count
rg "Repository" src/routes/ src/protocols/ --type rust | wc -l
スコア
総合スコア
65/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
✓最近の活動
1ヶ月以内に更新
+10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
✓タグ
1つ以上のタグが設定されている
+5
レビュー
💬
レビュー機能は近日公開予定です

