more SOLIDer

This commit is contained in:
BENEDEK László 2025-06-05 13:17:16 +02:00
parent 623e9e1ad5
commit ecd996e21e
14 changed files with 70 additions and 104 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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

View File

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

View File

@ -1,5 +0,0 @@
package dao
type IDAO interface {
Ready() bool
}

View File

@ -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

View File

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

View File

@ -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()

View File

@ -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()

View File

@ -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()