我目前正在使用 Nest.Js 和 PostgreSQL 开发微服务架构,我面临着处理货币价值的挑战。最初,我考虑使用 BigInt 数据类型来表示最小货币单位 (MicroUSD) 的货币值,其中 100 万等于 1 美元。当将 BigInt 数据从微服务 1 发送到微服务 2 时,这种方法效果很好,因为 BigInt 通过微服务 1 的自定义序列化器序列化为字符串,然后微服务 2 使用其 DTO 中的自定义装饰器(称为 TransformAndValidateIsBigInt,太拗口了)。
但是,当微服务 2 发回其中包含 BigInt 的字段时,我遇到了问题。尽管在发回时它正确地将其序列化为 BigInt,但微服务 1 收到了一个字符串,因为无法使用传入数据的装饰器对其进行转换。
我考虑过的一个解决方案是创建一个 ResponseDto 并使用类转换器中的 plainToClass 函数手动转换原始数据。然而,这似乎是一个重大变化,我不确定这是否是最好的方法。
我现在想知道是否应该完全放弃 BigInt 方法,尽管它比浮点数有优势。我还在考虑其他 PostgreSQL 数据类型,它们可能更适合在这种情况下处理货币值。
考虑到这些序列化和反序列化挑战,任何人都可以提供有关在 Nest.Js 微服务架构中用于货币值的最佳 PostgreSQL 数据类型的见解或建议吗?
您能分享一下big int类型的serialize slenderize代码吗?它适用于包含 big int 作为字段的所有类型吗?