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