initial-commit

This commit is contained in:
Dhaverd 2025-02-26 16:15:42 +08:00
commit 7d92d92f2f
10 changed files with 209 additions and 0 deletions

6
.env Normal file
View File

@ -0,0 +1,6 @@
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASSWORD=root
DB_NAME=dbname
HTTP_PORT=3210

21
Controllers/Controller.go Normal file
View File

@ -0,0 +1,21 @@
package Controllers
import (
"fmt"
"github.com/gorilla/mux"
"net/http"
)
func MasterController() *mux.Router {
r := mux.NewRouter()
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to the api!")
})
r = composeSubrouters(r)
return r
}
func composeSubrouters(r *mux.Router) *mux.Router {
r = UserController(r)
return r
}

View File

@ -0,0 +1,34 @@
package Controllers
import (
"Dhaverd/computer-journal/Services"
"encoding/json"
"fmt"
"github.com/gorilla/mux"
"net/http"
)
func UserController(router *mux.Router) *mux.Router {
userrouter := router.PathPrefix("/users").Subrouter()
userrouter.HandleFunc("/", getAllUsers).Methods("GET")
userrouter.HandleFunc("/{id}", getUserById)
return router
}
func getAllUsers(w http.ResponseWriter, r *http.Request) {
users := Services.GetAllUsers()
err := json.NewEncoder(w).Encode(users)
if err != nil {
fmt.Println("Error encoding users\n" + err.Error())
}
}
func getUserById(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
user := Services.GetUserById(vars["id"])
err := json.NewEncoder(w).Encode(user)
if err != nil {
fmt.Println("Error encoding user\n" + err.Error())
}
}

22
Database/DBHelper.go Normal file
View File

@ -0,0 +1,22 @@
package Database
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"os"
)
func GetDSN() string {
dbHost := os.Getenv("DB_HOST")
dbPort := os.Getenv("DB_PORT")
dbUser := os.Getenv("DB_USER")
dbPassword := os.Getenv("DB_PASSWORD")
dbName := os.Getenv("DB_NAME")
dsn := dbUser + ":" + dbPassword + "@tcp(" + dbHost + ":" + dbPort + ")/" + dbName
return dsn
}
func GetConnection() *gorm.DB {
db, _ := gorm.Open(mysql.Open(GetDSN()), &gorm.Config{})
return db
}

10
Models/User.go Normal file
View File

@ -0,0 +1,10 @@
package Models
import "gorm.io/gorm"
type User struct {
gorm.Model
Name string `gorm:"size:255,not null"`
Email string `gorm:"size:255,not null"`
Password string `gorm:"size:255,not null"`
}

26
Services/UserService.go Normal file
View File

@ -0,0 +1,26 @@
package Services
import (
"Dhaverd/computer-journal/Database"
"Dhaverd/computer-journal/Models"
)
type User struct {
Name string `json:"name"`
Email string `json:"email"`
Password int `json:"password"`
}
func GetAllUsers() []Models.User {
connection := Database.GetConnection()
var users []Models.User
connection.Find(&users)
return users
}
func GetUserById(id string) Models.User {
connection := Database.GetConnection()
var user Models.User
connection.First(&user, id)
return user
}

18
go.mod Normal file
View File

@ -0,0 +1,18 @@
module Dhaverd/computer-journal
go 1.24.0
require (
github.com/gorilla/mux v1.8.1
github.com/joho/godotenv v1.5.1
gorm.io/driver/mysql v1.5.7
gorm.io/gorm v1.25.12
)
require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/go-sql-driver/mysql v1.9.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
golang.org/x/text v0.22.0 // indirect
)

20
go.sum Normal file
View File

@ -0,0 +1,20 @@
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.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.9.0 h1:Y0zIbQXhQKmQgTp44Y1dp3wTXcn804QoTptLZT1vtvo=
github.com/go-sql-driver/mysql v1.9.0/go.mod h1:pDetrLJeA3oMujJuvXc8RJoasr589B6A9fwzD3QMrqw=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=

37
main.go Normal file
View File

@ -0,0 +1,37 @@
package main
import (
"Dhaverd/computer-journal/Controllers"
"fmt"
"github.com/joho/godotenv"
"net/http"
"os"
)
func LoadDotEnv() {
errEnv := godotenv.Load(".env.local")
if errEnv != nil {
fmt.Println("Error loading .env.local file. Trying to load .env file...")
errEnv = godotenv.Load(".env")
if errEnv != nil {
fmt.Println("Error loading .env file")
} else {
fmt.Println(".env loaded successfully")
}
} else {
fmt.Println(".env.local loaded successfully")
}
}
func main() {
masterController := Controllers.MasterController()
fmt.Println("Trying to load .env.local file...")
LoadDotEnv()
port := os.Getenv("HTTP_PORT")
fmt.Printf("Starting server on port %s\n", port)
errSrv := http.ListenAndServe(":"+port, masterController)
if errSrv != nil {
fmt.Println("Server start error")
return
}
}

15
migrate.go Normal file
View File

@ -0,0 +1,15 @@
package main
import (
"Dhaverd/computer-journal/Database"
"Dhaverd/computer-journal/Models"
"fmt"
)
func main() {
connection := Database.GetConnection()
err := connection.AutoMigrate(&Models.User{})
if err != nil {
fmt.Println("Error migrating database")
}
}