BaseModule.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. using AipGateway.API.Domain.Common.Exceptions;
  2. using AipGateway.API.Domain.IRepositories.IGenericRepositories;
  3. using AipGateway.API.Domain.Models;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.EntityFrameworkCore;
  6. using System.Net;
  7. namespace AipGateway.API.Extensions
  8. {
  9. public class BaseModule : ControllerBase
  10. {
  11. private readonly IUnitOfWork _unitOfWork;
  12. //private readonly ICurrentUserService _currentUserService;
  13. private readonly IWebHostEnvironment _webHostEnvironment;
  14. public BaseModule(IUnitOfWork unitOfWork, IWebHostEnvironment webHostEnvironment)
  15. {
  16. _unitOfWork = unitOfWork;
  17. //_currentUserService = currentUserService;
  18. _webHostEnvironment = webHostEnvironment;
  19. }
  20. protected IResult CreateResponse(Func<IResult> function)
  21. {
  22. IResult response;
  23. try
  24. {
  25. response = function.Invoke();
  26. }
  27. catch (DbUpdateException dbEx)
  28. {
  29. response = Results.Extensions.InternalServerProblem(new ErrorResponseModel
  30. {
  31. Message = dbEx.InnerException?.Message ?? dbEx.Message,
  32. Result = new ErrorDetailResponseModel()
  33. {
  34. ExceptionMessage = dbEx?.Message,
  35. StackTrace = dbEx?.StackTrace,
  36. ExceptionMessageDetail = dbEx?.InnerException?.Message,
  37. ReferenceErrorCode = dbEx?.HResult.ToString(),
  38. ValidationErrors = null
  39. },
  40. InternalResults = null,
  41. StatusCode = HttpStatusCode.BadRequest,
  42. Success = false
  43. });
  44. }
  45. catch (ClientException customEx)
  46. {
  47. var ErrorModel = new ErrorResponseModel
  48. {
  49. Message = customEx.ExceptionMessage,
  50. InternalResults = customEx.Results,
  51. Result = new ErrorDetailResponseModel()
  52. {
  53. ExceptionMessage = customEx?.Message,
  54. StackTrace = customEx?.StackTrace,
  55. ExceptionMessageDetail = customEx?.InnerException?.Message,
  56. ReferenceErrorCode = customEx?.HResult.ToString(),
  57. ValidationErrors = null
  58. },
  59. StatusCode = customEx?.StatusCode ?? HttpStatusCode.InternalServerError,
  60. Success = false
  61. };
  62. switch (customEx.StatusCode)
  63. {
  64. case HttpStatusCode.BadRequest:
  65. response = Results.BadRequest(ErrorModel);
  66. break;
  67. case HttpStatusCode.NotFound:
  68. response = Results.NotFound(ErrorModel);
  69. break;
  70. case HttpStatusCode.UnprocessableEntity:
  71. response = Results.UnprocessableEntity(ErrorModel);
  72. break;
  73. case HttpStatusCode.NotModified:
  74. response = Results.Conflict(ErrorModel);
  75. break;
  76. default:
  77. response = Results.Extensions.InternalServerProblem(ErrorModel);
  78. break;
  79. }
  80. }
  81. catch (ValidationException ex)
  82. {
  83. response = Results.BadRequest(new ErrorResponseModel
  84. {
  85. Message = ex.InnerException?.Message ?? ex.Message,
  86. Result = new ErrorDetailResponseModel()
  87. {
  88. ExceptionMessage = ex.InnerException?.Message,
  89. ExceptionMessageDetail = ex.InnerException?.Message,
  90. ReferenceErrorCode = ex.HResult.ToString(),
  91. ValidationErrors = (ex.InnerException as ValidationException)?.Errors
  92. },
  93. InternalResults = null,
  94. StatusCode = HttpStatusCode.BadRequest,
  95. Success = false
  96. });
  97. }
  98. catch (Exception ex)
  99. {
  100. if (ex.InnerException is ValidationException)
  101. {
  102. response = Results.BadRequest(new ErrorResponseModel
  103. {
  104. Message = ex.InnerException?.Message ?? ex.Message,
  105. Result = new ErrorDetailResponseModel()
  106. {
  107. ExceptionMessage = ex.InnerException?.Message,
  108. ExceptionMessageDetail = ex.InnerException?.Message,
  109. ReferenceErrorCode = ex.HResult.ToString(),
  110. ValidationErrors = (ex.InnerException as ValidationException)?.Errors
  111. },
  112. InternalResults = null,
  113. StatusCode = HttpStatusCode.BadRequest,
  114. Success = false
  115. });
  116. }
  117. else
  118. {
  119. response = Results.Extensions.InternalServerProblem(new ErrorResponseModel
  120. {
  121. Message = ex.InnerException?.Message ?? ex.Message,
  122. Result = new ErrorDetailResponseModel()
  123. {
  124. ExceptionMessage = ex.InnerException?.Message,
  125. ExceptionMessageDetail = ex.InnerException?.Message,
  126. ReferenceErrorCode = ex.HResult.ToString(),
  127. ValidationErrors = null
  128. },
  129. InternalResults = null,
  130. StatusCode = HttpStatusCode.InternalServerError,
  131. Success = false
  132. });
  133. }
  134. }
  135. return response;
  136. }
  137. protected async Task<IResult> CreateResponseAsync(Func<Task<IResult>> function)
  138. {
  139. IResult response;
  140. try
  141. {
  142. response = await function.Invoke();
  143. }
  144. catch (DbUpdateException dbEx)
  145. {
  146. response = Results.Extensions.InternalServerProblem(new ErrorResponseModel
  147. {
  148. Message = dbEx.InnerException?.Message ?? dbEx.Message,
  149. Result = new ErrorDetailResponseModel()
  150. {
  151. ExceptionMessage = dbEx?.Message,
  152. StackTrace = dbEx?.StackTrace,
  153. ExceptionMessageDetail = dbEx?.InnerException?.Message,
  154. ReferenceErrorCode = dbEx?.HResult.ToString(),
  155. ValidationErrors = null
  156. },
  157. InternalResults = null,
  158. StatusCode = HttpStatusCode.BadRequest,
  159. Success = false
  160. });
  161. }
  162. catch (ClientException customEx)
  163. {
  164. var ErrorModel = new ErrorResponseModel
  165. {
  166. Message = customEx.ExceptionMessage,
  167. InternalResults = customEx.Results,
  168. Result = new ErrorDetailResponseModel()
  169. {
  170. ExceptionMessage = customEx?.Message,
  171. StackTrace = customEx?.StackTrace,
  172. ExceptionMessageDetail = customEx?.InnerException?.Message,
  173. ReferenceErrorCode = customEx?.HResult.ToString(),
  174. ValidationErrors = null
  175. },
  176. StatusCode = customEx?.StatusCode ?? HttpStatusCode.InternalServerError,
  177. Success = false
  178. };
  179. switch (customEx.StatusCode)
  180. {
  181. case HttpStatusCode.BadRequest:
  182. response = Results.BadRequest(ErrorModel);
  183. break;
  184. case HttpStatusCode.NotFound:
  185. response = Results.NotFound(ErrorModel);
  186. break;
  187. case HttpStatusCode.UnprocessableEntity:
  188. response = Results.UnprocessableEntity(ErrorModel);
  189. break;
  190. case HttpStatusCode.NotModified:
  191. response = Results.Conflict(ErrorModel);
  192. break;
  193. default:
  194. response = Results.Extensions.InternalServerProblem(ErrorModel);
  195. break;
  196. }
  197. }
  198. catch (ValidationException ex)
  199. {
  200. response = Results.BadRequest(new ErrorResponseModel
  201. {
  202. Message = ex.InnerException?.Message ?? ex.Message,
  203. Result = new ErrorDetailResponseModel()
  204. {
  205. ExceptionMessage = ex.InnerException?.Message,
  206. ExceptionMessageDetail = ex.InnerException?.Message,
  207. ReferenceErrorCode = ex.HResult.ToString(),
  208. ValidationErrors = (ex.InnerException as ValidationException)?.Errors
  209. },
  210. InternalResults = null,
  211. StatusCode = HttpStatusCode.BadRequest,
  212. Success = false
  213. });
  214. }
  215. catch (Exception ex)
  216. {
  217. if (ex.InnerException is ValidationException)
  218. {
  219. response = Results.BadRequest(new ErrorResponseModel
  220. {
  221. Message = ex.InnerException?.Message ?? ex.Message,
  222. Result = new ErrorDetailResponseModel()
  223. {
  224. ExceptionMessage = ex.InnerException?.Message,
  225. ExceptionMessageDetail = ex.InnerException?.Message,
  226. ReferenceErrorCode = ex.HResult.ToString(),
  227. ValidationErrors = (ex.InnerException as ValidationException)?.Errors
  228. },
  229. InternalResults = null,
  230. StatusCode = HttpStatusCode.BadRequest,
  231. Success = false
  232. });
  233. }
  234. else
  235. {
  236. response = Results.Extensions.InternalServerProblem(new ErrorResponseModel
  237. {
  238. Message = ex.InnerException?.Message ?? ex.Message,
  239. Result = new ErrorDetailResponseModel()
  240. {
  241. ExceptionMessage = ex.InnerException?.Message,
  242. ExceptionMessageDetail = ex.InnerException?.Message,
  243. ReferenceErrorCode = ex.HResult.ToString(),
  244. ValidationErrors = null
  245. },
  246. InternalResults = null,
  247. StatusCode = HttpStatusCode.InternalServerError,
  248. Success = false
  249. });
  250. }
  251. }
  252. return response;
  253. }
  254. }
  255. public static class ResultExtensions
  256. {
  257. public static IResult InternalServerProblem(this IResultExtensions resultExtensions, ErrorResponseModel errorResponseModel)
  258. {
  259. return Results.Problem(new ProblemDetails()
  260. {
  261. Status = 500,
  262. Title = errorResponseModel?.Result?.ExceptionMessage,
  263. Detail = errorResponseModel?.Result?.ExceptionMessageDetail,
  264. Instance = errorResponseModel?.Result?.ReferenceErrorCode,
  265. Type = errorResponseModel?.Result?.ReferenceErrorCode,
  266. });
  267. }
  268. public static IResult UnAuthorizedProblem(this IResultExtensions resultExtensions, ErrorResponseModel errorResponseModel)
  269. {
  270. return Results.Problem(new ProblemDetails()
  271. {
  272. Status = 401,
  273. Title = errorResponseModel?.Result?.ExceptionMessage,
  274. Detail = errorResponseModel?.Result?.ExceptionMessageDetail,
  275. Instance = errorResponseModel?.Result?.ReferenceErrorCode,
  276. Type = errorResponseModel?.Result?.ReferenceErrorCode,
  277. });
  278. }
  279. }
  280. }