backend implementation

Backend Implementation Skill

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "backend implementation" with this command: npx skills add jpicklyk/task-orchestrator/jpicklyk-task-orchestrator-backend-implementation

Backend Implementation Skill

Domain-specific guidance for backend API development, service implementation, and business logic.

When To Use This Skill

Load this Skill when task has tags:

  • backend , api , service , kotlin , rest

  • spring , spring-boot , controller , repository

Validation Commands

Run Tests

Full test suite

./gradlew test

Specific test class

./gradlew test --tests "UserServiceTest"

Single test method

./gradlew test --tests "UserServiceTest.shouldCreateUser"

With build

./gradlew clean test

Build Project

Build JAR

./gradlew build

Build without tests (for quick syntax check)

./gradlew build -x test

Run Application

Local development

./gradlew bootRun

With specific profile

./gradlew bootRun --args='--spring.profiles.active=dev'

Success Criteria (Before Completing Task)

✅ ALL tests MUST pass (0 failures, 0 errors) ✅ Build MUST succeed without compilation errors ✅ Code follows project conventions (existing patterns) ✅ API endpoints tested (integration tests) ✅ Error handling implemented (try-catch, validation)

Common Backend Tasks

REST API Endpoints

  • Controller with request mapping

  • Request/response DTOs

  • Service layer business logic

  • Repository integration

  • Error handling (400, 401, 404, 500)

  • Validation (@Valid annotations)

Service Implementation

  • Business logic in service classes

  • Transaction management (@Transactional)

  • Error handling and exceptions

  • Dependency injection (@Autowired, constructor injection)

Database Integration

  • Repository interfaces (JPA, Exposed ORM)

  • Entity mapping

  • Query methods

  • Transaction boundaries

Testing Principles for Backend

Use Real Infrastructure for Integration Tests

❌ AVOID mocking repositories in integration tests:

// BAD - Mocking repositories misses SQL errors, constraints @Mock private lateinit var userRepository: UserRepository when(userRepository.findById(any())).thenReturn(mockUser)

✅ USE real in-memory database:

// GOOD - Tests actual integration @SpringBootTest @Transactional // Auto-rollback after each test class UserApiTest { @Autowired private lateinit var userRepository: UserRepository @Autowired private lateinit var userService: UserService // Tests real database, serialization, constraints }

Test Incrementally, Not in Batches

❌ Avoid: Write 200 lines code + 15 tests → run all → 12 failures → no idea which code caused which failure

✅ Do:

  • Write basic implementation

  • Write ONE happy path test

  • Run ONLY that test: ./gradlew test --tests "ToolTest.shouldHandleBasicCase"

  • Fix until passes

  • Add ONE edge case test

  • Run ONLY that test

  • Repeat

Benefits: Feedback in seconds, isolates root cause immediately.

Debug with Actual Output

When test fails:

  • Read error message carefully - tells you what's wrong

  • Print actual output: println("Full response: $result") println("Response keys: ${result.jsonObject.keys}")

  • Verify assumptions about test data - count manually

  • Fix root cause, not symptoms

Create Complete Test Entities

❌ BAD - Missing required fields:

val task = Task( id = UUID.randomUUID(), title = "Test Task", status = TaskStatus.PENDING // Missing: summary, priority, complexity, timestamps ) taskRepository.create(task) // FAILS: NOT NULL constraint

✅ GOOD - Complete entity:

val task = Task( id = UUID.randomUUID(), title = "Test Task", summary = "Test summary", // Required status = TaskStatus.PENDING, // Required priority = Priority.HIGH, // Required complexity = 5, // Required tags = listOf("test"), projectId = testProjectId, createdAt = Instant.now(), // Required modifiedAt = Instant.now() // Required )

How to find required fields: Check migration SQL or ORM model definition.

Common Blocker Scenarios

Blocker 1: Missing Database Schema

Issue: Tests expect column that doesn't exist

SQLSyntaxErrorException: Unknown column 'users.password_hash'

What to try:

  • Check migration files - is column defined?

  • Review prerequisite database tasks - marked complete but incomplete?

  • Check if column was renamed

If blocked: Report to orchestrator - database task may need reopening

Blocker 2: NullPointerException in Service

Issue: NPE at runtime in service class

NullPointerException: Cannot invoke method on null object

What to try:

  • Check dependency injection - is @Autowired present?

  • Check constructor injection - all parameters provided?

  • Check @Configuration on config class

  • Check @Service or @Component on service class

  • Add null safety (Kotlin: use ? operator, nullable types)

Common causes:

  • Missing @Configuration annotation

  • Spring not scanning package

  • Circular dependency

Blocker 3: Integration Test Failures

Issue: Integration tests pass locally but fail in CI or for others

What to try:

  • Check test isolation - are tests cleaning up state?

  • Check @Transactional with rollback

  • Check test order dependencies (tests should be independent)

  • Check H2/in-memory DB configuration matches production DB type

  • Check test data initialization

Blocker 4: Architectural Conflict

Issue: Task requirements conflict with existing architecture

Task requires middleware auth but project uses annotation-based security

What to try:

  • Review existing patterns in codebase

  • Check architecture documentation

  • Look for similar implementations

If blocked: Report to orchestrator - may need architectural decision or task revision

Blocker 5: External Dependency Bug

Issue: Third-party library has known bug

JWT library v3.2.1 has refresh token bug - expires immediately

What to try:

  • Check library changelog - is fix available in newer version?

  • Search for known issues in library's issue tracker

  • Try workaround if documented

If blocked: Report to orchestrator - may need to wait for library update or use alternative

Blocker Report Format

⚠️ BLOCKED - Requires Senior Engineer

Issue: [Specific problem - NPE at UserService.kt:42, missing column, etc.]

Attempted Fixes:

  • [What you tried #1]
  • [What you tried #2]
  • [Why attempts didn't work]

Root Cause (if known): [Your analysis]

Partial Progress: [What work you DID complete]

Context for Senior Engineer:

  • Error output: [Paste error]
  • Test results: [Test failures]
  • Related files: [Files involved]

Requires: [What needs to happen - Senior Engineer investigation, etc.]

Quick Reference

Spring Boot Patterns

Controller:

@RestController @RequestMapping("/api/users") class UserController(private val userService: UserService) {

@PostMapping
fun createUser(@Valid @RequestBody request: CreateUserRequest): User {
    return userService.createUser(request)
}

@GetMapping("/{id}")
fun getUser(@PathVariable id: UUID): User {
    return userService.findById(id)
        ?: throw NotFoundException("User not found")
}

}

Service:

@Service @Transactional class UserService( private val userRepository: UserRepository, private val passwordEncoder: PasswordEncoder ) { fun createUser(request: CreateUserRequest): User { val user = User( email = request.email, passwordHash = passwordEncoder.encode(request.password) ) return userRepository.save(user) } }

Repository:

@Repository interface UserRepository : JpaRepository<User, UUID> { fun findByEmail(email: String): User? }

Error Handling

@RestControllerAdvice class GlobalExceptionHandler {

@ExceptionHandler(NotFoundException::class)
fun handleNotFound(ex: NotFoundException): ResponseEntity&#x3C;ErrorResponse> {
    return ResponseEntity
        .status(HttpStatus.NOT_FOUND)
        .body(ErrorResponse(ex.message))
}

@ExceptionHandler(ValidationException::class)
fun handleValidation(ex: ValidationException): ResponseEntity&#x3C;ErrorResponse> {
    return ResponseEntity
        .status(HttpStatus.BAD_REQUEST)
        .body(ErrorResponse(ex.message))
}

}

Common Patterns to Follow

  • Controller → Service → Repository layering

  • Constructor injection over field injection

  • @Transactional on service layer for database operations

  • DTO pattern for request/response (don't expose entities)

  • Exception handling with @RestControllerAdvice

  • Validation with @Valid and constraint annotations

  • Testing with real database for integration tests

What NOT to Do

❌ Don't mock repositories in integration tests ❌ Don't skip tests and mark task complete ❌ Don't expose entities directly in API responses ❌ Don't put business logic in controllers ❌ Don't forget @Transactional for database operations ❌ Don't hardcode configuration (use application.yml)

Focus Areas

When reading task sections, prioritize:

  • requirements

  • What API endpoints need to be built

  • technical-approach

  • How to implement (patterns, libraries)

  • implementation

  • Specific implementation details

  • testing-strategy

  • How to test the implementation

Remember

  • Run tests incrementally - one test at a time for fast feedback

  • Use real infrastructure - in-memory database for integration tests

  • Debug with actual output - print what you got, don't assume

  • Report blockers promptly - don't wait, communicate to orchestrator

  • Follow existing patterns - check codebase for similar implementations

  • Complete test entities - all required fields must be populated

  • Validation is mandatory - ALL tests must pass before completion

Additional Resources

For deeper patterns and examples, see:

  • PATTERNS.md - Spring Security, REST API design patterns (load if needed)

  • BLOCKERS.md - Detailed blocker scenarios with solutions (load if stuck)

  • examples.md - Complete working examples (load if uncertain)

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

documentation implementation

No summary provided by upstream source.

Repository SourceNeeds Review
General

database implementation

No summary provided by upstream source.

Repository SourceNeeds Review
General

testing implementation

No summary provided by upstream source.

Repository SourceNeeds Review