
- Thêm file .env.prod với cấu hình chi tiết cho môi trường production - Cập nhật docker-compose.dev.yml và docker-compose.prod.yml - Tạo Dockerfile.prod với cấu hình chi tiết cho production - Bổ sung cấu hình nginx, prometheus, grafana - Thêm cấu hình backup và monitoring - Cập nhật README với hướng dẫn chi tiết
119 lines
3.0 KiB
Go
119 lines
3.0 KiB
Go
package services
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/dungnt11/senflow_app/internal/models"
|
|
"github.com/dungnt11/senflow_app/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
|
|
}
|