https://github.com/rintoj/hypergraph-server
https://github.com/rintoj/hypergraph-server
Last synced: 5 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/rintoj/hypergraph-server
- Owner: rintoj
- License: mit
- Created: 2023-06-29T11:25:14.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2023-07-21T07:05:04.000Z (almost 3 years ago)
- Last Synced: 2026-01-02T22:41:14.307Z (6 months ago)
- Language: TypeScript
- Size: 140 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Hypergraph Server
With the help of this package you can spin off a service to serve a REST or GraphQL endpoint
## Install
Using npm:
```sh
npm install @hgraph/server
```
Using yarn:
```sh
yarn add @hgraph/server
```
## Usage
Setup a service
```sh
mkdir my-service
cd my-service
yarn init -y
```
Setup `src/index.ts`
```ts
import 'reflect-metadata'
import { initializeGraphqlServer } from 'hypergraph-graphql'
import { bootstrapServer, createMiddleware } from '@hgraph/server'
import { createSchema } from './schema'
async function run() {
await bootstrapServer({
port: 4000,
apiRoot: '/api',
controllers: [`${__dirname}/**/*-controller.ts`],
})
}
void run()
```
Add controller
```ts
import { Controller, Get } from '@hgraph/server'
@Controller('/user')
export class UserController {
@Get('/me')
async findCurrentUser() {
return { user: null } // your logic
}
}
```
Start the service
```bash
npx ts-node src/index.ts
```
This will expose a GET url [http://localhost:4000/api/user/me](http://localhost:4000/api/user/me)
```bash
[2023-06-29T16:43:35.723] [INFO ] [TSED] - Injector created... +3ms
[2023-06-29T16:43:35.723] [INFO ] [TSED] - Build providers +0ms
[2023-06-29T16:43:35.734] [INFO ] [TSED] - Settings and injector loaded... +11ms
[2023-06-29T16:43:35.736] [INFO ] [TSED] - Load routes +2ms
[2023-06-29T16:43:35.736] [INFO ] [TSED] - Routes mounted... +0ms
[2023-06-29T16:43:35.737] [INFO ] [TSED] -
┌───────────────┬──────────────┬──────────────────────────────────┐
│ Method │ Endpoint │ Class method │
│───────────────│──────────────│──────────────────────────────────│
│ GET │ /api/user/me │ UserController.findCurrentUser() │
└───────────────┴──────────────┴──────────────────────────────────┘
[2023-06-29T16:43:35.738] [INFO ] [TSED] - Listen server on http://0.0.0.0:4001
[2023-06-29T16:43:35.738] [INFO ] [TSED] - Started in 18 ms +2ms
```
## Adding GraphQL
Create `src/schema.ts`
```ts
import { createGraphqlSchema, referenceResolver } from 'hypergraph-graphql'
export async function createSchema() {
return await createGraphqlSchema({
resolvers: [`${__dirname}/**/*-resolver.ts`],
referenceResolvers: {
// User: referenceResolver(UserRepository),
},
authChecker: () => true,
})
}
```
Modify `src/index.ts`
```ts
async function run() {
const schema = await createSchema()
const router = initializeGraphqlServer({ schema })
await bootstrapServer({
port: 4000,
apiRoot: '/api',
controllers: [`${__dirname}/**/*-controller.ts`],
middlewares: [createMiddleware(router)],
})
}
```
Create a user schema by adding `src/schema/user/user-schema.ts`
```ts
import { Field, ObjectType } from 'type-graphql'
import { Repository } from 'hypergraph-storage'
@ObjectType()
export class User {
@Field()
id!: string
@Field()
name?: string
}
```
Add resolver `src/resolver/user/user-resolver.ts`
```ts
import { Query, Resolver } from 'type-graphql'
import { User } from '../../schema/user/user'
@Resolver()
export class UserResolver {
@Query(() => User, { nullable: true })
me() {
return null
}
}
```
Now start the service. This will expose a new endpoint
[http://localhost:4000/graphql](http://localhost:4000/graphql)