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