initial-commit
This commit is contained in:
commit
7d92d92f2f
|
@ -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
|
|
@ -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
|
||||
}
|
|
@ -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())
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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"`
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
)
|
|
@ -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=
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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")
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue