├── .github └── workflows │ └── pr-ci.yaml ├── .gitignore ├── Dockerfile ├── api ├── build.gradle.kts └── src │ └── main │ └── kotlin │ └── io │ └── github │ └── aerain │ └── api │ ├── Api.kt │ ├── ApiModule.kt │ ├── common │ └── PaginationResponse.kt │ ├── exception │ └── ExceptionHandler.kt │ └── v1 │ ├── auth │ └── AuthApi.kt │ ├── post │ └── PostApi.kt │ └── profile │ └── ProfileApi.kt ├── data ├── build.gradle.kts └── src │ └── main │ └── kotlin │ └── io │ └── github │ └── aerain │ └── data │ ├── DataModule.kt │ ├── config │ ├── DataSourceProperties.kt │ ├── DatabaseModule.kt │ ├── JwtProperties.kt │ └── RetrofitModule.kt │ ├── post │ ├── MariaDbPostRepository.kt │ ├── PostModule.kt │ ├── Posts.kt │ ├── TransactionalCreatePostUseCase.kt │ ├── TransactionalDeletePostUseCase.kt │ ├── TransactionalGetAllPostUseCase.kt │ ├── TransactionalGetPostUseCase.kt │ └── TransactionalUpdatePostUseCase.kt │ ├── token │ ├── SharedSecretTokenManager.kt │ └── TokenFactory.kt │ └── weather │ ├── WeatherApi.kt │ └── WeatherModule.kt ├── entity ├── build.gradle.kts └── src │ └── main │ └── kotlin │ └── io │ └── github │ └── aerain │ └── entity │ └── post │ └── Post.kt ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── server ├── build.gradle.kts └── src │ ├── main │ ├── kotlin │ │ └── io │ │ │ └── github │ │ │ └── aerain │ │ │ ├── Application.kt │ │ │ ├── config │ │ │ ├── ServerModule.kt │ │ │ └── ktor │ │ │ │ └── ext │ │ │ │ ├── KoinApplicationCallExt.kt │ │ │ │ ├── KoinApplicationEvents.kt │ │ │ │ └── KoinFeature.kt │ │ │ └── plugins │ │ │ ├── Authentication.kt │ │ │ ├── ExceptionHandler.kt │ │ │ ├── HTTP.kt │ │ │ ├── Koin.kt │ │ │ ├── Monitoring.kt │ │ │ ├── Properties.kt │ │ │ ├── Routing.kt │ │ │ └── Serialization.kt │ └── resources │ │ ├── application.conf │ │ └── logback.xml │ └── test │ └── kotlin │ └── io │ └── github │ └── aerain │ └── ApplicationTest.kt ├── settings.gradle.kts └── usecase ├── build.gradle.kts └── src └── main └── kotlin └── io └── github └── aerain └── usecase ├── UseCase.kt ├── exception ├── BaseException.kt └── NotFoundException.kt ├── post ├── CreatePostUseCase.kt ├── DeletePostUseCase.kt ├── GetAllPostUseCase.kt ├── GetPostUseCase.kt ├── Mapper.kt ├── Post.kt ├── PostRepository.kt └── UpdatePostUseCase.kt └── token ├── Context.kt ├── IssueResponse.kt ├── IssueTokenUseCase.kt └── TokenProvider.kt /.github/workflows/pr-ci.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/.github/workflows/pr-ci.yaml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/.gitignore -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/Dockerfile -------------------------------------------------------------------------------- /api/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/api/build.gradle.kts -------------------------------------------------------------------------------- /api/src/main/kotlin/io/github/aerain/api/Api.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/api/src/main/kotlin/io/github/aerain/api/Api.kt -------------------------------------------------------------------------------- /api/src/main/kotlin/io/github/aerain/api/ApiModule.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/api/src/main/kotlin/io/github/aerain/api/ApiModule.kt -------------------------------------------------------------------------------- /api/src/main/kotlin/io/github/aerain/api/common/PaginationResponse.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/api/src/main/kotlin/io/github/aerain/api/common/PaginationResponse.kt -------------------------------------------------------------------------------- /api/src/main/kotlin/io/github/aerain/api/exception/ExceptionHandler.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/api/src/main/kotlin/io/github/aerain/api/exception/ExceptionHandler.kt -------------------------------------------------------------------------------- /api/src/main/kotlin/io/github/aerain/api/v1/auth/AuthApi.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/api/src/main/kotlin/io/github/aerain/api/v1/auth/AuthApi.kt -------------------------------------------------------------------------------- /api/src/main/kotlin/io/github/aerain/api/v1/post/PostApi.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/api/src/main/kotlin/io/github/aerain/api/v1/post/PostApi.kt -------------------------------------------------------------------------------- /api/src/main/kotlin/io/github/aerain/api/v1/profile/ProfileApi.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/api/src/main/kotlin/io/github/aerain/api/v1/profile/ProfileApi.kt -------------------------------------------------------------------------------- /data/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/build.gradle.kts -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/DataModule.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/DataModule.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/config/DataSourceProperties.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/config/DataSourceProperties.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/config/DatabaseModule.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/config/DatabaseModule.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/config/JwtProperties.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/config/JwtProperties.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/config/RetrofitModule.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/config/RetrofitModule.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/post/MariaDbPostRepository.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/post/MariaDbPostRepository.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/post/PostModule.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/post/PostModule.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/post/Posts.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/post/Posts.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/post/TransactionalCreatePostUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/post/TransactionalCreatePostUseCase.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/post/TransactionalDeletePostUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/post/TransactionalDeletePostUseCase.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/post/TransactionalGetAllPostUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/post/TransactionalGetAllPostUseCase.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/post/TransactionalGetPostUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/post/TransactionalGetPostUseCase.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/post/TransactionalUpdatePostUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/post/TransactionalUpdatePostUseCase.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/token/SharedSecretTokenManager.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/token/SharedSecretTokenManager.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/token/TokenFactory.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/token/TokenFactory.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/weather/WeatherApi.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/weather/WeatherApi.kt -------------------------------------------------------------------------------- /data/src/main/kotlin/io/github/aerain/data/weather/WeatherModule.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/data/src/main/kotlin/io/github/aerain/data/weather/WeatherModule.kt -------------------------------------------------------------------------------- /entity/build.gradle.kts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /entity/src/main/kotlin/io/github/aerain/entity/post/Post.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/entity/src/main/kotlin/io/github/aerain/entity/post/Post.kt -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/gradle.properties -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/gradle/wrapper/gradle-wrapper.properties -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/gradlew -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/gradlew.bat -------------------------------------------------------------------------------- /server/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/build.gradle.kts -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/Application.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/Application.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/config/ServerModule.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/config/ServerModule.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/config/ktor/ext/KoinApplicationCallExt.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/config/ktor/ext/KoinApplicationCallExt.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/config/ktor/ext/KoinApplicationEvents.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/config/ktor/ext/KoinApplicationEvents.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/config/ktor/ext/KoinFeature.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/config/ktor/ext/KoinFeature.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/plugins/Authentication.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/plugins/Authentication.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/plugins/ExceptionHandler.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/plugins/ExceptionHandler.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/plugins/HTTP.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/plugins/HTTP.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/plugins/Koin.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/plugins/Koin.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/plugins/Monitoring.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/plugins/Monitoring.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/plugins/Properties.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/plugins/Properties.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/plugins/Routing.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/plugins/Routing.kt -------------------------------------------------------------------------------- /server/src/main/kotlin/io/github/aerain/plugins/Serialization.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/kotlin/io/github/aerain/plugins/Serialization.kt -------------------------------------------------------------------------------- /server/src/main/resources/application.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/resources/application.conf -------------------------------------------------------------------------------- /server/src/main/resources/logback.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/main/resources/logback.xml -------------------------------------------------------------------------------- /server/src/test/kotlin/io/github/aerain/ApplicationTest.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/server/src/test/kotlin/io/github/aerain/ApplicationTest.kt -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/settings.gradle.kts -------------------------------------------------------------------------------- /usecase/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/build.gradle.kts -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/UseCase.kt: -------------------------------------------------------------------------------- 1 | package io.github.aerain.usecase 2 | 3 | annotation class UseCase -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/exception/BaseException.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/exception/BaseException.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/exception/NotFoundException.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/exception/NotFoundException.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/post/CreatePostUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/post/CreatePostUseCase.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/post/DeletePostUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/post/DeletePostUseCase.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/post/GetAllPostUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/post/GetAllPostUseCase.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/post/GetPostUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/post/GetPostUseCase.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/post/Mapper.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/post/Mapper.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/post/Post.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/post/Post.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/post/PostRepository.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/post/PostRepository.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/post/UpdatePostUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/post/UpdatePostUseCase.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/token/Context.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/token/Context.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/token/IssueResponse.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/token/IssueResponse.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/token/IssueTokenUseCase.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/token/IssueTokenUseCase.kt -------------------------------------------------------------------------------- /usecase/src/main/kotlin/io/github/aerain/usecase/token/TokenProvider.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aerain/ktor-clean-architecture/HEAD/usecase/src/main/kotlin/io/github/aerain/usecase/token/TokenProvider.kt --------------------------------------------------------------------------------