-
Notifications
You must be signed in to change notification settings - Fork 0
Development Guide
This guide provides essential information for developers working on the Effective Office system. It covers project setup, architectural patterns, development workflows, and contribution guidelines. This document focuses on the practical aspects of development rather than detailed system architecture.
For a comprehensive guide on setting up and running the project for local development, see Getting Started with Effective Office. For detailed information about module organization and dependency management, see Project Structure. For comprehensive build system configuration and tooling setup, see [Build System & Tooling](Build System & Tooling). For system architecture details, see [System Architecture](System Architecture).
The Effective Office system is a multiplatform office management application consisting of:
- Backend: Spring Boot application with modular architecture
- Tablet Client: Compose Multiplatform application for tablet devices
- Shared Infrastructure: Common build logic and configuration
The project follows a modular architecture with clear separation between backend and client systems:
The project uses modern technologies across both backend and client platforms:
Tool | Version | Purpose |
---|---|---|
JDK | 17+ | Backend compilation |
Kotlin | 2.1.21 | Programming language |
Android Studio | Latest | Client development |
PostgreSQL | 12+ | Database (for backend) |
File | Purpose |
---|---|
settings.gradle.kts |
Project module structure |
gradle/libs.versions.toml |
Dependency version catalog |
build-logic/ |
Shared build configuration |
The project uses centralized dependency management through the version catalog:
Each feature module follows a consistent architectural pattern:
Backend features implement a layered architecture with clear separation of concerns:
Client features use MVI (Model-View-Intent) architecture with Decompose navigation:
The project uses convention plugins to standardize build configuration:
Plugin | Purpose | Usage |
---|---|---|
band.effective.office.client.kmp.feature |
Client feature modules | Feature modules |
band.effective.office.client.kmp.library |
Client libraries | Core modules |
band.effective.office.client.kmp.ui |
UI components | UI modules |
Client modules support multiple platforms through Kotlin Multiplatform:
- Create module structure in
backend/feature/
- Add module to
settings.gradle.kts
- Implement controller, service, and repository layers
- Add database migrations if needed
- Register components in main application
- Create module structure in
clients/tablet/feature/
- Add module to
settings.gradle.kts
- Apply convention plugin
band.effective.office.client.kmp.feature
- Implement Component, Screen, Intent, and State classes
- Register navigation routes in main application
Features communicate through well-defined interfaces:
- Unit tests for services and repositories
- Integration tests with
@SpringBootTest
- Test containers for database testing
- MockK for mocking dependencies
- Unit tests for use cases and components
- UI tests with Compose testing framework
- Mock repositories for isolated testing
Library | Purpose | Version |
---|---|---|
JUnit Jupiter | Unit testing | 5.12.2 |
MockK | Mocking | 1.14.2 |
Testcontainers | Integration testing | 1.20.2 |
Spring Boot Test | Spring testing | 3.5.0 |
Backend:
./gradlew :backend:app:bootRun
Client (Android):
./gradlew :clients:tablet:composeApp:installDebug
Migrations are managed through Flyway and located in backend/app/src/main/resources/db/migration/
.
The backend provides OpenAPI documentation through SpringDoc at /swagger-ui.html
when running.