Open7
go-backend-clean-architecture

以下のリポジトリを眺めてみる

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)
}

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)
}

controllerは複数usecase読んでもよい設計
contollerに結構処理が寄っているイメージ

1つのusecaseの1つの関数がかなり責務細かそう

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

綺麗にまとまっててよさそう!
これを参考に改造していくと綺麗なアーキテクチャが組めそう
個人的には、controllerに処理が集まるのが好みではないので、
usecaseの責務をもう少し大きくして、controllerはリクレスの処理に集中できると良さそう
usecase内で共通的な処理がしたくなった場合はhogeServiceみたいなやつ入れそう