package services import ( "errors" "github.com/dungnt11/todoms_golang/internal/models" "github.com/dungnt11/todoms_golang/internal/repositories" "github.com/gin-gonic/gin" ) // UserService triển khai IUserService type UserService struct { userRepo repositories.IUserRepository } // NewUserService tạo một instance mới của UserService func NewUserService(userRepo repositories.IUserRepository) *UserService { return &UserService{ userRepo: userRepo, } } // Register xử lý logic đăng ký người dùng func (us *UserService) Register(c *gin.Context) (map[string]interface{}, error) { // Đọc dữ liệu từ request var user models.User if err := c.ShouldBindJSON(&user); err != nil { return nil, err } // Kiểm tra username đã tồn tại chưa existingUser, _ := us.userRepo.FindByUsername(user.Username) if existingUser != nil { return nil, errors.New("username đã được sử dụng") } // Lưu vào database thông qua repository err := us.userRepo.Create(&user) if err != nil { return nil, err } // Trả về kết quả return map[string]interface{}{ "message": "Đăng ký thành công", "user_id": user.ID, }, nil } // Login xử lý logic đăng nhập func (us *UserService) Login(c *gin.Context) (map[string]interface{}, error) { // Đọc dữ liệu từ request var loginData struct { Username string `json:"username"` Password string `json:"password"` } if err := c.ShouldBindJSON(&loginData); err != nil { return nil, err } // Tìm user theo username user, err := us.userRepo.FindByUsername(loginData.Username) if err != nil { return nil, errors.New("username hoặc mật khẩu không đúng") } // Kiểm tra mật khẩu (giả định) if user.Password != loginData.Password { return nil, errors.New("username hoặc mật khẩu không đúng") } // Trả về kết quả return map[string]interface{}{ "message": "Đăng nhập thành công", "user_id": user.ID, "token": "jwt_token_here", // Trong thực tế, bạn sẽ tạo JWT token }, nil } // GetProfile lấy thông tin profile của người dùng func (us *UserService) GetProfile(userID uint) (map[string]interface{}, error) { // Tìm user theo ID user, err := us.userRepo.FindByID(userID) if err != nil { return nil, errors.New("không tìm thấy người dùng") } // Trả về kết quả return map[string]interface{}{ "user": user, }, nil } // UpdateProfile cập nhật thông tin profile của người dùng func (us *UserService) UpdateProfile(userID uint, data map[string]interface{}) (map[string]interface{}, error) { // Tìm user theo ID user, err := us.userRepo.FindByID(userID) if err != nil { return nil, errors.New("không tìm thấy người dùng") } // Cập nhật thông tin (giả định) if name, ok := data["name"].(string); ok { user.Name = name } // Lưu vào database err = us.userRepo.Update(user) if err != nil { return nil, err } // Trả về kết quả return map[string]interface{}{ "message": "Cập nhật thành công", "user": user, }, nil }