todoms_golang/internal/services/user_service.go
2025-04-12 15:25:34 +07:00

119 lines
3.0 KiB
Go

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
}