Skip to content

Commit 4ecfff2

Browse files
committed
add getByName
1 parent 6c482ec commit 4ecfff2

File tree

2 files changed

+66
-49
lines changed

2 files changed

+66
-49
lines changed

controllers/controller.go

Lines changed: 64 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -10,54 +10,6 @@ import (
1010
"strings"
1111
)
1212

13-
func SearchSimilarNames(c *gin.Context) {
14-
var names []models.NameType
15-
16-
//Name to be searched
17-
name := c.Params.ByName("name")
18-
mtf := metaphone.Pack(name)
19-
20-
database.Db.Where("metaphone = ?", metaphone.Pack(name)).Find(&names)
21-
22-
if len(names) == 0 {
23-
c.JSON(http.StatusNotFound, gin.H{"Not found": "metaphone not found", "metaphone": mtf})
24-
return
25-
}
26-
27-
var similarNames []string
28-
for _, n := range names {
29-
if metaphone.SimilarityBetweenWords(strings.ToLower(name), strings.ToLower(n.Name)) >= 0.8 {
30-
similarNames = append(similarNames, n.Name)
31-
varWords := strings.Split(n.NameVariations, "|")
32-
for _, vw := range varWords {
33-
if vw != "" {
34-
similarNames = append(similarNames, strings.TrimSpace(vw))
35-
}
36-
}
37-
}
38-
39-
if len(similarNames) == 0 {
40-
similarNames = append(similarNames, n.Name)
41-
varWords := strings.Split(n.NameVariations, "|")
42-
for _, vw := range varWords {
43-
if vw != "" {
44-
similarNames = append(similarNames, strings.TrimSpace(vw))
45-
}
46-
}
47-
}
48-
49-
sort.Strings(similarNames)
50-
51-
}
52-
53-
c.JSON(200, gin.H{
54-
"Name": strings.ToUpper(name),
55-
"metaphone": mtf,
56-
"name_variations": similarNames,
57-
})
58-
59-
}
60-
6113
//CreateName create new name on database of type NameType
6214
func CreateName(c *gin.Context) {
6315
var name models.NameType
@@ -115,3 +67,67 @@ func UpdateName(c *gin.Context) {
11567
c.JSON(http.StatusOK, name)
11668

11769
}
70+
71+
//GetName read name by name
72+
func GetName(c *gin.Context) {
73+
var name models.NameType
74+
75+
n := c.Params.ByName("name")
76+
database.Db.Where("name = ?", strings.ToUpper(n)).Find(&name)
77+
78+
if name.ID == 0 {
79+
c.JSON(http.StatusNotFound, gin.H{"Not found": "name not found"})
80+
return
81+
}
82+
83+
c.JSON(http.StatusOK, name)
84+
}
85+
86+
//SearchSimilarNames search for all similar names by metaphone and levenshtein method
87+
func SearchSimilarNames(c *gin.Context) {
88+
var names []models.NameType
89+
90+
//Name to be searched
91+
name := c.Params.ByName("name")
92+
mtf := metaphone.Pack(name)
93+
94+
database.Db.Where("metaphone = ?", metaphone.Pack(name)).Find(&names)
95+
96+
if len(names) == 0 {
97+
c.JSON(http.StatusNotFound, gin.H{"Not found": "metaphone not found", "metaphone": mtf})
98+
return
99+
}
100+
101+
var similarNames []string
102+
for _, n := range names {
103+
if metaphone.SimilarityBetweenWords(strings.ToLower(name), strings.ToLower(n.Name)) >= 0.8 {
104+
similarNames = append(similarNames, n.Name)
105+
varWords := strings.Split(n.NameVariations, "|")
106+
for _, vw := range varWords {
107+
if vw != "" {
108+
similarNames = append(similarNames, strings.TrimSpace(vw))
109+
}
110+
}
111+
}
112+
113+
if len(similarNames) == 0 {
114+
similarNames = append(similarNames, n.Name)
115+
varWords := strings.Split(n.NameVariations, "|")
116+
for _, vw := range varWords {
117+
if vw != "" {
118+
similarNames = append(similarNames, strings.TrimSpace(vw))
119+
}
120+
}
121+
}
122+
123+
sort.Strings(similarNames)
124+
125+
}
126+
127+
c.JSON(200, gin.H{
128+
"Name": strings.ToUpper(name),
129+
"metaphone": mtf,
130+
"nameVariations": similarNames,
131+
})
132+
133+
}

routes/routes.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ func HandleRequests() {
1313
r.DELETE("/:id", controllers.DeleteName)
1414
r.PATCH("/:id", controllers.UpdateName)
1515
r.GET("/:id", controllers.SearchNameByID)
16-
r.GET("/name/:name", controllers.SearchSimilarNames)
16+
r.GET("/name/:name", controllers.GetName)
17+
r.GET("/metaphone/:name", controllers.SearchSimilarNames)
1718

1819
err := r.Run(door)
1920
if err != nil {

0 commit comments

Comments
 (0)