refactor to repository and independent routes

dev
ajikamaludin 2 years ago
parent d05c2eb50d
commit 70bf6153b8
Signed by: ajikamaludin
GPG Key ID: 476C9A2B4B794EBB

@ -1,7 +1,6 @@
package configs
import (
"fmt"
"os"
"sync"
)
@ -9,6 +8,7 @@ import (
type AppConfig struct {
Name string
Env string
Port string
}
type DbConfig struct {
@ -35,13 +35,13 @@ var lock = &sync.Mutex{}
var configs *Configs
func GetInstance() *Configs {
fmt.Println("[CONFIG] : ", &configs)
if configs == nil {
lock.Lock()
configs = &Configs{
Appconfig: AppConfig{
Name: os.Getenv("APP_NAME"),
Env: os.Getenv("APP_ENV"),
Port: os.Getenv("APP_PORT"),
},
Dbconfig: DbConfig{
Host: os.Getenv("DB_HOST"),
@ -58,5 +58,6 @@ func GetInstance() *Configs {
}
lock.Unlock()
}
// fmt.Println("[CONFIG] : ", &configs)
return configs
}

@ -1,4 +1,4 @@
package handlers
package home
import (
"github.com/ajikamaludin/go-fiber-rest/app/configs"

@ -1,9 +1,8 @@
package handlers
package note
import (
"time"
"github.com/ajikamaludin/go-fiber-rest/app/models"
noteRepository "github.com/ajikamaludin/go-fiber-rest/app/repository/note"
gormdb "github.com/ajikamaludin/go-fiber-rest/pkg/gorm.db"
redisclient "github.com/ajikamaludin/go-fiber-rest/pkg/redis.client"
"github.com/ajikamaludin/go-fiber-rest/pkg/utils/constants"
@ -14,19 +13,13 @@ import (
func GetAllNotes(c *fiber.Ctx) error {
var notes []models.Note
err := redisclient.Get("allnotes", &notes)
err := noteRepository.GetAllNotes(&notes)
if err != nil {
db, err := gormdb.GetInstance()
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"status": constants.STATUS_FAIL,
"message": "Internal Service Error",
"error": err.Error(),
})
}
db.Find(&notes)
redisclient.Set("allnotes", &notes, 30*time.Second)
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"status": constants.STATUS_FAIL,
"message": "Internal Service Error",
"error": err.Error(),
})
}
return c.Status(fiber.StatusOK).JSON(fiber.Map{
@ -40,25 +33,13 @@ func GetNoteById(c *fiber.Ctx) error {
id := c.Params("id")
note := models.Note{}
key := "note+" + id
err := redisclient.Get(key, &note)
err := noteRepository.GetNoteById(id, &note)
if err != nil {
db, err := gormdb.GetInstance()
if err != nil {
return err
}
err = db.First(&note, id).Error
if err != nil {
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
"status": constants.STATUS_FAIL,
"message": "note not found",
})
}
redisclient.Set(key, &note, 30*time.Second)
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"status": constants.STATUS_FAIL,
"message": "note not found",
"error": err.Error(),
})
}
return c.Status(fiber.StatusOK).JSON(fiber.Map{

@ -0,0 +1,44 @@
package note
import (
"time"
"github.com/ajikamaludin/go-fiber-rest/app/models"
gormdb "github.com/ajikamaludin/go-fiber-rest/pkg/gorm.db"
redisclient "github.com/ajikamaludin/go-fiber-rest/pkg/redis.client"
)
func GetAllNotes(notes *[]models.Note) error {
err := redisclient.Get("allnotes", &notes)
if err != nil {
db, err := gormdb.GetInstance()
if err != nil {
return err
}
db.Find(&notes)
redisclient.Set("allnotes", &notes, 30*time.Second)
}
return nil
}
func GetNoteById(id string, note *models.Note) error {
key := "note+" + id
err := redisclient.Get(key, &note)
if err != nil {
db, err := gormdb.GetInstance()
if err != nil {
return err
}
err = db.First(&note, id).Error
if err != nil {
return err
}
redisclient.Set(key, &note, 30*time.Second)
}
return nil
}

@ -1,9 +1,13 @@
package main
import (
"fmt"
"log"
"github.com/ajikamaludin/go-fiber-rest/app/handlers"
"github.com/ajikamaludin/go-fiber-rest/app/configs"
apiRoute "github.com/ajikamaludin/go-fiber-rest/routers/api/v1"
exceptionRoute "github.com/ajikamaludin/go-fiber-rest/routers/exception"
homeRoute "github.com/ajikamaludin/go-fiber-rest/routers/home"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
"github.com/joho/godotenv"
@ -18,15 +22,14 @@ func main() {
app := fiber.New()
app.Use(recover.New())
// route here
app.Get("/", handlers.Home)
// default here : /
homeRoute.HomeRoutes(app)
// api route : api/v1
apiRoute.ApiRoutes(app)
// handle 404
exceptionRoute.Routes(app)
// route Note
app.Get("/notes", handlers.GetAllNotes)
app.Post("/notes", handlers.CreateNote)
app.Get("/notes/:id", handlers.GetNoteById)
app.Put("/notes/:id", handlers.UpdateNote)
app.Delete("/notes/:id", handlers.DeleteNote)
log.Fatal(app.Listen(":3000"))
config := configs.GetInstance().Appconfig
listenPort := fmt.Sprintf(":%v", config.Port)
log.Fatal(app.Listen(listenPort))
}

@ -14,7 +14,7 @@ var lock = &sync.Mutex{}
var db *gorm.DB
func GetInstance() (*gorm.DB, error) {
fmt.Println("[DATABASE] : ", db)
// fmt.Println("[DATABASE] : ", db)
if db == nil {
configs := configs.GetInstance()

@ -16,7 +16,7 @@ var rdb *redis.Client
var ctx = context.Background()
func GetInstance() *redis.Client {
fmt.Println("[REDIS] : ", &rdb)
// fmt.Println("[REDIS] : ", &rdb)
if rdb == nil {
configs := configs.GetInstance()
addr := fmt.Sprintf("%s:%s", configs.Redisconfig.Host, configs.Redisconfig.Port)
@ -33,7 +33,7 @@ func GetInstance() *redis.Client {
func Get(key string, model interface{}) error {
redis := GetInstance()
fmt.Println("[REDIS][READ] : ", key)
// fmt.Println("[REDIS][READ] : ", key)
renotes, err := redis.Get(ctx, key).Result()
if err != nil {
return err
@ -49,7 +49,7 @@ func Get(key string, model interface{}) error {
func Set(key string, model interface{}, expired time.Duration) error {
redis := GetInstance()
fmt.Println("[REDIS][WRITE] : ", key)
// fmt.Println("[REDIS][WRITE] : ", key)
val, err := json.Marshal(&model)
if err != nil {
return err
@ -65,6 +65,6 @@ func Set(key string, model interface{}, expired time.Duration) error {
func Remove(key string) error {
redis := GetInstance()
fmt.Println("[REDIS][REMOVE] : ", key)
// fmt.Println("[REDIS][REMOVE] : ", key)
return redis.Do(ctx, "DEL", key).Err()
}

@ -0,0 +1,16 @@
package apiv1
import (
noteController "github.com/ajikamaludin/go-fiber-rest/app/controllers/note"
"github.com/gofiber/fiber/v2"
)
func ApiRoutes(app *fiber.App) {
route := app.Group("/api/v1")
route.Get("/notes", noteController.GetAllNotes)
route.Post("/notes", noteController.CreateNote)
route.Get("/notes/:id", noteController.GetNoteById)
route.Put("/notes/:id", noteController.UpdateNote)
route.Delete("/notes/:id", noteController.DeleteNote)
}

@ -0,0 +1,13 @@
package http
import "github.com/gofiber/fiber/v2"
func Routes(app *fiber.App) {
app.Use(
func(c *fiber.Ctx) error {
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
"message": "Not Found",
})
},
)
}

@ -0,0 +1,12 @@
package home
import (
homeController "github.com/ajikamaludin/go-fiber-rest/app/controllers/home"
"github.com/gofiber/fiber/v2"
)
func HomeRoutes(app *fiber.App) {
route := app.Group("/")
route.Get("/", homeController.Home)
}
Loading…
Cancel
Save