DEV Community

Tech Dung
Tech Dung

Posted on

Hello everyone in the developer community! πŸ‘‹ I'm a backend developer with 3 years of experience in building scalable and maintainable systems.

Top comments (2)

Collapse
 
tech_persona21 profile image
Tech Dung

This is my very first product – a small starter project built based on the clean architecture structure I use in real-world projects. Though it’s simple, I’ve made sure it follows professional patterns and is easy to understand and extend.
πŸ”Ή Tech Stack Highlights:
Hexagonal Architecture (Ports & Adapters)
Spring Boot (Kotlin)
Kafka integration
JOOQ + PostgreSQL
Docker Compose-ready
I hope you enjoy it, and thank you so much for your support!
🎯 What’s next if I get your support?
Deeper dive into Hexagonal Architecture patterns
More Kafka use cases (event-driven, command, notification...)
More complex real-world project structures
Thank you for checking out my first product – stay tuned for more! πŸš€

Project structure:
a_spring_hexagonal_jooq_kafka_project/
β”œβ”€β”€ category-backend/
β”‚ β”œβ”€β”€ build.gradle.kts
β”‚ β”œβ”€β”€ gradlew
β”‚ β”œβ”€β”€ gradlew.bat
β”‚ β”œβ”€β”€ gradle/wrapper/...
β”‚ β”œβ”€β”€ settings.gradle.kts
β”‚ β”œβ”€β”€ README.md
β”‚ └── src/
β”‚ β”œβ”€β”€ main/
β”‚ β”‚ β”œβ”€β”€ kotlin/com/example/categorybackend/
β”‚ β”‚ β”‚ β”œβ”€β”€ CategoryBackendApplication.kt
β”‚ β”‚ β”‚ β”œβ”€β”€ adapter/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ api/
β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ CategoryController.kt
β”‚ β”‚ β”‚ β”‚ β”‚ └── CategoryDTOs.kt
β”‚ β”‚ β”‚ β”‚ └── db/
β”‚ β”‚ β”‚ β”‚ └── JooqCategoryRepository.kt
β”‚ β”‚ β”‚ β”œβ”€β”€ domain/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ model/
β”‚ β”‚ β”‚ β”‚ β”‚ └── Category.kt
β”‚ β”‚ β”‚ β”‚ └── port/
β”‚ β”‚ β”‚ β”‚ └── CategoryRepository.kt
β”‚ β”‚ β”‚ β”œβ”€β”€ infrastructure/
β”‚ β”‚ β”‚ β”‚ └── JooqConfig.kt
β”‚ β”‚ β”‚ └── usecase/
β”‚ β”‚ β”‚ β”œβ”€β”€ CategoryUseCase.kt
β”‚ β”‚ β”‚ └── CategoryUseCaseImpl.kt
β”‚ β”‚ └── resources/
β”‚ β”‚ β”œβ”€β”€ application.yml
β”‚ β”‚ └── db/migration/
β”‚ β”‚ └── V1_create_category_table.sql
β”‚ └── test/... (empty basic test structure)
β”œβ”€β”€ product-backend/
β”‚ β”œβ”€β”€ build.gradle.kts
β”‚ β”œβ”€β”€ gradlew
β”‚ β”œβ”€β”€ gradlew.bat
β”‚ β”œβ”€β”€ gradle/wrapper/...
β”‚ β”œβ”€β”€ settings.gradle.kts
β”‚ β”œβ”€β”€ README.md
β”‚ └── src/
β”‚ β”œβ”€β”€ main/
β”‚ β”‚ β”œβ”€β”€ kotlin/com/example/productbackend/
β”‚ β”‚ β”‚ β”œβ”€β”€ ProductBackendApplication.kt
β”‚ β”‚ β”‚ β”œβ”€β”€ adapter/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ api/
β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ ProductController.kt
β”‚ β”‚ β”‚ β”‚ β”‚ └── ProductDTOs.kt
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ db/
β”‚ β”‚ β”‚ β”‚ β”‚ └── JooqProductRepository.kt
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ http/
β”‚ β”‚ β”‚ β”‚ β”‚ └── RemoteCategoryServiceAdapter.kt
β”‚ β”‚ β”‚ β”‚ └── kafka/
β”‚ β”‚ β”‚ β”‚ └── KafkaProductEventProducer.kt
β”‚ β”‚ β”‚ β”œβ”€β”€ domain/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ model/
β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ Product.kt
β”‚ β”‚ β”‚ β”‚ β”‚ └── event/
β”‚ β”‚ β”‚ β”‚ β”‚ └── ProductCreatedEvent.kt
β”‚ β”‚ β”‚ β”‚ └── port/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ CategoryServicePort.kt
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ ProductEventPublisher.kt
β”‚ β”‚ β”‚ β”‚ └── ProductRepository.kt
β”‚ β”‚ β”‚ β”œβ”€β”€ infrastructure/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ AppConfig.kt
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ JooqConfig.kt
β”‚ β”‚ β”‚ β”‚ └── KafkaConfig.kt
β”‚ β”‚ β”‚ └── usecase/
β”‚ β”‚ β”‚ β”œβ”€β”€ ProductUseCase.kt
β”‚ β”‚ β”‚ └── ProductUseCaseImpl.kt
β”‚ β”‚ └── resources/
β”‚ β”‚ β”œβ”€β”€ application.yml
β”‚ β”‚ └── db/migration/
β”‚ β”‚ └── V1
_create_product_table.sql
β”‚ └── test/... (empty basic test structure)
β”œβ”€β”€ docker-compose.yml
└── init-db.sh

Collapse
 
tech_persona21 profile image
Tech Dung