Skip to content

Commit 50e5d19

Browse files
committed
- now using environment variables to set database connection.
-create project's dealing with levenshtein distance and metaphone code.
1 parent cb4ad2f commit 50e5d19

File tree

7 files changed

+36
-906
lines changed

7 files changed

+36
-906
lines changed

controllers/controller.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package controllers
33
import (
44
"errors"
55
"github.com/Darklabel91/API_Names/database"
6-
"github.com/Darklabel91/API_Names/metaphone"
76
"github.com/Darklabel91/API_Names/models"
7+
Metaphone "github.com/Darklabel91/metaphone-br"
88
"github.com/gin-gonic/gin"
99
"net/http"
1010
"sort"
@@ -90,15 +90,14 @@ func GetName(c *gin.Context) {
9090
func SearchSimilarNames(c *gin.Context) {
9191
//name to be searched
9292
name := c.Params.ByName("name")
93-
nameMetaphone := metaphone.Pack(name)
93+
nameMetaphone := Metaphone.Pack(name)
9494

9595
//find all metaphoneNames matching metaphone
9696
var metaphoneNames []models.NameType
97-
9897
database.Db.Raw("select * from name_types where metaphone = ?", nameMetaphone).Find(&metaphoneNames)
9998
similarNames := findNames(metaphoneNames, name, levenshtein)
10099

101-
//for recall purposes we can't only search for metaphone exact match's if no similar word is found.
100+
//for recall purposes we can't only search for metaphone exact match's if no similar word is found
102101
if len(metaphoneNames) == 0 || len(similarNames) == 0 {
103102
metaphoneNames = searchForAllSimilarMetaphone(nameMetaphone)
104103
similarNames = findNames(metaphoneNames, name, levenshtein)
@@ -115,6 +114,7 @@ func SearchSimilarNames(c *gin.Context) {
115114
}
116115

117116
//when the similar metaphoneNames result's in less than 5 we search for every similar name of all similar metaphoneNames founded previously
117+
//this step can be ignored if you want to
118118
if len(similarNames) < 5 {
119119
for _, n := range similarNames {
120120
similar := findNames(metaphoneNames, n.Name, levenshtein)
@@ -125,7 +125,7 @@ func SearchSimilarNames(c *gin.Context) {
125125
//order all similar metaphoneNames from high to low Levenshtein
126126
nameV := orderByLevenshtein(similarNames)
127127

128-
//build canonical
128+
//finds a name to consider Canonical on the database
129129
canonicalEntity, err := findCanonical(name, metaphoneNames, nameV)
130130
if err != nil {
131131
c.JSON(http.StatusNotFound, gin.H{"Not found": err.Error(), "metaphone": nameMetaphone})
@@ -155,7 +155,7 @@ func searchForAllSimilarMetaphone(mtf string) []models.NameType {
155155

156156
var rNames []models.NameType
157157
for _, n := range names {
158-
if metaphone.IsMetaphoneSimilar(mtf, n.Metaphone) {
158+
if Metaphone.IsMetaphoneSimilar(mtf, n.Metaphone) {
159159
rNames = append(rNames, n)
160160
}
161161
}
@@ -177,7 +177,7 @@ func findCanonical(name string, matchingMetaphoneNames []models.NameType, nameVa
177177

178178
//search for similar names on matchingMetaphoneNames
179179
for _, similarName := range matchingMetaphoneNames {
180-
if metaphone.SimilarityBetweenWords(name, similarName.Name) >= levenshtein {
180+
if Metaphone.SimilarityBetweenWords(name, similarName.Name) >= levenshtein {
181181
return similarName, nil
182182
}
183183
}
@@ -220,7 +220,7 @@ func findSimilarNames(name string, names []models.NameType, threshold float32) [
220220
var similarNames []models.NameVar
221221

222222
for _, n := range names {
223-
similarity := metaphone.SimilarityBetweenWords(strings.ToLower(name), strings.ToLower(n.Name))
223+
similarity := Metaphone.SimilarityBetweenWords(strings.ToLower(name), strings.ToLower(n.Name))
224224
if similarity >= threshold {
225225
similarNames = append(similarNames, models.NameVar{Name: n.Name, Levenshtein: similarity})
226226
varWords := strings.Split(n.NameVariations, "|")

database/db.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,10 @@ package database
33
import (
44
"fmt"
55
"github.com/Darklabel91/API_Names/models"
6+
"github.com/joho/godotenv"
67
"gorm.io/driver/mysql"
78
"gorm.io/gorm"
8-
)
9-
10-
const (
11-
DbUsername = "root"
12-
DbPassword = "root"
13-
DbName = "namesDatabase"
14-
DbHost = "127.0.0.1"
15-
DbPort = "3306"
9+
"os"
1610
)
1711

1812
var Db *gorm.DB
@@ -23,7 +17,21 @@ func InitDb() *gorm.DB {
2317
}
2418

2519
func connectDB() *gorm.DB {
26-
var err error
20+
//load .env file
21+
err := godotenv.Load()
22+
if err != nil {
23+
fmt.Println(err)
24+
}
25+
26+
//get .env variables
27+
var (
28+
DbUsername = os.Getenv("DB_USERNAME")
29+
DbPassword = os.Getenv("DB_PASSWORD")
30+
DbName = os.Getenv("DB_NAME")
31+
DbHost = os.Getenv("DB_HOST")
32+
DbPort = os.Getenv("DB_PORT")
33+
)
34+
2735
dsn := DbUsername + ":" + DbPassword + "@tcp" + "(" + DbHost + ":" + DbPort + ")/" + DbName + "?" + "parseTime=true&loc=Local"
2836
fmt.Println("dsn : ", dsn)
2937
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ go 1.18
44

55
require (
66
github.com/gin-gonic/gin v1.9.0
7+
github.com/joho/godotenv v1.5.1
78
gorm.io/driver/mysql v1.4.7
89
gorm.io/gorm v1.24.6
910
)
1011

1112
require (
13+
github.com/Darklabel91/Levenshtein v0.0.0-20230327182846-18e2b540c668 // indirect
14+
github.com/Darklabel91/metaphone-br v0.0.0-20230327175255-f661f3ae637b // indirect
1215
github.com/bytedance/sonic v1.8.5 // indirect
1316
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
1417
github.com/gin-contrib/sse v0.1.0 // indirect

go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
github.com/Darklabel91/Levenshtein v0.0.0-20230327180915-520182aba65a h1:/nTBmKXehgl606NX4oqbKXMC5fVWPyjNBiSfnX9S2jM=
2+
github.com/Darklabel91/Levenshtein v0.0.0-20230327180915-520182aba65a/go.mod h1:8sU0Aii5Eog/JhC/LtRaSR4jSvgQyDN84rG2ihtm1iU=
3+
github.com/Darklabel91/Levenshtein v0.0.0-20230327182846-18e2b540c668 h1:F1VOn4ZXc8hBqtmNsSarRI/EwReb/TNDGGQt9tNWWDY=
4+
github.com/Darklabel91/Levenshtein v0.0.0-20230327182846-18e2b540c668/go.mod h1:8sU0Aii5Eog/JhC/LtRaSR4jSvgQyDN84rG2ihtm1iU=
5+
github.com/Darklabel91/metaphone-br v0.0.0-20230327175255-f661f3ae637b h1:ltrsS0rhJTqJqLHgULHSNSLBkht5tJ1tx7IJ12YRmXU=
6+
github.com/Darklabel91/metaphone-br v0.0.0-20230327175255-f661f3ae637b/go.mod h1:PkwZ63zIOXcukLDXhAKSDlAW+Fq/hK7u50bggIdu3TM=
17
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
28
github.com/bytedance/sonic v1.8.5 h1:kjX0/vo5acEQ/sinD/18SkA/lDDUk23F0RcaHvI7omc=
39
github.com/bytedance/sonic v1.8.5/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
@@ -31,6 +37,8 @@ github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkr
3137
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
3238
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
3339
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
40+
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
41+
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
3442
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
3543
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
3644
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=

levenshtein/levenshtein.go

Lines changed: 0 additions & 59 deletions
This file was deleted.

0 commit comments

Comments
 (0)