[ADD]第一个接口

This commit is contained in:
virus 2020-09-16 15:12:33 +08:00
parent d81d3b6ca9
commit a7aa671660
11 changed files with 389 additions and 4 deletions

View File

@ -5,7 +5,7 @@ PAGE_SIZE = 10
JWT_SECRET = 23347$040412 JWT_SECRET = 23347$040412
[server] [server]
HTTP_PORT = 8001 HTTP_PORT = 8002
READ_TIMEOUT = 60 READ_TIMEOUT = 60
WRITE_TIMEOUT = 60 WRITE_TIMEOUT = 60

151
docs/docs.go Normal file
View File

@ -0,0 +1,151 @@
// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
// This file was generated by swaggo/swag
package docs
import (
"bytes"
"encoding/json"
"strings"
"github.com/alecthomas/template"
"github.com/swaggo/swag"
)
var doc = `{
"schemes": {{ marshal .Schemes }},
"swagger": "2.0",
"info": {
"description": "{{.Description}}",
"title": "{{.Title}}",
"contact": {},
"license": {},
"version": "{{.Version}}"
},
"host": "{{.Host}}",
"basePath": "{{.BasePath}}",
"paths": {
"/admin/login": {
"post": {
"produces": [
"application/json"
],
"summary": "后台登录",
"parameters": [
{
"type": "string",
"description": "用户名",
"name": "username",
"in": "query",
"required": true
},
{
"type": "string",
"description": "密码",
"name": "password",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "{\"code\":200,\"data\":{},\"msg\":\"ok\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/admin/v1/employees": {
"get": {
"produces": [
"application/json"
],
"summary": "获取员工列表",
"parameters": [
{
"type": "string",
"description": "Token",
"name": "token",
"in": "query",
"required": true
},
{
"type": "string",
"description": "Department",
"name": "department",
"in": "query"
},
{
"type": "string",
"description": "Position",
"name": "position",
"in": "query"
},
{
"type": "integer",
"description": "State",
"name": "state",
"in": "query"
}
],
"responses": {
"200": {
"description": "{\"code\": 200, \"data\": {}, \"msg\":\"ok\"}",
"schema": {
"type": "string"
}
}
}
}
}
}
}`
type swaggerInfo struct {
Version string
Host string
BasePath string
Schemes []string
Title string
Description string
}
// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = swaggerInfo{
Version: "",
Host: "",
BasePath: "",
Schemes: []string{},
Title: "",
Description: "",
}
type s struct{}
func (s *s) ReadDoc() string {
sInfo := SwaggerInfo
sInfo.Description = strings.Replace(sInfo.Description, "\n", "\\n", -1)
t, err := template.New("swagger_info").Funcs(template.FuncMap{
"marshal": func(v interface{}) string {
a, _ := json.Marshal(v)
return string(a)
},
}).Parse(doc)
if err != nil {
return doc
}
var tpl bytes.Buffer
if err := t.Execute(&tpl, sInfo); err != nil {
return doc
}
return tpl.String()
}
func init() {
swag.Register(swag.Name, &s{})
}

84
docs/swagger.json Normal file
View File

@ -0,0 +1,84 @@
{
"swagger": "2.0",
"info": {
"contact": {},
"license": {}
},
"paths": {
"/admin/login": {
"post": {
"produces": [
"application/json"
],
"summary": "后台登录",
"parameters": [
{
"type": "string",
"description": "用户名",
"name": "username",
"in": "query",
"required": true
},
{
"type": "string",
"description": "密码",
"name": "password",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "{\"code\":200,\"data\":{},\"msg\":\"ok\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/admin/v1/employees": {
"get": {
"produces": [
"application/json"
],
"summary": "获取员工列表",
"parameters": [
{
"type": "string",
"description": "Token",
"name": "token",
"in": "query",
"required": true
},
{
"type": "string",
"description": "Department",
"name": "department",
"in": "query"
},
{
"type": "string",
"description": "Position",
"name": "position",
"in": "query"
},
{
"type": "integer",
"description": "State",
"name": "state",
"in": "query"
}
],
"responses": {
"200": {
"description": "{\"code\": 200, \"data\": {}, \"msg\":\"ok\"}",
"schema": {
"type": "string"
}
}
}
}
}
}
}

54
docs/swagger.yaml Normal file
View File

@ -0,0 +1,54 @@
info:
contact: {}
license: {}
paths:
/admin/login:
post:
parameters:
- description: 用户名
in: query
name: username
required: true
type: string
- description: 密码
in: query
name: password
required: true
type: string
produces:
- application/json
responses:
"200":
description: '{"code":200,"data":{},"msg":"ok"}'
schema:
type: string
summary: 后台登录
/admin/v1/employees:
get:
parameters:
- description: Token
in: query
name: token
required: true
type: string
- description: Department
in: query
name: department
type: string
- description: Position
in: query
name: position
type: string
- description: State
in: query
name: state
type: integer
produces:
- application/json
responses:
"200":
description: '{"code": 200, "data": {}, "msg":"ok"}'
schema:
type: string
summary: 获取员工列表
swagger: "2.0"

2
go.mod
View File

@ -3,6 +3,7 @@ module github.com/go-pripro/shop
go 1.15 go 1.15
require ( require (
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
github.com/astaxie/beego v1.12.2 github.com/astaxie/beego v1.12.2
github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/gin-gonic/gin v1.6.3 github.com/gin-gonic/gin v1.6.3
@ -12,6 +13,7 @@ require (
github.com/lib/pq v1.2.0 // indirect github.com/lib/pq v1.2.0 // indirect
github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 // indirect github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 // indirect
github.com/swaggo/gin-swagger v1.2.0 github.com/swaggo/gin-swagger v1.2.0
github.com/swaggo/swag v1.5.1
github.com/ugorji/go v1.1.8 // indirect github.com/ugorji/go v1.1.8 // indirect
github.com/unknwon/com v1.0.1 github.com/unknwon/com v1.0.1
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect

View File

@ -6,6 +6,7 @@ type Employee struct {
Password string `json:"password"` Password string `json:"password"`
Department string `json:"department"` Department string `json:"department"`
Position string `json:"position"` Position string `json:"position"`
State int `json:"state"`
} }
func CheckEmployee(username, password string) bool { func CheckEmployee(username, password string) bool {
@ -16,3 +17,15 @@ func CheckEmployee(username, password string) bool {
} }
return false return false
} }
func GetEmployeeTotal(maps interface{}) (count int) {
db.Model(&Employee{}).Where(maps).Count(&count)
return
}
func GetEmployees(pageNum int, pageSize int, maps interface{}) (employees []Employee) {
db.Where(maps).Offset(pageNum).Limit(pageSize).Find(&employees)
return
}

22
routers/admin.go Normal file
View File

@ -0,0 +1,22 @@
package routers
import (
"github.com/gin-gonic/gin"
"github.com/go-pripro/shop/middleware/jwt"
"github.com/go-pripro/shop/routers/admin"
v1 "github.com/go-pripro/shop/routers/admin/v1"
)
func InitAdmin(r *gin.Engine) *gin.Engine {
r.GET("/admin/login", admin.GetLogin)
adminv1 := r.Group("/admin/v1")
adminv1.Use(jwt.JWT())
{
// 获取员工列表
adminv1.GET("/employees", v1.GetEmployees)
}
return r
}

View File

@ -15,7 +15,13 @@ type Employee struct {
Password string `valid:"Required; MaxSize(50)"` Password string `valid:"Required; MaxSize(50)"`
} }
func GetEmployee(c *gin.Context) { // @Summary 后台登录
// @Produce json
// @Param username query string true "用户名"
// @Param password query string true "密码"
// @Success 200 {string} json "{"code":200,"data":{},"msg":"ok"}"
// @Router /admin/login [post]
func GetLogin(c *gin.Context) {
username := c.Query("username") username := c.Query("username")
password := c.Query("password") password := c.Query("password")
valid := validation.Validation{} valid := validation.Validation{}

View File

@ -0,0 +1,51 @@
package v1
import (
"github.com/astaxie/beego/validation"
"github.com/gin-gonic/gin"
"github.com/go-pripro/shop/models"
"github.com/go-pripro/shop/pkg/e"
"github.com/go-pripro/shop/pkg/logging"
"github.com/go-pripro/shop/pkg/setting"
"github.com/go-pripro/shop/pkg/util"
"github.com/unknwon/com"
"net/http"
)
// @Summary 获取员工列表
// @Produce json
// @Param token query string true "Token"
// @Param department query string false "Department"
// @Param position query string false "Position"
// @Param state query int false "State"
// @Success 200 {string} json "{"code": 200, "data": {}, "msg":"ok"}"
// @Router /admin/v1/employees [get]
func GetEmployees(c *gin.Context) {
data := make(map[string]interface{})
maps := make(map[string]interface{})
valid := validation.Validation{}
var state int = -1
if arg := c.Query("state"); arg != "" {
state = com.StrTo(arg).MustInt()
maps["state"] = state
valid.Range(state, 0, 1, "state").Message("状态只允许0或1")
}
code := e.INVALID_PARAMS
if ! valid.HasErrors() {
code = e.SUCCESS
data["lists"] = models.GetEmployees(util.GetPage(c), setting.PageSize, maps)
data["total"] = models.GetEmployeeTotal(maps)
} else {
for _, err := range valid.Errors {
logging.Info(err.Key, err.Message)
//log.Printf("err.key: %s, err.message: %s", err.Key, err.Message)
}
}
c.JSON(http.StatusOK, gin.H{
"code" : code,
"msg" : e.GetMsg(code),
"data" : data,
})
}

1
routers/api.go Normal file
View File

@ -0,0 +1 @@
package routers

View File

@ -2,8 +2,8 @@ package routers
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
_ "github.com/go-pripro/shop/docs"
"github.com/go-pripro/shop/pkg/setting" "github.com/go-pripro/shop/pkg/setting"
"github.com/go-pripro/shop/routers/admin"
ginSwagger "github.com/swaggo/gin-swagger" ginSwagger "github.com/swaggo/gin-swagger"
"github.com/swaggo/gin-swagger/swaggerFiles" "github.com/swaggo/gin-swagger/swaggerFiles"
) )
@ -30,7 +30,8 @@ func InitRouter() *gin.Engine {
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
r.GET("/login", admin.GetEmployee) // 初始化admin
r = InitAdmin(r)
return r return r
} }