Add SqlExceptionTranslator config and options class

Introduce SqlExceptionTranslator section in appsettings.json to map common SQL error codes to user-friendly messages. Add SqlExceptionTranslatorOptions class to manage error code/message mapping and support configuration binding.
This commit is contained in:
Developer 02
2026-01-22 01:13:02 +01:00
parent f71bcf37e9
commit ed7237c8dd
2 changed files with 32 additions and 0 deletions

View File

@@ -8,6 +8,14 @@
"RecAction": {
"MaxConcurrentInvocations": 5
},
"SqlExceptionTranslator": {
"ErrorMessages": {
"515": "{Operation} '{Target}' failed because a required field was not provided or was null. Verify mandatory values and retry.",
"547": "{Operation} '{Target}' failed because one or more referenced entities do not exist or violate relational rules. Please verify identifiers and constraints.",
"2601": "{Operation} '{Target}' failed because the data conflicts with a unique constraint. Remove duplicate values and retry.",
"2627": "{Operation} '{Target}' failed because the data conflicts with a unique constraint. Remove duplicate values and retry."
}
},
"AddedWho": "ReC.API",
"FakeProfileId": 2
}

View File

@@ -0,0 +1,24 @@
namespace ReC.Application.Common.Options;
public class SqlExceptionTranslatorOptions
{
public HashSet<int> ErrorNumbers { get; private set; } = [];
private Dictionary<int, string> _badRequestMessages = new()
{
[515] = "{Operation} '{Target}' failed because a required field was not provided or was null. Verify mandatory values and retry.",
[547] = "{Operation} '{Target}' failed because one or more referenced entities do not exist or violate relational rules. Please verify identifiers and constraints.",
[2601] = "{Operation} '{Target}' failed because the data conflicts with a unique constraint. Remove duplicate values and retry.",
[2627] = "{Operation} '{Target}' failed because the data conflicts with a unique constraint. Remove duplicate values and retry."
};
public Dictionary<int, string> ErrorMessages
{
get => _badRequestMessages;
set
{
_badRequestMessages = value;
ErrorNumbers = [.. value.Keys];
}
}
}