Files
pika/internal/handler/user_handler.go
T
2025-11-10 22:11:46 +08:00

183 lines
3.7 KiB
Go

package handler
import (
"github.com/dushixiang/pika/internal/service"
"github.com/go-orz/orz"
"github.com/labstack/echo/v4"
)
type UserHandler struct {
userService *service.UserService
}
func NewUserHandler(userService *service.UserService) *UserHandler {
return &UserHandler{
userService: userService,
}
}
// ResetPasswordRequest 重置密码请求
type ResetPasswordRequest struct {
NewPassword string `json:"newPassword" validate:"required,min=6"`
}
// UpdateUserStatusRequest 更新用户状态请求
type UpdateUserStatusRequest struct {
Status int `json:"status" validate:"required,oneof=0 1"`
}
// Paging 用户分页查询
func (r UserHandler) Paging(c echo.Context) error {
username := c.QueryParam("username")
pr := orz.GetPageRequest(c, "created_at", "username")
builder := orz.NewPageBuilder(r.userService.Repository).
PageRequest(pr).
Contains("username", username)
ctx := c.Request().Context()
page, err := builder.Execute(ctx)
if err != nil {
return err
}
return orz.Ok(c, orz.Map{
"items": page.Items,
"total": page.Total,
})
}
// Create 创建用户
func (r UserHandler) Create(c echo.Context) error {
var req service.CreateUserRequest
if err := c.Bind(&req); err != nil {
return err
}
if err := c.Validate(&req); err != nil {
return err
}
ctx := c.Request().Context()
user, err := r.userService.CreateUser(ctx, &req)
if err != nil {
return err
}
return orz.Ok(c, user)
}
// Get 获取用户详情
func (r UserHandler) Get(c echo.Context) error {
id := c.Param("id")
ctx := c.Request().Context()
user, err := r.userService.GetUser(ctx, id)
if err != nil {
return err
}
return orz.Ok(c, user)
}
// Update 更新用户
func (r UserHandler) Update(c echo.Context) error {
id := c.Param("id")
var req service.UpdateUserRequest
if err := c.Bind(&req); err != nil {
return err
}
if err := c.Validate(&req); err != nil {
return err
}
ctx := c.Request().Context()
user, err := r.userService.UpdateUser(ctx, id, &req)
if err != nil {
return err
}
return orz.Ok(c, user)
}
// Delete 删除用户
func (r UserHandler) Delete(c echo.Context) error {
id := c.Param("id")
ctx := c.Request().Context()
if err := r.userService.DeleteUser(ctx, id); err != nil {
return err
}
return orz.Ok(c, orz.Map{
"message": "用户删除成功",
})
}
// ChangePassword 修改密码
func (r UserHandler) ChangePassword(c echo.Context) error {
id := c.Param("id")
var req service.ChangePasswordRequest
if err := c.Bind(&req); err != nil {
return err
}
if err := c.Validate(&req); err != nil {
return err
}
ctx := c.Request().Context()
if err := r.userService.ChangePassword(ctx, id, req.OldPassword, req.NewPassword); err != nil {
return err
}
return orz.Ok(c, orz.Map{
"message": "密码修改成功",
})
}
// ResetPassword 重置密码(管理员操作)
func (r UserHandler) ResetPassword(c echo.Context) error {
id := c.Param("id")
var req ResetPasswordRequest
if err := c.Bind(&req); err != nil {
return err
}
if err := c.Validate(&req); err != nil {
return err
}
ctx := c.Request().Context()
if err := r.userService.ResetPassword(ctx, id, req.NewPassword); err != nil {
return err
}
return orz.Ok(c, orz.Map{
"message": "密码重置成功",
})
}
// UpdateStatus 更新用户状态
func (r UserHandler) UpdateStatus(c echo.Context) error {
id := c.Param("id")
var req UpdateUserStatusRequest
if err := c.Bind(&req); err != nil {
return err
}
if err := c.Validate(&req); err != nil {
return err
}
ctx := c.Request().Context()
if err := r.userService.UpdateUserStatus(ctx, id, req.Status); err != nil {
return err
}
return orz.Ok(c, orz.Map{
"message": "用户状态更新成功",
})
}