Open7

go-backend-clean-architecture

yuucuyuucu

main シンプル

package main

import (
	"time"

	route "github.com/amitshekhariitbhu/go-backend-clean-architecture/api/route"
	"github.com/amitshekhariitbhu/go-backend-clean-architecture/bootstrap"
	"github.com/gin-gonic/gin"
)

func main() {

	app := bootstrap.App()

	env := app.Env

	db := app.Mongo.Database(env.DBName)
	defer app.CloseDBConnection()

	timeout := time.Duration(env.ContextTimeout) * time.Second

	gin := gin.Default()

	route.Setup(env, timeout, db, gin)

	gin.Run(env.ServerAddress)
}

yuucuyuucu

route.Setup周りでDIして色々準備している

func NewLoginRouter(env *bootstrap.Env, timeout time.Duration, db mongo.Database, group *gin.RouterGroup) {
	ur := repository.NewUserRepository(db, domain.CollectionUser)
	lc := &controller.LoginController{
		LoginUsecase: usecase.NewLoginUsecase(ur, timeout),
		Env:          env,
	}
	group.POST("/login", lc.Login)
}
yuucuyuucu

controllerは複数usecase読んでもよい設計

contollerに結構処理が寄っているイメージ

yuucuyuucu

repositoryは違和感なくて良さそう

yuucuyuucu

綺麗にまとまっててよさそう!
これを参考に改造していくと綺麗なアーキテクチャが組めそう

個人的には、controllerに処理が集まるのが好みではないので、
usecaseの責務をもう少し大きくして、controllerはリクレスの処理に集中できると良さそう

usecase内で共通的な処理がしたくなった場合はhogeServiceみたいなやつ入れそう