Skip to content

Commit

Permalink
fix context
Browse files Browse the repository at this point in the history
  • Loading branch information
markus621 committed Jun 19, 2022
1 parent a6ea44a commit 06f2f0b
Show file tree
Hide file tree
Showing 12 changed files with 273 additions and 139 deletions.
102 changes: 4 additions & 98 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,10 @@
# Goppy Microservice Toolkit

[![GoDoc](https://godoc.org/github.com/dewep-online/goppy?status.svg)](https://godoc.org/github.com/dewep-online/goppy)
[![Coverage Status](https://coveralls.io/repos/github/dewep-online/goppy/badge.svg?branch=master)](https://coveralls.io/github/dewep-online/goppy?branch=master)
[![Release](https://img.shields.io/github/release/dewep-online/goppy.svg?style=flat-square)](https://github.com/dewep-online/goppy/releases/latest)
[![Go Report Card](https://goreportcard.com/badge/github.com/dewep-online/goppy)](https://goreportcard.com/report/github.com/dewep-online/goppy)
[![CI](https://github.com/dewep-online/goppy/actions/workflows/ci.yml/badge.svg)](https://github.com/dewep-online/goppy/actions/workflows/ci.yml)
[![Codeql](https://github.com/dewep-online/goppy/actions/workflows/codeql.yml/badge.svg)](https://github.com/dewep-online/goppy/actions/workflows/codeql.yml)

## Installation

```bash
go get -u github.com/dewep-online/goppy
```
![GitHub](https://img.shields.io/github/license/dewep-online/goppy)

## Features

Expand All @@ -23,96 +16,9 @@ go get -u github.com/dewep-online/goppy
- Built-in dependency container
- Data binding for JSON

## Plugins

| Plugin |Comment| Import |
|--------------|---|------------------------------------------------------|
| **debug** |profiling application (pprof) with HTTP access.| `http.WithHTTPDebug()` |
| **http** |Out of the box multi-server launch of web servers with separate routing. Grouping of routers with connection to a group of dedicated middleware.| `http.WithHTTP()` |
| **database** |Multi connection pools with MySQL and SQLite databases (with initialization migration setup).| `database.WithMySQL()` `database.WithSQLite()` |
| **geoip** |Definition of geo-IP information.| `geoip.WithMaxMindGeoIP()` + `middlewares.CloudflareMiddleware()` `middlewares.MaxMindMiddleware()` |


## Quick Start

Config:

```yaml
env: dev
pid: ""
level: 4
log: /dev/stdout

debug:
addr: 127.0.0.1:12000

http:
main:
addr: 127.0.0.1:8080
```
Code:
```go
package main

import (
"github.com/dewep-online/goppy"
"github.com/dewep-online/goppy/plugins"
"github.com/dewep-online/goppy/plugins/http"
"github.com/dewep-online/goppy/middlewares"
)

func main() {

app := goppy.New()
app.WithConfig("./config.yaml")
app.Plugins(
http.WithHTTPDebug(),
http.WithHTTP(),
)
app.Plugins(
plugins.Plugin{
Inject: NewController,
Resolve: func(routes *http.RouterPool, c *Controller) {
router := routes.Main()
router.Use(middlewares.ThrottlingMiddleware(100))
router.Get("/users", c.Users)

api := router.Collection("/api/v1", middlewares.ThrottlingMiddleware(100))
api.Get("/user/{id}", c.User)
},
},
)
app.Run()

}

type Controller struct{}

func NewController() *Controller {
return &Controller{}
}

func (v *Controller) Users(ctx http.Ctx) {
data := []int64{1, 2, 3, 4}
ctx.SetBody().JSON(data)
}

func (v *Controller) User(ctx http.Ctx) {
id, _ := ctx.Param("id").Int()

ctx.SetBody().Error(http.ErrMessage{
HTTPCode: 400,
InternalCode: "x1000",
Message: "user not found",
Ctx: map[string]interface{}{"id": id},
})

ctx.Log().Infof("user - %d", id)
}
## Guide

```
[![guide](https://img.shields.io/badge/giude-goppy.ru-green)](https://goppy.ru)

## Contribute

Expand All @@ -131,7 +37,7 @@ func (v *Controller) User(ctx http.Ctx) {

## Community

- [Forum](https://github.com/dewep-online/goppy/discussions)
[![Forum](https://img.shields.io/badge/community-forum-red)](https://github.com/dewep-online/goppy/discussions)

## License

Expand Down
43 changes: 43 additions & 0 deletions config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
env: dev
pid: ""
level: 4
log: /dev/stdout

debug:
addr: 127.0.0.1:12000
read_timeout: 0s
write_timeout: 0s
idle_timeout: 0s
shutdown_timeout: 0s

http:
main:
addr: 127.0.0.1:8080
read_timeout: 0s
write_timeout: 0s
idle_timeout: 0s
shutdown_timeout: 0s

mysql:
- name: main
host: 127.0.0.1
port: 3306
schema: test_database
user: test
password: test
maxidleconn: 5
maxopenconn: 5
maxconnttl: 50s
interpolateparams: false
timezone: UTC
txisolevel: ""
charset: utf8mb4,utf8
timeout: 5s
readtimeout: 5s
writetimeout: 5s

sqlite:
- name: main
file: ./sqlite.db
init_migration:
- ./migration.sql
File renamed without changes.
98 changes: 98 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# Goppy Microservice Toolkit


[![Release](https://img.shields.io/github/release/dewep-online/goppy.svg?style=flat-square)](https://github.com/dewep-online/goppy/releases/latest)
![GitHub](https://img.shields.io/github/license/dewep-online/goppy)
[![Forum](https://img.shields.io/badge/community-forum-red)](https://github.com/dewep-online/goppy/discussions)

## Installation

```bash
go get -u github.com/dewep-online/goppy
```

## Features

- Config auto generation
- Custom pool of HTTP servers with configuration via config
- Group APIs with middleware hanging on each group
- Extensible middleware framework
- Application customization via plugins
- Built-in dependency container
- Data binding for JSON

## Plugins

| Plugin |Comment| Import |
|--------------|---|------------------------------------------------------|
| **debug** |profiling application (pprof) with HTTP access.| `http.WithHTTPDebug()` |
| **http** |Out of the box multi-server launch of web servers with separate routing. Grouping of routers with connection to a group of dedicated middleware.| `http.WithHTTP()` |
| **database** |Multi connection pools with MySQL and SQLite databases (with initialization migration setup).| `database.WithMySQL()` `database.WithSQLite()` |
| **geoip** |Definition of geo-IP information.| `geoip.WithMaxMindGeoIP()` + `middlewares.CloudflareMiddleware()` `middlewares.MaxMindMiddleware()` |


## Quick Start

Config:

```yaml
env: dev
level: 4
log: /dev/stdout

http:
main:
addr: 127.0.0.1:8088
```
Code:
```go
package main

import (
"github.com/dewep-online/goppy"
"github.com/dewep-online/goppy/middlewares"
"github.com/dewep-online/goppy/plugins"
"github.com/dewep-online/goppy/plugins/http"
)

func main() {
app := goppy.New()
app.WithConfig("./config.yaml")
app.Plugins(
http.WithHTTP(),
)
app.Plugins(
plugins.Plugin{
Inject: NewController,
Resolve: func(routes http.RouterPool, c *Controller) {
router := routes.Main()
router.Use(middlewares.ThrottlingMiddleware(100))
router.Get("/users", c.Users)

api := router.Collection("/api/v1", middlewares.ThrottlingMiddleware(100))
api.Get("/user/{id}", c.User)
},
},
)
app.Run()
}

type Controller struct{}

func NewController() *Controller {
return &Controller{}
}

func (v *Controller) Users(ctx http.Ctx) {
data := []int64{1, 2, 3, 4}
ctx.SetBody(200).JSON(data)
}

func (v *Controller) User(ctx http.Ctx) {
id, _ := ctx.Param("id").Int()
ctx.SetBody(200).String("user id: %d", id)
ctx.Log().Infof("user - %d", id)
}
```
File renamed without changes.
7 changes: 7 additions & 0 deletions examples/demo-basic/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
env: dev
level: 4
log: /dev/stdout

http:
main:
addr: 127.0.0.1:8088
47 changes: 47 additions & 0 deletions examples/demo-basic/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package main

import (
"github.com/dewep-online/goppy"
"github.com/dewep-online/goppy/middlewares"
"github.com/dewep-online/goppy/plugins"
"github.com/dewep-online/goppy/plugins/http"
)

func main() {
app := goppy.New()
app.WithConfig("./config.yaml")
app.Plugins(
http.WithHTTP(),
)
app.Plugins(
plugins.Plugin{
Inject: NewController,
Resolve: func(routes http.RouterPool, c *Controller) {
router := routes.Main()
router.Use(middlewares.ThrottlingMiddleware(100))
router.Get("/users", c.Users)

api := router.Collection("/api/v1", middlewares.ThrottlingMiddleware(100))
api.Get("/user/{id}", c.User)
},
},
)
app.Run()
}

type Controller struct{}

func NewController() *Controller {
return &Controller{}
}

func (v *Controller) Users(ctx http.Ctx) {
data := []int64{1, 2, 3, 4}
ctx.SetBody(200).JSON(data)
}

func (v *Controller) User(ctx http.Ctx) {
id, _ := ctx.Param("id").Int()
ctx.SetBody(200).String("user id: %d", id)
ctx.Log().Infof("user - %d", id)
}
2 changes: 1 addition & 1 deletion examples/demo-database/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ debug:

http:
main:
addr: 127.0.0.1:8080
addr: 127.0.0.1:8088
read_timeout: 0s
write_timeout: 0s
idle_timeout: 0s
Expand Down
11 changes: 4 additions & 7 deletions examples/demo-database/main.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package main

import (
"fmt"

"github.com/dewep-online/goppy"
"github.com/dewep-online/goppy/middlewares"
"github.com/dewep-online/goppy/plugins"
Expand Down Expand Up @@ -47,7 +49,7 @@ func NewController(v database.MySQL) *Controller {

func (v *Controller) Users(ctx http.Ctx) {
data := []int64{1, 2, 3, 4}
ctx.SetBody().JSON(data)
ctx.SetBody(200).JSON(data)
}

func (v *Controller) User(ctx http.Ctx) {
Expand All @@ -58,12 +60,7 @@ func (v *Controller) User(ctx http.Ctx) {
ctx.Log().Errorf("db: %s", err.Error())
}

ctx.SetBody().Error(http.ErrMessage{
HTTPCode: 400,
InternalCode: "x1000",
Message: "user not found",
Ctx: map[string]interface{}{"id": id},
})
ctx.SetBody(400).ErrorJSON(fmt.Errorf("user not found"), "x1000", http.ErrCtx{"id": id})

ctx.Log().Infof("user - %d", id)
}
2 changes: 1 addition & 1 deletion examples/demo-geoip/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func main() {
Country: geoip.GetCountryName(ctx),
ProxyIPs: geoip.GetProxyIPs(ctx),
}
ctx.SetBody().JSON(&m)
ctx.SetBody(200).JSON(&m)
})
},
},
Expand Down
Loading

0 comments on commit 06f2f0b

Please sign in to comment.