fix(admin-service): 修复上传版本时isForceUpdate始终为true的问题
问题原因:
- ValidationPipe配置了enableImplicitConversion: true
- FormData发送字符串"false"时,Boolean("false")被隐式转换为true
- @Transform装饰器在隐式转换之后执行,收到的value已经是true
解决方案:
- 在@Transform中使用obj参数获取原始未转换的值
- 手动判断字符串"true"/"false"并正确转换为布尔值
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
058849dc2c
commit
fe593714ae
|
|
@ -34,12 +34,21 @@ export class UploadVersionDto {
|
||||||
|
|
||||||
@ApiPropertyOptional({ description: '是否强制更新', default: false })
|
@ApiPropertyOptional({ description: '是否强制更新', default: false })
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
@Transform(({ value }) => {
|
@Transform(({ obj }) => {
|
||||||
|
// Access the raw value directly from the source object
|
||||||
|
// This bypasses enableImplicitConversion which incorrectly converts "false" string to true
|
||||||
|
const rawValue = obj.isForceUpdate
|
||||||
|
|
||||||
// Handle string "true"/"false" from FormData
|
// Handle string "true"/"false" from FormData
|
||||||
if (typeof value === 'string') {
|
if (typeof rawValue === 'string') {
|
||||||
return value.toLowerCase() === 'true'
|
return rawValue.toLowerCase() === 'true'
|
||||||
}
|
}
|
||||||
return value === true
|
// Handle undefined/null - default to false
|
||||||
|
if (rawValue === undefined || rawValue === null) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// Handle actual boolean value
|
||||||
|
return rawValue === true
|
||||||
})
|
})
|
||||||
@IsBoolean()
|
@IsBoolean()
|
||||||
isForceUpdate?: boolean
|
isForceUpdate?: boolean
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue