Skip to content

Commit

Permalink
setup mysql and gorm
Browse files Browse the repository at this point in the history
  • Loading branch information
0xSenzel committed Jul 6, 2024
1 parent 90f4c34 commit 8a4637a
Show file tree
Hide file tree
Showing 10 changed files with 73 additions and 33 deletions.
5 changes: 2 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,6 @@ Thumbs.db
# JetBrains IDEs
.idea/

# VS Code
.vscode/

# GitHub Codespaces
.devcontainer/

Expand Down Expand Up @@ -81,3 +78,5 @@ golangci-lint-cache/

# Glide dependencies
glide.lock

server
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ build:
# clear
# ./server

run: build
run:
clear
go run cmd/main.go

Expand Down
9 changes: 4 additions & 5 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,11 @@ func main() {
// Initialize a new Fiber app
app := fiber.New()

mysql.ConnectDB()
defer mysql.CloseDB()
db := mysql.ConnectDB()
defer mysql.CloseDB(db)
mysql.Migrate(db)

mysql.Migrate()

routes.SetupRoutes(app)
routes.SetupRoutes(app, db)

// Start the server on port 3000
log.Fatal(app.Listen(":3000"))
Expand Down
29 changes: 26 additions & 3 deletions internal/controllers/user/user.controller.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,30 @@
package user

import "github.com/0xsenzel/go-fiber-boilerplate/internal/services/user"
import (
"log"

func HelloWorldHandler() string {
return user.GetHellowWorld()
"github.com/0xsenzel/go-fiber-boilerplate/internal/services/user/models"
"github.com/0xsenzel/go-fiber-boilerplate/internal/services/user/service"
"github.com/gofiber/fiber/v3"
"gorm.io/gorm"
)

func CreateUserHandler(c fiber.Ctx, db *gorm.DB) error {
var userRequestDto models.UserRequestDto
if err := c.Bind().Body(&userRequestDto); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"error": true,
"message": "Invalid request payload",
})
}
log.Printf("Creating user with data:%+v", userRequestDto)

createdUser, err := service.CreateUser(db, userRequestDto)
if err != nil {
c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error(), "message": "Failed to create user"})
return err
}

c.Status(fiber.StatusCreated).JSON(fiber.Map{"message": `User created successfully`, "user": createdUser})
return nil
}
19 changes: 8 additions & 11 deletions internal/database/mysql/mysql.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@ import (
"gorm.io/gorm"
)

var Database *gorm.DB
var DATABASE_URI string = "root:12345@tcp(localhost:3306)/mysql?charset=utf8mb4&parseTime=True&loc=Local"

func ConnectDB() error {
func ConnectDB() *gorm.DB {
var err error

db, err := gorm.Open(mysql.Open(DATABASE_URI), &gorm.Config{
Expand All @@ -20,17 +19,15 @@ func ConnectDB() error {
})

if err != nil {
panic(err)
log.Fatalf("failed to connect to the database: %v", err)
}

Database = db
log.Println("Successfully connected to the database")

return nil
return db
}

func Migrate() error {
err := Database.AutoMigrate(&tables.User{})
func Migrate(db *gorm.DB) error {
err := db.AutoMigrate(&tables.User{})
if err != nil {
log.Fatalf("failed to migrate database: %v", err)
}
Expand All @@ -39,13 +36,13 @@ func Migrate() error {
return nil
}

func CloseDB() error {
db, err := Database.DB()
func CloseDB(db *gorm.DB) error {
database, err := db.DB()
if err != nil {
log.Fatalf("failed to get database connection: %v", err)
}

err = db.Close()
err = database.Close()
if err != nil {
log.Fatalf("failed to close database connection: %v", err)
}
Expand Down
6 changes: 6 additions & 0 deletions internal/services/user/models/user.request.dto.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package models

type UserRequestDto struct {
Name string `json:"name"`
Email string `json:"email"`
}
22 changes: 22 additions & 0 deletions internal/services/user/service/user.service.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package service

import (
"github.com/0xsenzel/go-fiber-boilerplate/internal/services/user/models"
"github.com/0xsenzel/go-fiber-boilerplate/internal/services/user/tables"
"gorm.io/gorm"
)

func CreateUser(db *gorm.DB, userRequestDto models.UserRequestDto) (*tables.User, error) {
user := &tables.User{
Name: userRequestDto.Name,
Email: userRequestDto.Email,
}

err := db.Create(user).Error
if err!= nil {
return nil, err
}

return user, nil
}

7 changes: 0 additions & 7 deletions internal/services/user/user.service.go

This file was deleted.

7 changes: 4 additions & 3 deletions routes/route.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ package routes
import (
"github.com/0xsenzel/go-fiber-boilerplate/internal/controllers/user"
"github.com/gofiber/fiber/v3"
"gorm.io/gorm"
)

func SetupRoutes(app *fiber.App) {
app.Get("/", func(c fiber.Ctx) error {
return c.SendString(user.HelloWorldHandler())
func SetupRoutes(app *fiber.App, db *gorm.DB) {
app.Post("/user", func(c fiber.Ctx) error {
return user.CreateUserHandler(c, db)
})
}
Binary file removed server
Binary file not shown.

0 comments on commit 8a4637a

Please sign in to comment.