Skip to content

Commit 1ee24c3

Browse files
committed
- preload function for better response time on /metaphone
- set gin to release mode - set trusted proxy's - better messages
1 parent 0a639f4 commit 1ee24c3

File tree

4 files changed

+52
-29
lines changed

4 files changed

+52
-29
lines changed

controllers/controller.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func generateJWTToken(userID uint, amountDays time.Duration) (string, error) {
114114
secretKey := []byte(os.Getenv("SECRET"))
115115
signedToken, err := token.SignedString(secretKey)
116116
if err != nil {
117-
return "", errors.New("Failed to sign token")
117+
return "", errors.New("failed to sign token")
118118
}
119119

120120
return signedToken, nil
@@ -213,7 +213,7 @@ func SearchSimilarNames(c *gin.Context) {
213213

214214
//for recall purposes we can't only search for metaphone exact match's if no similar word is found
215215
if len(metaphoneNames) == 0 || len(similarNames) == 0 {
216-
metaphoneNames = searchForAllSimilarMetaphone(nameMetaphone)
216+
metaphoneNames = searchForAllSimilarMetaphone(nameMetaphone, c.MustGet("nameTypes").([]models.NameType))
217217
similarNames = findNames(metaphoneNames, name, levenshtein)
218218

219219
if len(metaphoneNames) == 0 {
@@ -263,9 +263,9 @@ func SearchSimilarNames(c *gin.Context) {
263263
/*---------- used on SearchSimilarNames ----------*/
264264

265265
//searchForAllSimilarMetaphone used in case of not finding exact metaphone match
266-
func searchForAllSimilarMetaphone(mtf string) []models.NameType {
267-
var names []models.NameType
268-
database.Db.Raw("select * from name_types").Find(&names)
266+
func searchForAllSimilarMetaphone(mtf string, names []models.NameType) []models.NameType {
267+
//var names []models.NameType
268+
//database.Db.Raw("SELECT * FROM name_types").Find(&names)
269269

270270
var rNames []models.NameType
271271
for _, n := range names {

database/db.go

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ func connectDB() *gorm.DB {
5757
}
5858

5959
dsn := DbUsername + ":" + DbPassword + "@tcp" + "(" + DbHost + ":" + DbPort + ")/" + DbName + "?" + "parseTime=true&loc=Local"
60-
fmt.Println("dsn : ", dsn)
6160

6261
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
6362
if err != nil {
@@ -83,7 +82,6 @@ func connectDB() *gorm.DB {
8382
}
8483

8584
func createDatabase(host, username, password, dbName string) error {
86-
fmt.Println("cra")
8785
// Set up the MySQL DSN string
8886
dsn := fmt.Sprintf("%s:%s@tcp(%s)/?charset=utf8mb4&parseTime=True&loc=Local", username, password, host)
8987

@@ -97,28 +95,24 @@ func createDatabase(host, username, password, dbName string) error {
9795
var result int64
9896
db.Raw("SELECT COUNT(*) FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = ?", dbName).Scan(&result)
9997
if result > 0 {
100-
fmt.Println("database already exists")
10198
return nil
10299
}
103100

104101
// Create the database
105-
fmt.Println("creating database")
106102
err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", dbName)).Error
107103
if err != nil {
108104
return fmt.Errorf("failed to create database: %v", err)
109105
}
106+
fmt.Println("- Create Database")
110107

111108
return nil
112109
}
113110

114111
func createRoot() error {
115112
var user models.User
116-
Db.First(&user, 1)
113+
Db.Raw("select * from users where id = 1").Find(&user)
117114

118115
if user.ID == 0 {
119-
fmt.Println("creating user root")
120-
121-
//password
122116
hash, err := bcrypt.GenerateFromPassword([]byte(os.Getenv("SECRET")), 10)
123117
if err != nil {
124118
return err
@@ -131,13 +125,11 @@ func createRoot() error {
131125

132126
Db.Create(&userRoot)
133127

134-
fmt.Println("root user created")
135-
136-
return nil
137-
} else {
138-
fmt.Println("root user already on the database")
128+
fmt.Println("- Created first user")
139129
return nil
140130
}
131+
132+
return nil
141133
}
142134

143135
func uploadCSVNameTypes() error {
@@ -146,7 +138,7 @@ func uploadCSVNameTypes() error {
146138

147139
if name.ID == 0 {
148140
start := time.Now()
149-
fmt.Println("initiating csv upload to the database")
141+
fmt.Println("- Upload data start")
150142

151143
filePath := "database/name_types .csv"
152144
file, err := os.Open(filePath)
@@ -183,10 +175,9 @@ func uploadCSVNameTypes() error {
183175
}
184176
}
185177

186-
fmt.Println("csv upload finished in:" + time.Since(start).String())
178+
fmt.Println("- Upload data finished", time.Since(start).String())
187179
return nil
188180
}
189-
fmt.Println("csv already imported")
190181
return nil
191182

192183
}

main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"fmt"
45
"github.com/Darklabel91/API_Names/database"
56
"github.com/Darklabel91/API_Names/routes"
67
)
@@ -10,5 +11,6 @@ func init() {
1011
}
1112

1213
func main() {
14+
fmt.Println("- live")
1315
routes.HandleRequests()
1416
}

routes/routes.go

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,42 @@ package routes
22

33
import (
44
"github.com/Darklabel91/API_Names/controllers"
5+
"github.com/Darklabel91/API_Names/database"
56
"github.com/Darklabel91/API_Names/middleware"
7+
"github.com/Darklabel91/API_Names/models"
68
"github.com/gin-gonic/gin"
79
"sync"
810
)
911

1012
const door = ":8080"
1113

14+
var allowedIPs = []string{"127.0.0.1", "::1"} // List of allowed IP addresses
15+
1216
func HandleRequests() {
17+
gin.SetMode(gin.ReleaseMode)
1318
r := gin.Default()
19+
20+
// Use the OnlyAllowIPs middleware on all routes
21+
err := r.SetTrustedProxies(allowedIPs)
22+
if err != nil {
23+
return
24+
}
25+
26+
//signup and login
1427
r.POST("/signup", controllers.Signup)
1528
r.POST("/login", controllers.Login)
16-
r.POST("/name", middleware.RequireAuth, controllers.CreateName)
17-
r.DELETE("/:id", middleware.RequireAuth, controllers.DeleteName)
18-
r.PATCH("/:id", middleware.RequireAuth, controllers.UpdateName)
19-
r.GET("/:id", middleware.RequireAuth, WaitGroupID)
20-
r.GET("/name/:name", middleware.RequireAuth, WaitGroupName)
21-
r.GET("/metaphone/:name", middleware.RequireAuth, WaitGroupMetaphone)
22-
23-
err := r.Run(door)
29+
30+
//Other routes
31+
r.Use(middleware.RequireAuth)
32+
33+
r.POST("/name", controllers.CreateName)
34+
r.DELETE("/:id", controllers.DeleteName)
35+
r.PATCH("/:id", controllers.UpdateName)
36+
r.GET("/:id", WaitGroupID)
37+
r.GET("/name/:name", WaitGroupName)
38+
r.GET("/metaphone/:name", PreloadNameTypes(), WaitGroupMetaphone)
39+
40+
err = r.Run(door)
2441
if err != nil {
2542
panic(err)
2643
}
@@ -67,3 +84,16 @@ func WaitGroupID(c *gin.Context) {
6784

6885
wg.Wait()
6986
}
87+
88+
//PreloadNameTypes for better response time we load all records of the table
89+
func PreloadNameTypes() gin.HandlerFunc {
90+
var nameTypes []models.NameType
91+
if err := database.Db.Find(&nameTypes).Error; err != nil {
92+
return nil
93+
}
94+
95+
return func(c *gin.Context) {
96+
c.Set("nameTypes", nameTypes)
97+
c.Next()
98+
}
99+
}

0 commit comments

Comments
 (0)