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