From 9f9f2840f568fcb720809739d7418fc5533031af Mon Sep 17 00:00:00 2001
From: Johan de Klerk <jdeklerk00@gmail.com>
Date: Wed, 11 May 2022 14:00:22 +0200
Subject: [PATCH] docs - added summary

---
 api_documentation/api_documentation.go | 29 ++++++++++++++++++++++++--
 string_utils/string_utils.go           | 21 +++++++++++++++++--
 2 files changed, 46 insertions(+), 4 deletions(-)

diff --git a/api_documentation/api_documentation.go b/api_documentation/api_documentation.go
index 68cc626..ad413d4 100644
--- a/api_documentation/api_documentation.go
+++ b/api_documentation/api_documentation.go
@@ -3,6 +3,7 @@ package api_documentation
 import (
 	"fmt"
 	"gitlab.com/uafrica/go-utils/logs"
+	"gitlab.com/uafrica/go-utils/string_utils"
 	"go/doc"
 	"go/parser"
 	"go/token"
@@ -30,6 +31,7 @@ type DocSchemas struct {
 
 type DocMethodInfo struct {
 	Description string                       `json:"description"`
+	Summary     string                       `json:"summary"`
 	Tags        []string                     `json:"tags"`
 	RequestBody *DocRequestBody              `json:"requestBody,omitempty"`
 	Parameters  []DocParam                   `json:"parameters,omitempty"`
@@ -92,6 +94,7 @@ func GetDocs(endpointHandlers map[string]map[string]interface{}, corePath string
 				// Meta data
 				functionName := GetFunctionName(handler.FuncValue.Interface())
 				docMethod.Description = functionDocs[functionName]
+				docMethod.Summary = functionNameToSummary(functionName, method)
 				docMethod.Tags = []string{path}
 
 				// Parameters
@@ -138,6 +141,29 @@ func GetDocs(endpointHandlers map[string]map[string]interface{}, corePath string
 	return docs, nil
 }
 
+func functionNameToSummary(name string, method string) string {
+
+	name = string_utils.ReplaceCaseInsensitive(name, "GET", "")
+	name = string_utils.ReplaceCaseInsensitive(name, "POST", "")
+	name = string_utils.ReplaceCaseInsensitive(name, "PATCH", "")
+	name = string_utils.ReplaceCaseInsensitive(name, "DELETE", "")
+
+	var cleanMethod string
+	if method == "GET" {
+		cleanMethod = "Fetch"
+	} else if method == "POST" {
+		cleanMethod = "Create"
+	} else if method == "DELETE" {
+		cleanMethod = "Delete"
+	} else if method == "PATCH" {
+		cleanMethod = "Update"
+	}
+
+	summary := string_utils.PascalCaseToSentence(name)
+	summary = cleanMethod + " " + strings.ToLower(summary)
+	return summary
+}
+
 func addDefaultSchemas(docs Docs) {
 	docs.Components.Schemas["error"] = map[string]string{
 		"type":   "string",
@@ -365,8 +391,7 @@ func GetStructDocs(corePath string) map[string]string {
 			return nil
 		}
 
-		for k, f := range d {
-			fmt.Println("package", k)
+		for _, f := range d {
 			p := doc.New(f, "./", 2)
 
 			for _, objectTypes := range p.Types {
diff --git a/string_utils/string_utils.go b/string_utils/string_utils.go
index 14d7bcf..b939521 100644
--- a/string_utils/string_utils.go
+++ b/string_utils/string_utils.go
@@ -234,10 +234,10 @@ func KeyToHumanReadable(s string) string {
 	re := regexp.MustCompile("(_|-)")
 	s = re.ReplaceAllString(s, " ")
 
-	return sentenceCase(string(s))
+	return SentenceCase(string(s))
 }
 
-func sentenceCase(str string) string {
+func SentenceCase(str string) string {
 	for i, v := range str {
 		return string(unicode.ToUpper(v)) + str[i+1:]
 	}
@@ -311,3 +311,20 @@ func IsValidEmail(email string) bool {
 	isValidEmail := regex.MatchString(email)
 	return isValidEmail
 }
+
+func PascalCaseToSentence(pascal string) string {
+	var parts []string
+	start := 0
+	for end, r := range pascal {
+		if end != 0 && unicode.IsUpper(r) {
+			parts = append(parts, pascal[start:end])
+			start = end
+		}
+	}
+	if start != len(pascal) {
+		parts = append(parts, pascal[start:])
+	}
+	sentence := strings.Join(parts, " ")
+	return sentence
+
+}
-- 
GitLab