Implement database connection and refactor welcome handler

This commit is contained in:
SnippetsX 2024-12-04 01:26:59 +03:00
parent 39c1b7d2d0
commit b0c2842802
8 changed files with 161 additions and 4 deletions

View File

@ -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)

View File

@ -4,7 +4,7 @@
"databaseUser": "root",
"databasePassword": "1234",
"database": "app",
"databasePort": 3306,
"databasePort": "3306",
"developerMode": true,
"developerLogin": true,
"forceDevLogin": true,

5
go.mod
View File

@ -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
View 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
View 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
View 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
}

View 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)
}

View File

@ -1,4 +1,4 @@
package handlers
package welcome
import (
"encoding/json"