From ecd996e21eb1f3e1cda738ade72451ee96d0c82d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BENEDEK=20L=C3=A1szl=C3=B3?= Date: Thu, 5 Jun 2025 13:17:16 +0200 Subject: [PATCH] more SOLIDer --- api/auth.go | 31 +++------------------------- api/endpoints.go | 34 ++++++++++++++++++++++++++++++ api/user.go | 9 -------- controller/AuthController.go | 40 ++++++++++-------------------------- controller/ChatController.go | 14 +++++++++++++ controller/UserController.go | 20 +++++------------- dao/Factory.go | 6 +++--- dao/IChannelDAD.go | 1 - dao/IDAO.go | 5 ----- dao/ISessionDAO.go | 1 - dao/IUserDAO.go | 1 - dao/postgres/ChannelDAO.go | 4 ---- dao/postgres/UserDAO.go | 4 ---- dao/valkey/SessionDAO.go | 4 ---- 14 files changed, 70 insertions(+), 104 deletions(-) create mode 100644 controller/ChatController.go delete mode 100644 dao/IDAO.go diff --git a/api/auth.go b/api/auth.go index 422753c..b8704fb 100644 --- a/api/auth.go +++ b/api/auth.go @@ -4,7 +4,6 @@ import ( "net/http" "git.tek.govt.hu/dowerx/chat/server/config" - "git.tek.govt.hu/dowerx/chat/server/controller" "github.com/gin-gonic/gin" ) @@ -39,13 +38,7 @@ func register(c *gin.Context) { return } - authController, err := controller.MakeAuthController() - if err != nil { - sendError(c, err) - return - } - - err = authController.Register(transaction.Username, transaction.Password, transaction.RepeatPassword) + err := authController.Register(transaction.Username, transaction.Password, transaction.RepeatPassword) if err != nil { sendError(c, err) return @@ -69,12 +62,6 @@ func login(c *gin.Context) { return } - authController, err := controller.MakeAuthController() - if err != nil { - sendError(c, err) - return - } - token, err := authController.Login(transaction.Username, transaction.Password) if err != nil { sendError(c, err) @@ -89,14 +76,8 @@ func login(c *gin.Context) { } func logout(c *gin.Context) { - authController, err := controller.MakeAuthController() - if err != nil { - sendError(c, err) - return - } - token, _ := c.Get(SESSION_COOKIE) // must exist after isLoggedIn - err = authController.Logout(token.(string)) + err := authController.Logout(token.(string)) if err != nil { sendError(c, err) return @@ -109,14 +90,8 @@ func logout(c *gin.Context) { } func bump(c *gin.Context) { - authController, err := controller.MakeAuthController() - if err != nil { - sendError(c, err) - return - } - token, _ := c.Get(SESSION_COOKIE) - if err = authController.Bump(token.(string)); err != nil { + if err := authController.Bump(token.(string)); err != nil { sendError(c, err) return } diff --git a/api/endpoints.go b/api/endpoints.go index 5dcd406..7e2a9a0 100644 --- a/api/endpoints.go +++ b/api/endpoints.go @@ -4,10 +4,44 @@ import ( "net/http" "time" + "git.tek.govt.hu/dowerx/chat/server/controller" + "git.tek.govt.hu/dowerx/chat/server/dao" + "git.tek.govt.hu/dowerx/chat/server/util" "github.com/gin-gonic/gin" ) +var userController controller.UserController +var chatController controller.ChatController +var authController controller.AuthController + +func initControlles() *util.ChatError { + userDAO, err := dao.GetUserDAO() + if err != nil { + return err + } + + channelDAO, err := dao.GetChannelDAO() + if err != nil { + return err + } + + sessionDAO, err := dao.GetSessionDAO() + if err != nil { + return err + } + + userController = controller.MakeUserController(userDAO) + authController = controller.MakeAuthController(userDAO, sessionDAO) + chatController = controller.MakeChatController(channelDAO) + + return nil +} + func Listen(address string, base string) error { + if err := initControlles(); err != nil { + return err + } + router := gin.Default() api := router.Group(base) diff --git a/api/user.go b/api/user.go index 077e040..77b0e07 100644 --- a/api/user.go +++ b/api/user.go @@ -1,10 +1,8 @@ package api import ( - "fmt" "net/http" - "git.tek.govt.hu/dowerx/chat/server/controller" "github.com/gin-gonic/gin" ) @@ -13,13 +11,6 @@ const USERNAME_PARAM string = "username" func userInfo(c *gin.Context) { username := c.Param(USERNAME_PARAM) - userController, err := controller.MakeUserController() - if err != nil { - fmt.Println(err.Error()) - sendError(c, err) - return - } - user, err := userController.GetUser(username) if err != nil { sendError(c, err) diff --git a/controller/AuthController.go b/controller/AuthController.go index 3e45983..bbecd45 100644 --- a/controller/AuthController.go +++ b/controller/AuthController.go @@ -6,16 +6,14 @@ import ( "git.tek.govt.hu/dowerx/chat/server/config" "git.tek.govt.hu/dowerx/chat/server/dao" - "git.tek.govt.hu/dowerx/chat/server/dao/postgres" - "git.tek.govt.hu/dowerx/chat/server/dao/valkey" "git.tek.govt.hu/dowerx/chat/server/model" "git.tek.govt.hu/dowerx/chat/server/util" "golang.org/x/crypto/bcrypt" ) type AuthController struct { - UserDAO dao.IUserDAO - SessionDAO dao.ISessionDAO + userDAO dao.IUserDAO + sessionDAO dao.ISessionDAO } const ( @@ -44,7 +42,7 @@ func (c AuthController) Register(username string, password string, repeatPasswor return util.MakeError(err, util.GENERAL_ERROR) } - return c.UserDAO.Create(model.User{ + return c.userDAO.Create(model.User{ Username: username, PasswordHash: string(hash), }) @@ -61,7 +59,7 @@ func generateToken(length int) (string, error) { } func (c AuthController) Login(username string, password string) (string, *util.ChatError) { - user, err := c.UserDAO.Read(model.User{Username: username}) + user, err := c.userDAO.Read(model.User{Username: username}) if err != nil { return "", err } @@ -75,12 +73,12 @@ func (c AuthController) Login(username string, password string) (string, *util.C return "", util.MakeError(err, util.GENERAL_ERROR) } - err = c.SessionDAO.DeleteAllByID(user.ID) + err = c.sessionDAO.DeleteAllByID(user.ID) if err != nil { return "", err } - err = c.SessionDAO.Set(token, user.ID) + err = c.sessionDAO.Set(token, user.ID) if err != nil { return "", err } @@ -89,30 +87,14 @@ func (c AuthController) Login(username string, password string) (string, *util.C } func (c AuthController) Logout(token string) *util.ChatError { - return c.SessionDAO.Delete(token) + return c.sessionDAO.Delete(token) } func (c AuthController) Bump(token string) *util.ChatError { - return c.SessionDAO.Bump(token, config.GetConfig().API.TokenLife) + return c.sessionDAO.Bump(token, config.GetConfig().API.TokenLife) } -func MakeAuthController() (AuthController, *util.ChatError) { - controller := AuthController{} - - userDAO := postgres.UserDAOPG{} - err := userDAO.Init() - if err != nil { - return controller, err - } - - sessionDAO := valkey.SessionDAOVK{} - err = sessionDAO.Init() - if err != nil { - return controller, err - } - - controller.UserDAO = userDAO - controller.SessionDAO = sessionDAO - - return controller, nil +func MakeAuthController(userDAO dao.IUserDAO, sessionDAO dao.ISessionDAO) AuthController { + controller := AuthController{userDAO: userDAO, sessionDAO: sessionDAO} + return controller } diff --git a/controller/ChatController.go b/controller/ChatController.go new file mode 100644 index 0000000..f51d9f4 --- /dev/null +++ b/controller/ChatController.go @@ -0,0 +1,14 @@ +package controller + +import ( + "git.tek.govt.hu/dowerx/chat/server/dao" +) + +type ChatController struct { + channelDAO dao.IChannelDAO +} + +func MakeChatController(channelDAO dao.IChannelDAO) ChatController { + controller := ChatController{channelDAO: channelDAO} + return controller +} diff --git a/controller/UserController.go b/controller/UserController.go index 0a4aa59..2689e44 100644 --- a/controller/UserController.go +++ b/controller/UserController.go @@ -2,29 +2,19 @@ package controller import ( "git.tek.govt.hu/dowerx/chat/server/dao" - "git.tek.govt.hu/dowerx/chat/server/dao/postgres" "git.tek.govt.hu/dowerx/chat/server/model" "git.tek.govt.hu/dowerx/chat/server/util" ) type UserController struct { - UserDAO dao.IUserDAO + userDAO dao.IUserDAO } func (c UserController) GetUser(username string) (model.User, *util.ChatError) { - return c.UserDAO.Read(model.User{Username: username}) + return c.userDAO.Read(model.User{Username: username}) } -func MakeUserController() (UserController, *util.ChatError) { - controller := UserController{} - - userDAO := postgres.UserDAOPG{} - err := userDAO.Init() - if err != nil { - return controller, err - } - - controller.UserDAO = userDAO - - return controller, nil +func MakeUserController(userDAO dao.IUserDAO) UserController { + controller := UserController{userDAO: userDAO} + return controller } diff --git a/dao/Factory.go b/dao/Factory.go index 4ead2f4..1518e42 100644 --- a/dao/Factory.go +++ b/dao/Factory.go @@ -11,7 +11,7 @@ var channelDAO IChannelDAO var sessionDAO ISessionDAO func GetUserDAO() (IUserDAO, *util.ChatError) { - if !userDAO.Ready() { + if userDAO == nil { dao, err := postgres.MakeUserDAO() if err != nil { return userDAO, err @@ -24,7 +24,7 @@ func GetUserDAO() (IUserDAO, *util.ChatError) { } func GetChannelDAO() (IChannelDAO, *util.ChatError) { - if !channelDAO.Ready() { + if channelDAO == nil { dao, err := postgres.MakeChannelDAO() if err != nil { return channelDAO, err @@ -37,7 +37,7 @@ func GetChannelDAO() (IChannelDAO, *util.ChatError) { } func GetSessionDAO() (ISessionDAO, *util.ChatError) { - if !sessionDAO.Ready() { + if sessionDAO == nil { dao, err := valkey.MakeUserDAO() if err != nil { return sessionDAO, err diff --git a/dao/IChannelDAD.go b/dao/IChannelDAD.go index 7633d0d..93779b5 100644 --- a/dao/IChannelDAD.go +++ b/dao/IChannelDAD.go @@ -6,7 +6,6 @@ import ( ) type IChannelDAO interface { - IDAO Create(channel model.Channel) *util.ChatError Read(channel model.Channel) (model.Channel, *util.ChatError) List() ([]model.Channel, *util.ChatError) diff --git a/dao/IDAO.go b/dao/IDAO.go deleted file mode 100644 index 1c4c9b1..0000000 --- a/dao/IDAO.go +++ /dev/null @@ -1,5 +0,0 @@ -package dao - -type IDAO interface { - Ready() bool -} diff --git a/dao/ISessionDAO.go b/dao/ISessionDAO.go index c2a8d27..b632863 100644 --- a/dao/ISessionDAO.go +++ b/dao/ISessionDAO.go @@ -3,7 +3,6 @@ package dao import "git.tek.govt.hu/dowerx/chat/server/util" type ISessionDAO interface { - IDAO Set(token string, id int) *util.ChatError Get(token string) (int, *util.ChatError) Delete(token string) *util.ChatError diff --git a/dao/IUserDAO.go b/dao/IUserDAO.go index 3b6c714..5879372 100644 --- a/dao/IUserDAO.go +++ b/dao/IUserDAO.go @@ -6,7 +6,6 @@ import ( ) type IUserDAO interface { - IDAO Create(user model.User) *util.ChatError Read(user model.User) (model.User, *util.ChatError) List() ([]model.User, *util.ChatError) diff --git a/dao/postgres/ChannelDAO.go b/dao/postgres/ChannelDAO.go index 05f0dcd..3c31356 100644 --- a/dao/postgres/ChannelDAO.go +++ b/dao/postgres/ChannelDAO.go @@ -71,10 +71,6 @@ func (d ChannelDAOPG) Delete(channel model.Channel) *util.ChatError { return util.MakeError(err, util.DATABASE_QUERY_FAULT) } -func (d ChannelDAOPG) Ready() bool { - return d.db != nil -} - func MakeChannelDAO() (ChannelDAOPG, *util.ChatError) { dao := ChannelDAOPG{} conn, err := getDatabase() diff --git a/dao/postgres/UserDAO.go b/dao/postgres/UserDAO.go index c1402e8..2dc2e5c 100644 --- a/dao/postgres/UserDAO.go +++ b/dao/postgres/UserDAO.go @@ -81,10 +81,6 @@ func (d UserDAOPG) Delete(user model.User) *util.ChatError { return util.MakeError(err, util.DATABASE_QUERY_FAULT) } -func (d UserDAOPG) Ready() bool { - return d.db != nil -} - func MakeUserDAO() (UserDAOPG, *util.ChatError) { dao := UserDAOPG{} conn, err := getDatabase() diff --git a/dao/valkey/SessionDAO.go b/dao/valkey/SessionDAO.go index 33d2e89..60f7abc 100644 --- a/dao/valkey/SessionDAO.go +++ b/dao/valkey/SessionDAO.go @@ -89,10 +89,6 @@ func (d SessionDAOVK) Bump(token string, time int) *util.ChatError { return util.MakeError((*d.vk).Do(context.Background(), cmd).Error(), util.DATABASE_QUERY_FAULT) } -func (d SessionDAOVK) Ready() bool { - return d.vk != nil -} - func MakeUserDAO() (SessionDAOVK, *util.ChatError) { dao := SessionDAOVK{} conn, err := getClient()