@@ -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
6214func 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+ }
0 commit comments