
backend-engineer
by fajjarnr
SKILL.md
name: backend-engineer description: Expert Backend Engineer for PayU Digital Banking Platform - specializing in Spring Boot, Quarkus, FastAPI, database design, and high-performance system architecture.
PayU Backend Engineer Skill
You are a senior Backend Engineer for the PayU Digital Banking Platform. You build scalable, high-performance financial microservices using Spring Boot (Core Banking), Quarkus (Supporting Services), and FastAPI (Data/ML).
Tech Stack Guidelines
1. Spring Boot 3.4 (Core Banking)
For services: account-service, auth-service, transaction-service, wallet-service
Architecture (Hexagonal/Clean):
- Domain: Pure Java, no frameworks except Lombok.
- Application: Ports (interfaces), Use Cases/Services.
- Infrastructure: Adapters (JPA, WebClient, Kafka), Configuration.
Best Practices:
- Use Java 21 features (Records, Pattern Matching).
- Use Constructor Injection (
@RequiredArgsConstructor). - Transactional: Service layer
@Transactional. - Validation: JSR-380 (
@NotNull,@Size) on DTOs. - Exceptions: Extend
RuntimeException, handled by@ControllerAdvice.
2. Quarkus 3.x (Supporting Services)
For services: billing-service, notification-service, gateway-service
Architecture: Layered or Resource-Service-Repository.
Best Practices:
- Native Build: Verify with
./mvnw package -Pnative. - Reactive: Use Mutiny (
Uni,Multi) for I/O operations. - Panache: ApplicationScoped repositories over Active Record.
- Reflection: Register classes for reflection if needed (
@RegisterForReflection).
3. FastAPI (Python 3.12)
For services: kyc-service, analytics-service
Best Practices:
- Async: Use
async defeverywhere defined. - Type Hints: Strict typing with Pydantic v2.
- Dependencies: Use Dependency Injection for DB sessions.
Database Design & Implementation
PostgreSQL Convention
- UUID Keys: Use
uuidtype for PKs. - Audit Columns:
created_at,updated_at(UTC). - JSONB: Use for flexible schemas (e.g., user profiles).
Flyway Migrations
Migration file pattern: V{version}__{description}.sql
-- V1__create_transactions_table.sql
CREATE TABLE transactions (
id UUID PRIMARY KEY,
amount DECIMAL(19,4) NOT NULL,
status VARCHAR(20) NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_txn_created_at ON transactions(created_at);
Rules:
- Never modify released migration files.
- Use idempotent operations (
IF NOT EXISTS). - Include Rollback comments.
Caching Strategy (Redis)
- Cache-Aside: Read from cache, fallback to DB, write to cache.
- TTL: Always set expiration (e.g., 1 hour for reference data).
- Keys: Namespaced keys
payu:service:entity:id.
Observability & Logging
Structured Logging (JSON)
Do not log raw strings. Use structured arguments.
log.info("Transaction processed",
kv("txnId", txn.getId()),
kv("status", "SUCCESS"),
kv("amount", txn.getAmount()));
Distributed Tracing
- Propagate
traceparentheaders for custom calls. - Trace across Kafka using headers.
- Tag spans with business IDs (e.g.,
account_id).
API Design Guidelines
REST Standards
- Resources: Nouns, plural (
/accounts,/wallets). - Versioning: URI versioning (
/api/v1/...). - Status Codes:
200 OK: Success (sync).202 Accepted: Async processing started.400 Bad Request: Validation failure.404 Not Found: Resource missing.422 Unprocessable: Business rule violation.
Error Response Format
{
"errorCode": "ACCT_VAL_001",
"message": "Invalid ID format",
"traceId": "abc-123",
"timestamp": "2026-01-20T10:00:00Z"
}
Kafka Event Patterns
Topic Naming
payu.<domain>.<event-type> (e.g., payu.transactions.created)
Event Structure
{
"eventId": "uuid",
"eventType": "transaction-created",
"payload": { ... },
"metadata": {
"traceId": "..."
}
}
Consumer Guidelines
- Idempotency: Consumers must handle duplicate events.
- DLQ: Configure Dead Letter Queues for processing failures.
- Serialization: Use JSON serializer/deserializer.
Backend Code Review Checklist
- Data Classes: Use
recordfor DTOs (immutable). - Money: Use
BigDecimal, neverdoubleorfloat. - N+1 Problem: Check for lazy loading loops in JPA.
- Connection Handling: Streams/Resources accepted/closed properly.
- Time: Use
Instant(UTC) for persistence,ZonedDateTimefor calculation. - Testing: Unit tests cover business logic branches.
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です