Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kriswep/morphlog

Log your products' changes
https://github.com/kriswep/morphlog

agile agile-development changelog changelogger graphql prisma product-management

Last synced: 12 days ago
JSON representation

Log your products' changes

Awesome Lists containing this project

README

        

# typescript-advanced

🚀 Advanced starter code for a scalable, production-ready GraphQL server written in TypeScript, including authentication and realtime functionality with GraphQL subscriptions.

## Features

* **Scalable GraphQL Server:** `graphql-yoga` based on Apollo Server & Express
* **GraphQL-native database:** Includes GraphQL database binding to Prisma (running on MySQL)
* Out-of-the-box support for [GraphQL Playground](https://github.com/prisma/graphql-playground) & [Tracing](https://github.com/apollographql/apollo-tracing)
* Simple data model – easy to adjust
* Preconfigured [`graphql-config`](https://github.com/prisma/graphql-config) setup
* Authentication based on email & password
* Realtime functionality with GraphQL subscriptions (_coming soon_)

## Requirements

You need to have the following tools installed:

* Node 8+ & TypeScript
* GraphQL CLI: `npm i -g graphql-cli`

## Getting started

```sh
# 1. Bootstrap GraphQL server in directory `my-app`, based on `typescript-advanced` boilerplate
graphql create my-app --boilerplate typescript-advanced

# 2. When prompted, choose the Prisma cluster you want to deploy to
# e.g. prisma-eu1 or prisma-us1 to deploy to a public cluster (recommended)
# or locally (requires Docker)

# 3. Navigate to the new project
cd my-app

# 4. Start server (runs on http://localhost:4000) and open GraphQL Playground
yarn dev
# or
# yarn start # (only starts the server, no access to the Prisma API)
```

> **Note**: We recommend that you're using `yarn dev` during development as it will give you access to the GraphQL API or your server (defined by the **application schema**) as well as to the Prisma API directly (defined by the **Prisma schema**). If you're starting the server with `yarn start`, you'll only be able to access the API for the application schema.

## Docs

### add to model

* add in `database/datamodel.graphql`
* `prisma deploy`
* `yarn graphql prepare` # for type generation

### Commands

* `yarn start` starts GraphQL server on `http://localhost:4000` (only allows access to the \_appl)
* `yarn debug` starts GraphQL server in debug mode (open [chrome://inspect/#devices](chrome://inspect/#devices) to debug)
* `yarn dev` starts GraphQL server opens the GraphQL Playground for the `projects` defined in [`.graphqlconfig.yml`](./.graphqlconfig.yml)
* `yarn playground` opens the GraphQL Playground for the `projects` defined in [`.graphqlconfig.yml`](./.graphqlconfig.yml)
* `yarn prisma ` access to local version of Prisma CLI (e.g. `yarn prisma deploy`)

### Project structure

#### `/` - configuration files

* [`.env`](./.env) Contains important environment variables for development. Read about how it works [here](https://github.com/motdotla/dotenv).
* [`.graphqlconfig.yml`](./.graphqlconfig.yml) GraphQL configuration file containing the endpoints and schema configuration. Used by the [`graphql-cli`](https://github.com/prisma/graphql-cli) and the [GraphQL Playground](https://github.com/prisma/graphql-playground). See [`graphql-config`](https://github.com/prisma/graphql-config) for more information.

#### `/database` - Prisma service

* [`database/prisma.yml`](./database/prisma.yml) The configuration file for your database service ([documentation](https://www.prismagraphql.com/docs/reference/prisma.yml/overview-and-example-foatho8aip)).
* [`database/datamodel.graphql`](./database/datamodel.graphql) contains the data model that you define for your database service (written in [SDL](https://blog.graph.cool/graphql-sdl-schema-definition-language-6755bcb9ce51)).

#### `/src` - application server

* [`src/schema.graphql`](src/schema.graphql) defines your **application schema**. It contains the GraphQL API that you want to expose to your client applications.
* [`src/index.js`](src/index.js) is the entry point of your server, putting everything together and starting the `GraphQLServer` from [`graphql-yoga`](https://github.com/prisma/graphql-yoga).
* [`src/resolvers/`](src/resolvers) contains the actual business logic of your application. In GraphQL, you implement [resolver functions](http://graphql.org/learn/execution/) that _resolve_ a specific query being requested.
* [`src/generated/prisma.graphql`](src/generated/prisma.graphql) defines the **database schema**. It contains the GraphQL API exposed by the Prisma Database. This file is automatically generated every time `yarn prisma deploy` is executed, according to the datamodel in `database/datamodel.graphql`.
* [`src/generated/prisma.ts`](src/generated/prisma.ts) contains the generated TypeScript type definitions from the `prisma-binding`. You can read more about static bindings in this [article](https://blog.graph.cool/reusing-composing-graphql-apis-with-graphql-bindings-80a4aa37cff5).

## Contributing

Your feedback is **very helpful**, please share your opinion and thoughts! If you have any questions, join the [`#graphql-boilerplates`](https://prisma.slack.com/messages/graphql-boilerplates) channel on our [Slack](https://prisma.slack.com/).