generate exceptions in implementation
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -6,4 +6,5 @@ OpenAPIDocCtrl.cs | ||||
| tmp/ | ||||
| *~ | ||||
| .*~ | ||||
| ENV.database | ||||
|  | ||||
|   | ||||
| @@ -37,6 +37,8 @@ namespace de.hottis.genericdatabaseapiservice.Services { | ||||
|             Console.WriteLine("ConnInfo: {0}", databaseConnInfo); | ||||
|             Console.WriteLine("Statement: {0}", selectStatement); | ||||
|              | ||||
|             throw new Exception("AetschiBaetsch"); | ||||
|  | ||||
|             using (var conn = new MySqlConnection(databaseConnInfo)) { | ||||
|                 await conn.OpenAsync(); | ||||
|  | ||||
|   | ||||
							
								
								
									
										10
									
								
								generate.py
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								generate.py
									
									
									
									
									
								
							| @@ -13,6 +13,10 @@ parser.add_argument('--apiDefinitionFile', '-a', | ||||
|                     help='API definition file. Default: openapi.yaml in the current folder.', | ||||
|                     required=False, | ||||
|                     default='./openapi.yaml') | ||||
| parser.add_argument('--errorDefinitionFile', '-e', | ||||
|                     help='Error definition file. Default: serviceErrorCodes.yaml in the current folder.', | ||||
|                     required=False, | ||||
|                     default='./serviceErrorCodes.yaml') | ||||
| parser.add_argument('--template', '-t', | ||||
|                     help="""Template file, templates files must be named as the final output file | ||||
| with an additional .tmpl extension. Default: all template files recursively from the current folder.""",                     | ||||
| @@ -23,6 +27,9 @@ args = parser.parse_args() | ||||
|  | ||||
| with open(args.apiDefinitionFile) as apiDefinitionFile: | ||||
|     apiDefinition = yaml.load(apiDefinitionFile, Loader=SafeLoader) | ||||
| with open(args.errorDefinitionFile) as errorDefinitionFile: | ||||
|     errorDefinition = yaml.load(errorDefinitionFile, Loader=SafeLoader) | ||||
|  | ||||
|  | ||||
|  | ||||
| apiDefinition["GENERATED_SQL_COMMENT"] = """ | ||||
| @@ -142,9 +149,10 @@ for (typeName, typeDefinition) in apiDefinition['components']['schemas'].items() | ||||
| apiDefinition['types'] = types | ||||
|  | ||||
| print(json.dumps(apiDefinition, indent=4)) | ||||
| print(json.dumps(errorDefinition, indent=4)) | ||||
| for f in glob.glob(args.template, recursive=True): | ||||
|     print(f"process {f}") | ||||
|     tmpl = Template(file=f, searchList=[apiDefinition]) | ||||
|     tmpl = Template(file=f, searchList=[apiDefinition, errorDefinition]) | ||||
|     with open(f[:-5], 'w') as outFile: | ||||
|         outFile.write(str(tmpl)) | ||||
|  | ||||
|   | ||||
| @@ -62,6 +62,11 @@ fi | ||||
| # PACKAGE_NAME will be loaded here | ||||
| . ENV | ||||
|  | ||||
| if [ -f ENV.database ]; then | ||||
|   echo "database environment loaded" | ||||
|   . ENV.database | ||||
| fi | ||||
|  | ||||
| if [ "$STAGE1" = "1" ]; then   | ||||
|   echo "generate endpoint code from openapi.yaml" | ||||
|   python3.10 generate.py | ||||
|   | ||||
| @@ -97,6 +97,12 @@ paths: | ||||
|             application/json: | ||||
|               schema: | ||||
|                 $ref: "#/components/schemas/errorResultObject" | ||||
|         500: | ||||
|           description: Internal Server Error | ||||
|           content: | ||||
|             application/json: | ||||
|               schema: | ||||
|                 $ref: "#/components/schemas/errorResultObject" | ||||
|   /pdb/v2/baseData/{articleNumber}: | ||||
|     get: | ||||
|       tags: [ "Regular" ] | ||||
| @@ -145,6 +151,9 @@ components: | ||||
|         errorInfoURL: | ||||
|           description: URL to some more information on the error | ||||
|           type: string | ||||
|         offensiveData: | ||||
|           description: Input data which causes this error | ||||
|           type: string | ||||
|     test1: | ||||
|       description: A test1 item | ||||
|       type: object | ||||
|   | ||||
| @@ -117,15 +117,31 @@ null#slurp | ||||
| [0]#slurp | ||||
|               #end if | ||||
| ); | ||||
|             } catch (NotDataFoundException) { | ||||
| \#pragma warning disable CS0168 | ||||
|             #for $errDef in $Exceptions | ||||
|             } catch ($errDef['Exception'] ex) { | ||||
|               var err = new ErrorResultObject(); | ||||
|               err.errorCode = 400; | ||||
|               err.serviceErrorCode = 517; | ||||
|               err.errorMessage("item not found"); | ||||
|               err.errorInfoURL("https://google.com"); | ||||
|               return BadRequest(err); | ||||
|             } | ||||
|  | ||||
|               err.ErrorCode = $errDef['ErrorCode']; | ||||
|               err.ServiceErrorCode = $errDef['ServiceErrorCode']; | ||||
|               err.ErrorMessage = #slurp | ||||
|               #if $errDef['ErrorMessage'] == 'INSERT_EXCEPTION_MESSAGE' | ||||
| ex.ToString(); | ||||
|               #else | ||||
| "$errDef['ErrorMessage']"; | ||||
|               #end if | ||||
|               err.ErrorInfoURL = "$errDef['ErrorInfoURL']"; | ||||
|               err.OffensiveData = #slurp | ||||
|               #if $operation['bodyInputType'] | ||||
| Newtonsoft.Json.JsonConvert.SerializeObject($operation['bodyInputType']['apiName'], Newtonsoft.Json.Formatting.Indented); | ||||
|               #elif $operation['paramInputTypes'] | ||||
| Newtonsoft.Json.JsonConvert.SerializeObject(paramInput, Newtonsoft.Json.Formatting.Indented); | ||||
|               #else          | ||||
| null;                    | ||||
|               #end if | ||||
|               return StatusCode($errDef['ErrorCode'], err); | ||||
|             #end for | ||||
|             }   | ||||
| \#pragma warning restore CS0168 | ||||
|         } | ||||
|  | ||||
|         #elif $operation['method'] == 'post' | ||||
|   | ||||
							
								
								
									
										18
									
								
								serviceErrorCodes.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								serviceErrorCodes.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| # ONLY USE THE ERRORCODES 400 and 500 HERE | ||||
| Exceptions: | ||||
|   - Exception: NotDataFoundException | ||||
|     ErrorCode: 400 | ||||
|     ServiceErrorCode: 10001 | ||||
|     ErrorMessage: item not found | ||||
|     ErrorInfoURL: https://google.com | ||||
|   - Exception: TooMuchDataFoundException | ||||
|     ErrorCode: 400 | ||||
|     ServiceErrorCode: 10002 | ||||
|     ErrorMessage: too many items found | ||||
|     ErrorInfoURL: https://google.com | ||||
|   # Make sure "Exception: Exception" is the last entry in the list | ||||
|   - Exception: Exception | ||||
|     ErrorCode: 500 | ||||
|     ServiceErrorCode: 10000 | ||||
|     ErrorMessage: INSERT_EXCEPTION_MESSAGE | ||||
|     ErrorInfoURL: https://google.com | ||||
		Reference in New Issue
	
	Block a user