Coder Social home page Coder Social logo

graphkt's Introduction

graphkt

Generate a GraphQL schema and corresponding Apollo client from a shared Kotlin DSL. Built as part of the Project III course at the University of Applied Sciences Brandenburg.

Supported Clients

  • Java
  • Kotlin

Kotlin DSL

val schema = buildSchema(name = "MySchema") {
    queries {
        Query(name = "optimizeDirections") {
            inputs {
                Input { name("directions"); type("DirectionsInput!") }
            }

            Output(type = "Directions!") {
                FragmentSelection { name("directionsFragment") }
            }
        }
    }

    types {
        Type(name = "Directions") {
            generateFragment(true)
            generateInput(true)

            fields {
                Field { name("originLatLng"); type("[String!]!") }
                Field { name("destinationLatLng"); type("[String!]!") }
                Field { name("waypoints"); type("[String!]!") }
            }
        }
    }
}

Result

Schema

schema {
    query: Query
}

type Query {
    optimizeDirections(directions: DirectionsInput!): Directions!
}

type Directions {
    originLatLng: [String!]!
    destinationLatLng: [String!]!
    waypoints: [String!]!
}

input DirectionsInput {
    originLatLng: [String!]!
    destinationLatLng: [String!]!
    waypoints: [String!]!
}

fragment directionsFragment on Directions {
    originLatLng
    destinationLatLng
    waypoints
}

Client query

query OptimizeDirections($directions: DirectionsInput!) {
    optimizeDirections(directions: $directions) {
        ...directionsFragment
    }
}

Java Client

class RemoteDataSourceImpl implements RemoteDataSource {

    private final ApolloClient apollo;
    private final SchedulerProvider schedulerProvider;

    public RemoteDataSourceImpl(ApolloClient apollo, SchedulerProvider schedulerProvider) {
        this.apollo = apollo;
        this.schedulerProvider = schedulerProvider;
    }

    @Override
    public Observable<OptimizeDirections.Data> optimizeDirections(DirectionsInput directions) {
        ApolloQueryCall<OptimizeDirections.Data> call = apollo.query(
             OptimizeDirections.builder()
                 .directions(directions)
                 .build()
        );

        return Rx3Apollo.from(call)
            .subscribeOn(schedulerProvider.io())
            .observeOn(schedulerProvider.main())
            .map(response -> response.getData());
    }
}

graphkt's People

Contributors

itsandreramon avatar

Watchers

 avatar

graphkt's Issues

Use generics

Add mapping from generic type to GraphQL type.

Example:
T::class.name -> String!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.