• Stars
    star
    319
  • Rank 131,491 (Top 3 %)
  • Language
    Kotlin
  • License
    MIT License
  • Created over 3 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Kotlin backend based on the Clean Architecture principles. Ktor, JWT, Exposed, Flyway, OpenAPI/REST & KGraphQL/GraphQL generated endpoints, Gradle.

Kotlin Clean Architecture Backend

Kotlin backend based on the Clean Architecture principles.

The application is separated into three modules: Domain, Usecases and Adapters

  • Domain module contains all entities, it's validation and repository interfaces
  • Usecases module performs actions on the domain entities and repositories and does authorization

The domain and usecases modules do not have any external dependencies.

  • Adapter layer: each adapter is implemented as a standalone module, lowering dependence on specific frameworks and libraries and making them interchangable. The infrastructure module consumes all adapters (e.g. databases, (graphql) endpoints, authentication logic)

GraphQL endpoints are auto-generated from the Usecases

Technologies:

Ktor, JWT, Exposed, Flyway, OpenAPI/REST & KGraphQL/GraphQL generated endpoints, Gradle.

image

OpenAPI REST

Docs URL: http://localhost:8080/docs

API definitions: http://localhost:8080/openapi.json

GraphQL

Playground URL: http://localhost:8080/graphql

Login

query Login {
  LoginUser(a0: { email: "[email protected]", password: "P@ssw0rd!" })
}

Retrieve current user

query CurrentUser {
  AuthenticatedUser {
    id
    email
    authorities
  }
}
HTTP Headers
{
  "Authorization": "Bearer [TOKEN FROM LOGIN]"
}

Create new user

mutation CreateUser {
  CreateUser(
    a0: {
      email: "[email protected]"
      password: "Penait1!"
      authorities: [USER]
    }
  ) {
    id
    email
    authorities
  }
}
HTTP Headers
{
  "Authorization": "Bearer [TOKEN FROM LOGIN]"
}