/
swagger.go
102 lines (95 loc) · 2.43 KB
/
swagger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package controllers
import (
"github.com/zpatrick/fireball"
"github.com/zpatrick/fireball/examples/swagger/models"
swagger "github.com/zpatrick/go-plugin-swagger"
)
type SwaggerController struct{}
func NewSwaggerController() *SwaggerController {
return &SwaggerController{}
}
func (s *SwaggerController) Routes() []*fireball.Route {
routes := []*fireball.Route{
{
Path: "/swagger.json",
Handlers: fireball.Handlers{
"GET": s.ServeSwaggerSpec,
},
},
}
return routes
}
func (s *SwaggerController) ServeSwaggerSpec(c *fireball.Context) (fireball.Response, error) {
spec := swagger.Spec{
SwaggerVersion: "2.0",
Schemes: []string{"http"},
Info: &swagger.Info{
Title: "Swagger Example",
Version: "0.0.1",
},
Definitions: map[string]swagger.Definition{
"Movie": models.Movie{}.Definition(),
},
Tags: []swagger.Tag{
{
Name: "Movies",
Description: "Methods related to movies",
},
},
Paths: map[string]swagger.Path{
"/movies": map[string]swagger.Method{
"get": {
Summary: "List all Movies",
Tags: []string{"Movies"},
Responses: map[string]swagger.Response{
"200": {
Description: "An array of movies",
Schema: swagger.NewObjectSliceSchema("Movie"),
},
},
},
"post": {
Summary: "Add a Movie",
Tags: []string{"Movies"},
Parameters: []swagger.Parameter{
swagger.NewBodyParam("Movie", "Movie to add", true),
},
Responses: map[string]swagger.Response{
"200": {
Description: "The added movie",
Schema: swagger.NewObjectSchema("Movie"),
},
},
},
},
"/movies/{title}": map[string]swagger.Method{
"get": {
Summary: "Describe a Movie",
Tags: []string{"Movies"},
Parameters: []swagger.Parameter{
swagger.NewStringPathParam("title", "Title of the movie to describe", true),
},
Responses: map[string]swagger.Response{
"200": {
Description: "The desired movie",
Schema: swagger.NewObjectSchema("Movie"),
},
},
},
"delete": {
Summary: "Delete a Movie",
Tags: []string{"Movies"},
Parameters: []swagger.Parameter{
swagger.NewStringPathParam("title", "Title of the movie to delete", true),
},
Responses: map[string]swagger.Response{
"200": {
Description: "Success",
},
},
},
},
},
}
return fireball.NewJSONResponse(200, spec)
}