Implement database connection and refactor welcome handler
This commit is contained in:
parent
39c1b7d2d0
commit
b0c2842802
@ -1,7 +1,8 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"admin_dashboard_backend/pkg/handlers"
|
||||
"admin_dashboard_backend/pkg/db"
|
||||
"admin_dashboard_backend/pkg/handlers/welcome"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
@ -27,8 +28,10 @@ func main() {
|
||||
port = "84" // default port
|
||||
}
|
||||
|
||||
// Initialize database connection
|
||||
db.InitDB()
|
||||
// Define routes
|
||||
http.HandleFunc("/welcome", handlers.HandlersWelcome)
|
||||
http.HandleFunc("/welcome", welcome.HandlersWelcome)
|
||||
|
||||
// Start server
|
||||
fmt.Printf("Server is running on port %s...\n", port)
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
"databaseUser": "root",
|
||||
"databasePassword": "1234",
|
||||
"database": "app",
|
||||
"databasePort": 3306,
|
||||
"databasePort": "3306",
|
||||
"developerMode": true,
|
||||
"developerLogin": true,
|
||||
"forceDevLogin": true,
|
||||
|
||||
5
go.mod
5
go.mod
@ -1,3 +1,8 @@
|
||||
module admin_dashboard_backend
|
||||
|
||||
go 1.23.4
|
||||
|
||||
require (
|
||||
filippo.io/edwards25519 v1.1.0 // indirect
|
||||
github.com/go-sql-driver/mysql v1.8.1 // indirect
|
||||
)
|
||||
|
||||
6
go.sum
Normal file
6
go.sum
Normal file
@ -0,0 +1,6 @@
|
||||
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
||||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
||||
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
51
pkg/db/db_connection.go
Normal file
51
pkg/db/db_connection.go
Normal file
@ -0,0 +1,51 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Host string `json:"databaseHost"`
|
||||
Port string `json:"databasePort"`
|
||||
User string `json:"databaseUser"`
|
||||
Password string `json:"databasePassword"`
|
||||
DBName string `json:"database"`
|
||||
}
|
||||
|
||||
var DB *sql.DB
|
||||
|
||||
func InitDB() {
|
||||
config := loadConfig()
|
||||
dsn := config.User + ":" + config.Password + "@tcp(" + config.Host + ":" + config.Port + ")/" + config.DBName
|
||||
|
||||
var err error
|
||||
DB, err = sql.Open("mysql", dsn)
|
||||
if err != nil {
|
||||
log.Fatal("Error connecting to database:", err)
|
||||
}
|
||||
|
||||
err = DB.Ping()
|
||||
if err != nil {
|
||||
log.Fatal("Error pinging database:", err)
|
||||
}
|
||||
}
|
||||
|
||||
func loadConfig() Config {
|
||||
file, err := os.ReadFile("config.json")
|
||||
if err != nil {
|
||||
log.Fatal("Error reading config file:", err)
|
||||
}
|
||||
|
||||
var config Config
|
||||
err = json.Unmarshal(file, &config)
|
||||
if err != nil {
|
||||
log.Fatal("Error parsing config file:", err)
|
||||
}
|
||||
|
||||
return config
|
||||
}
|
||||
48
pkg/db/db_login.go
Normal file
48
pkg/db/db_login.go
Normal file
@ -0,0 +1,48 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
var db *sql.DB
|
||||
|
||||
func Init() {
|
||||
var err error
|
||||
db, err = sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if err = db.Ping(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func Login(username, password string) (bool, error) {
|
||||
var dbPassword string
|
||||
query := "SELECT password FROM users WHERE username = ?"
|
||||
err := db.QueryRow(query, username).Scan(&dbPassword)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return false, nil
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
|
||||
if dbPassword != password {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
return true, nil
|
||||
var token string
|
||||
query = "SELECT token FROM users WHERE username = ?"
|
||||
err = db.QueryRow(query, username).Scan(&token)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return true, token
|
||||
}
|
||||
44
pkg/handlers/login/login.go
Normal file
44
pkg/handlers/login/login.go
Normal file
@ -0,0 +1,44 @@
|
||||
package login
|
||||
|
||||
import (
|
||||
"admin_dashboard_backend/pkg/db"
|
||||
"encoding/json"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type Request struct {
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
}
|
||||
|
||||
type Response struct {
|
||||
Token string `json:"token"`
|
||||
}
|
||||
|
||||
func HandlersLogin(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodPost {
|
||||
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
|
||||
return
|
||||
}
|
||||
|
||||
var request Request
|
||||
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
|
||||
http.Error(w, "Bad request", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
token, err := db.Login(request.Username, request.Password)
|
||||
if err != nil {
|
||||
log.Println("Error logging in:", err)
|
||||
http.Error(w, "Internal server error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
response := Response{
|
||||
Token: token,
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(response)
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package handlers
|
||||
package welcome
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
Loading…
Reference in New Issue
Block a user