diff --git a/cmd/main.go b/cmd/main.go index dabfed7..8ffd1ee 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -2,8 +2,8 @@ package main import ( "feedsystem_video_go/internal/config" - "feedsystem_video_go/internal/database" - "feedsystem_video_go/internal/router" + "feedsystem_video_go/internal/db" + apphttp "feedsystem_video_go/internal/http" "log" ) @@ -14,19 +14,20 @@ func main() { if err != nil { log.Fatalf("Failed to load config: %v", err) } + // Connect database log.Printf("Database config: %v", cfg.Database) - - db, err := database.NewDB(cfg.Database) + sqlDB, err := db.NewDB(cfg.Database) if err != nil { log.Fatalf("Failed to connect database: %v", err) } - if err := database.AutoMigrate(db); err != nil { + if err := db.AutoMigrate(sqlDB); err != nil { log.Fatalf("Failed to auto migrate database: %v", err) } - defer database.CloseDB(db) + defer db.CloseDB(sqlDB) + // Set router - r := router.SetRouter(db) + r := apphttp.SetRouter(sqlDB) log.Printf("Server is running on port %s", cfg.Server.Port) if err := r.Run(":" + cfg.Server.Port); err != nil { log.Fatalf("Failed to run server: %v", err) diff --git a/internal/model/user.go b/internal/account/entity.go similarity index 90% rename from internal/model/user.go rename to internal/account/entity.go index 901fb6f..177eb69 100644 --- a/internal/model/user.go +++ b/internal/account/entity.go @@ -1,4 +1,4 @@ -package model +package account type User struct { ID uint `gorm:"primaryKey" json:"id"` diff --git a/internal/repository/user.go b/internal/account/repo.go similarity index 56% rename from internal/repository/user.go rename to internal/account/repo.go index ea568bd..f13d03e 100644 --- a/internal/repository/user.go +++ b/internal/account/repo.go @@ -1,8 +1,6 @@ -package repository +package account import ( - "feedsystem_video_go/internal/model" - "gorm.io/gorm" ) @@ -14,7 +12,7 @@ func NewUserRepository(db *gorm.DB) *UserRepository { return &UserRepository{db: db} } -func (ur *UserRepository) CreateUser(user *model.User) error { +func (ur *UserRepository) CreateUser(user *User) error { if err := ur.db.Create(user).Error; err != nil { return err } @@ -22,29 +20,29 @@ func (ur *UserRepository) CreateUser(user *model.User) error { } func (ur *UserRepository) RenameByID(id uint, newUsername string) error { - if err := ur.db.Model(&model.User{}).Where("id = ?", id).Update("username", newUsername).Error; err != nil { + if err := ur.db.Model(&User{}).Where("id = ?", id).Update("username", newUsername).Error; err != nil { return err } return nil } func (ur *UserRepository) ChangePassword(id uint, newPassword string) error { - if err := ur.db.Model(&model.User{}).Where("id = ?", id).Update("password", newPassword).Error; err != nil { + if err := ur.db.Model(&User{}).Where("id = ?", id).Update("password", newPassword).Error; err != nil { return err } return nil } -func (ur *UserRepository) FindByID(id uint) (*model.User, error) { - var user model.User +func (ur *UserRepository) FindByID(id uint) (*User, error) { + var user User if err := ur.db.First(&user, id).Error; err != nil { return nil, err } return &user, nil } -func (ur *UserRepository) FindByUsername(username string) (*model.User, error) { - var user model.User +func (ur *UserRepository) FindByUsername(username string) (*User, error) { + var user User if err := ur.db.Where("username = ?", username).First(&user).Error; err != nil { return nil, err } diff --git a/internal/service/user.go b/internal/account/service.go similarity index 64% rename from internal/service/user.go rename to internal/account/service.go index 40dd5cd..57ab4c2 100644 --- a/internal/service/user.go +++ b/internal/account/service.go @@ -1,19 +1,14 @@ -package service - -import ( - "feedsystem_video_go/internal/model" - "feedsystem_video_go/internal/repository" -) +package account type UserService struct { - userRepository *repository.UserRepository + userRepository *UserRepository } -func NewUserService(userRepository *repository.UserRepository) *UserService { +func NewUserService(userRepository *UserRepository) *UserService { return &UserService{userRepository: userRepository} } -func (us *UserService) CreateUser(user *model.User) error { +func (us *UserService) CreateUser(user *User) error { if err := us.userRepository.CreateUser(user); err != nil { return err } @@ -34,7 +29,7 @@ func (us *UserService) ChangePassword(id uint, newPassword string) error { return nil } -func (us *UserService) FindByID(id uint) (*model.User, error) { +func (us *UserService) FindByID(id uint) (*User, error) { if user, err := us.userRepository.FindByID(id); err != nil { return nil, err } else { @@ -42,7 +37,7 @@ func (us *UserService) FindByID(id uint) (*model.User, error) { } } -func (us *UserService) FindByUsername(username string) (*model.User, error) { +func (us *UserService) FindByUsername(username string) (*User, error) { if user, err := us.userRepository.FindByUsername(username); err != nil { return nil, err } else { diff --git a/internal/api/user.go b/internal/api/user.go deleted file mode 100644 index 560c6df..0000000 --- a/internal/api/user.go +++ /dev/null @@ -1,43 +0,0 @@ -package api - -type CreateUserRequest struct { - Username string `json:"username"` - Password string `json:"password"` -} - -type CreateUserResponse struct { -} - -type RenameByIDRequest struct { - ID uint `json:"id"` - NewUsername string `json:"new_username"` -} - -type RenameByIDResponse struct { -} - -type FindByIDRequest struct { - ID uint `json:"id"` -} - -type FindByIDResponse struct { - ID uint `json:"id"` - Username string `json:"username"` -} - -type FindByUsernameRequest struct { - Username string `json:"username"` -} - -type FindByUsernameResponse struct { - ID uint `json:"id"` - Username string `json:"username"` -} - -type ChangePasswordRequest struct { - ID uint `json:"id"` - NewPassword string `json:"new_password"` -} - -type ChangePasswordResponse struct { -} diff --git a/internal/database/database.go b/internal/db/db.go similarity index 86% rename from internal/database/database.go rename to internal/db/db.go index b58edb8..9ee8b6d 100644 --- a/internal/database/database.go +++ b/internal/db/db.go @@ -1,8 +1,8 @@ -package database +package db import ( + "feedsystem_video_go/internal/account" "feedsystem_video_go/internal/config" - "feedsystem_video_go/internal/model" "fmt" "gorm.io/driver/mysql" @@ -22,7 +22,7 @@ func NewDB(dbcfg config.DatabaseConfig) (*gorm.DB, error) { } func AutoMigrate(db *gorm.DB) error { - return db.AutoMigrate(&model.User{}) + return db.AutoMigrate(&account.User{}) } func CloseDB(db *gorm.DB) error { diff --git a/internal/handler/user.go b/internal/http/account_handler.go similarity index 61% rename from internal/handler/user.go rename to internal/http/account_handler.go index af625e0..b3810b1 100644 --- a/internal/handler/user.go +++ b/internal/http/account_handler.go @@ -1,27 +1,67 @@ -package handler +package account import ( - "feedsystem_video_go/internal/api" - "feedsystem_video_go/internal/model" - "feedsystem_video_go/internal/service" + "feedsystem_video_go/internal/account" "github.com/gin-gonic/gin" ) type UserHandler struct { - userService *service.UserService + userService *account.UserService } -func NewUserHandler(userService *service.UserService) *UserHandler { +type CreateUserRequest struct { + Username string `json:"username"` + Password string `json:"password"` +} + +type CreateUserResponse struct { +} + +type RenameByIDRequest struct { + ID uint `json:"id"` + NewUsername string `json:"new_username"` +} + +type RenameByIDResponse struct { +} + +type FindByIDRequest struct { + ID uint `json:"id"` +} + +type FindByIDResponse struct { + ID uint `json:"id"` + Username string `json:"username"` +} + +type FindByUsernameRequest struct { + Username string `json:"username"` +} + +type FindByUsernameResponse struct { + ID uint `json:"id"` + Username string `json:"username"` +} + +type ChangePasswordRequest struct { + ID uint `json:"id"` + NewPassword string `json:"new_password"` +} + +type ChangePasswordResponse struct { +} + +func NewUserHandler(userService *account.UserService) *UserHandler { return &UserHandler{userService: userService} } func (h *UserHandler) CreateUser(c *gin.Context) { - var req api.CreateUserRequest + var req CreateUserRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } - if err := h.userService.CreateUser(&model.User{ + if err := h.userService.CreateUser(&account.User{ Username: req.Username, Password: req.Password, }); err != nil { @@ -32,7 +72,7 @@ func (h *UserHandler) CreateUser(c *gin.Context) { } func (h *UserHandler) RenameByID(c *gin.Context) { - var req api.RenameByIDRequest + var req RenameByIDRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return @@ -45,7 +85,7 @@ func (h *UserHandler) RenameByID(c *gin.Context) { } func (h *UserHandler) ChangePassword(c *gin.Context) { - var req api.ChangePasswordRequest + var req ChangePasswordRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return @@ -58,7 +98,7 @@ func (h *UserHandler) ChangePassword(c *gin.Context) { } func (h *UserHandler) FindByID(c *gin.Context) { - var req api.FindByIDRequest + var req FindByIDRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return @@ -72,7 +112,7 @@ func (h *UserHandler) FindByID(c *gin.Context) { } func (h *UserHandler) FindByUsername(c *gin.Context) { - var req api.FindByUsernameRequest + var req FindByUsernameRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return diff --git a/internal/router/router.go b/internal/http/router.go similarity index 60% rename from internal/router/router.go rename to internal/http/router.go index a6e99e6..cddcd63 100644 --- a/internal/router/router.go +++ b/internal/http/router.go @@ -1,9 +1,7 @@ -package router +package http import ( - "feedsystem_video_go/internal/handler" - "feedsystem_video_go/internal/repository" - "feedsystem_video_go/internal/service" + "feedsystem_video_go/internal/account" "github.com/gin-gonic/gin" "gorm.io/gorm" @@ -12,9 +10,9 @@ import ( func SetRouter(db *gorm.DB) *gin.Engine { r := gin.Default() - userRepository := repository.NewUserRepository(db) - userService := service.NewUserService(userRepository) - userHandler := handler.NewUserHandler(userService) + userRepository := account.NewUserRepository(db) + userService := account.NewUserService(userRepository) + userHandler := NewUserHandler(userService) userGroup := r.Group("/user") { userGroup.POST("/register", userHandler.CreateUser)