创建批次时插入一条记录
This commit is contained in:
47
internal/app/controller/auth_utils.go
Normal file
47
internal/app/controller/auth_utils.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrUserNotFoundInContext 表示在 gin.Context 中未找到用户信息。
|
||||
ErrUserNotFoundInContext = errors.New("context中未找到用户信息")
|
||||
// ErrInvalidUserType 表示从 gin.Context 中获取的用户信息类型不正确。
|
||||
ErrInvalidUserType = errors.New("context中用户信息类型不正确")
|
||||
)
|
||||
|
||||
// GetOperatorIDFromContext 从 gin.Context 中提取操作者ID。
|
||||
// 假设操作者ID是由 AuthMiddleware 存储到 context 中的 *models.User 对象的 ID 字段。
|
||||
func GetOperatorIDFromContext(c *gin.Context) (uint, error) {
|
||||
userVal, exists := c.Get(models.ContextUserKey.String())
|
||||
if !exists {
|
||||
return 0, ErrUserNotFoundInContext
|
||||
}
|
||||
|
||||
user, ok := userVal.(*models.User)
|
||||
if !ok {
|
||||
return 0, ErrInvalidUserType
|
||||
}
|
||||
|
||||
return user.ID, nil
|
||||
}
|
||||
|
||||
// GetOperatorFromContext 从 gin.Context 中提取操作者。
|
||||
// 假设操作者是由 AuthMiddleware 存储到 context 中的 *models.User 对象的 字段。
|
||||
func GetOperatorFromContext(c *gin.Context) (*models.User, error) {
|
||||
userVal, exists := c.Get(models.ContextUserKey.String())
|
||||
if !exists {
|
||||
return nil, ErrUserNotFoundInContext
|
||||
}
|
||||
|
||||
user, ok := userVal.(*models.User)
|
||||
if !ok {
|
||||
return nil, ErrInvalidUserType
|
||||
}
|
||||
|
||||
return user, nil
|
||||
}
|
||||
@@ -45,7 +45,9 @@ func (c *PigBatchController) CreatePigBatch(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
respDTO, err := c.service.CreatePigBatch(&req)
|
||||
userID, err := controller.GetOperatorIDFromContext(ctx)
|
||||
|
||||
respDTO, err := c.service.CreatePigBatch(userID, &req)
|
||||
if err != nil {
|
||||
c.logger.Errorf("%s: 业务逻辑失败: %v", action, err)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "创建猪批次失败", action, "业务逻辑失败", req)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
|
||||
// PigBatchService 接口定义保持不变,继续作为应用层对外的契约。
|
||||
type PigBatchService interface {
|
||||
CreatePigBatch(dto *dto.PigBatchCreateDTO) (*dto.PigBatchResponseDTO, error)
|
||||
CreatePigBatch(operatorID uint, dto *dto.PigBatchCreateDTO) (*dto.PigBatchResponseDTO, error)
|
||||
GetPigBatch(id uint) (*dto.PigBatchResponseDTO, error)
|
||||
UpdatePigBatch(id uint, dto *dto.PigBatchUpdateDTO) (*dto.PigBatchResponseDTO, error)
|
||||
DeletePigBatch(id uint) error
|
||||
@@ -51,7 +51,7 @@ func (s *pigBatchService) toPigBatchResponseDTO(batch *models.PigBatch) *dto.Pig
|
||||
}
|
||||
|
||||
// CreatePigBatch 现在将请求委托给领域服务处理。
|
||||
func (s *pigBatchService) CreatePigBatch(dto *dto.PigBatchCreateDTO) (*dto.PigBatchResponseDTO, error) {
|
||||
func (s *pigBatchService) CreatePigBatch(operatorID uint, dto *dto.PigBatchCreateDTO) (*dto.PigBatchResponseDTO, error) {
|
||||
// 1. DTO -> 领域模型
|
||||
batch := &models.PigBatch{
|
||||
BatchNumber: dto.BatchNumber,
|
||||
@@ -62,7 +62,7 @@ func (s *pigBatchService) CreatePigBatch(dto *dto.PigBatchCreateDTO) (*dto.PigBa
|
||||
}
|
||||
|
||||
// 2. 调用领域服务
|
||||
createdBatch, err := s.domainService.CreatePigBatch(batch)
|
||||
createdBatch, err := s.domainService.CreatePigBatch(operatorID, batch)
|
||||
if err != nil {
|
||||
s.logger.Errorf("应用层: 创建猪批次失败: %v", err)
|
||||
return nil, mapDomainError(err)
|
||||
|
||||
Reference in New Issue
Block a user