#2 - add swaggerset
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package swaggerset
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
@@ -10,24 +9,17 @@ import (
|
||||
dynamicstruct "github.com/ompluscator/dynamic-struct"
|
||||
)
|
||||
|
||||
type messages struct {
|
||||
Msgs []message
|
||||
type Message struct {
|
||||
Type string
|
||||
Request httpRequest
|
||||
Response interface{}
|
||||
}
|
||||
|
||||
func newMessages() *messages {
|
||||
return &messages{
|
||||
Msgs: make([]message, 0),
|
||||
}
|
||||
type httpRequest struct {
|
||||
Header interface{}
|
||||
Body interface{}
|
||||
}
|
||||
|
||||
type message struct {
|
||||
Type string
|
||||
RequestParam interface{}
|
||||
RequestBody interface{}
|
||||
Response interface{}
|
||||
}
|
||||
|
||||
// Обработка операции (GET или POST)
|
||||
func handleOperation(method string, operation *openapi3.Operation) (reqParam, reqBody, rsp interface{}) {
|
||||
fmt.Printf(" Method: %s\n", method)
|
||||
|
||||
@@ -37,23 +29,21 @@ func handleOperation(method string, operation *openapi3.Operation) (reqParam, re
|
||||
for _, paramRef := range operation.Parameters {
|
||||
param := paramRef.Value
|
||||
fieldName := capitalize(param.Name)
|
||||
jsonName := strings.ToLower(param.Name[:1]) + param.Name[1:]
|
||||
goType := getGoType(param.Schema)
|
||||
|
||||
// В зависимости от того, где параметр находится (header, query, path, etc.), добавляем соответствующий тег
|
||||
switch param.In {
|
||||
case "query":
|
||||
paramsStruct = paramsStruct.AddField(fieldName, goType, fmt.Sprintf(`json:"%s" query:"%s"`, param.Name, param.Name))
|
||||
paramsStruct = paramsStruct.AddField(fieldName, goType, fmt.Sprintf(`json:"%s" query:"%s"`, jsonName, jsonName))
|
||||
case "header":
|
||||
paramsStruct = paramsStruct.AddField(fieldName, goType, fmt.Sprintf(`json:"%s" header:"%s"`, param.Name, param.Name))
|
||||
paramsStruct = paramsStruct.AddField(fieldName, goType, fmt.Sprintf(`json:"%s" header:"%s"`, jsonName, jsonName))
|
||||
default:
|
||||
paramsStruct = paramsStruct.AddField(fieldName, goType, fmt.Sprintf(`json:"%s"`, param.Name))
|
||||
paramsStruct = paramsStruct.AddField(fieldName, goType, fmt.Sprintf(`json:"%s"`, jsonName))
|
||||
}
|
||||
}
|
||||
requestStruct := paramsStruct.Build().New()
|
||||
fmt.Printf(" Request (Parameters): %+v\n", requestStruct)
|
||||
buf, _ := json.Marshal(requestStruct)
|
||||
fmt.Printf(" Request (Parameters) JSON: %s\n", buf)
|
||||
reqParam = requestStruct
|
||||
// Получили структуру запроса для методов, где есть параметры в header, query, path, etc., добавили теги
|
||||
reqParam = paramsStruct.Build().New()
|
||||
}
|
||||
|
||||
// Обработка тела запроса (POST)
|
||||
@@ -62,9 +52,7 @@ func handleOperation(method string, operation *openapi3.Operation) (reqParam, re
|
||||
bodyFields := buildDynamicStruct(content.Schema)
|
||||
bodyStruct := reflect.StructOf(bodyFields)
|
||||
bodyInstance := reflect.New(bodyStruct).Interface()
|
||||
fmt.Printf(" Request (Body): %+v\n", bodyInstance)
|
||||
buf, _ := json.Marshal(bodyInstance)
|
||||
fmt.Printf(" Request (Body) JSON: %s\n", buf)
|
||||
// Получили тело запроса
|
||||
reqBody = bodyInstance
|
||||
}
|
||||
}
|
||||
@@ -76,9 +64,7 @@ func handleOperation(method string, operation *openapi3.Operation) (reqParam, re
|
||||
responseFields := buildDynamicStruct(content.Schema)
|
||||
responseStruct := reflect.StructOf(responseFields)
|
||||
responseInstance := reflect.New(responseStruct).Interface()
|
||||
fmt.Printf(" Response: %+v\n", responseInstance)
|
||||
buf, _ := json.Marshal(responseInstance)
|
||||
fmt.Printf(" Response JSON: %s\n", buf)
|
||||
// Получили структуру ответа
|
||||
rsp = responseInstance
|
||||
}
|
||||
}
|
||||
@@ -88,11 +74,10 @@ func handleOperation(method string, operation *openapi3.Operation) (reqParam, re
|
||||
|
||||
// Рекурсивное создание структуры из схемы с учетом $ref
|
||||
func buildDynamicStruct(schema *openapi3.SchemaRef) []reflect.StructField {
|
||||
var builder []reflect.StructField
|
||||
fmt.Println("ref: ", schema.Ref)
|
||||
var sfields []reflect.StructField
|
||||
|
||||
if len(schema.Value.Properties) == 0 {
|
||||
return builder
|
||||
return sfields
|
||||
}
|
||||
|
||||
for name, prop := range schema.Value.Properties {
|
||||
@@ -106,7 +91,7 @@ func buildDynamicStruct(schema *openapi3.SchemaRef) []reflect.StructField {
|
||||
Tag: reflect.StructTag(fmt.Sprintf(`json:"%s"`, name)),
|
||||
}
|
||||
|
||||
builder = append(builder, sfield)
|
||||
sfields = append(sfields, sfield)
|
||||
} else {
|
||||
sfield := reflect.StructField{
|
||||
Name: fieldName,
|
||||
@@ -114,11 +99,11 @@ func buildDynamicStruct(schema *openapi3.SchemaRef) []reflect.StructField {
|
||||
Tag: reflect.StructTag(fmt.Sprintf(`json:"%s"`, name)),
|
||||
}
|
||||
|
||||
builder = append(builder, sfield)
|
||||
sfields = append(sfields, sfield)
|
||||
}
|
||||
}
|
||||
|
||||
return builder
|
||||
return sfields
|
||||
}
|
||||
|
||||
// Преобразование типа OpenAPI в тип Go
|
||||
@@ -152,7 +137,7 @@ func capitalize(fieldName string) string {
|
||||
// Обрабатываем каждый фрагмент
|
||||
for i := 0; i < len(parts); i++ {
|
||||
// Капитализируем первые буквы всех частей, кроме первой
|
||||
parts[i] = strings.Title(parts[i])
|
||||
parts[i] = strings.Title(parts[i]) //cases.Title(language.English).String(parts[i])
|
||||
}
|
||||
|
||||
// Собираем строку обратно, соединяя части без подчеркиваний
|
||||
|
Reference in New Issue
Block a user