read database info from file

This commit is contained in:
Wolfgang Hottgenroth 2021-12-06 17:46:58 +01:00
parent 1c3c0d101a
commit 046186fd7d
Signed by: wn
GPG Key ID: E49AF3B9EF6DD469
7 changed files with 73 additions and 12 deletions

1
.gitignore vendored
View File

@ -7,4 +7,5 @@ tmp/
*~ *~
.*~ .*~
ENV.database ENV.database
databaseInfo.json

View File

@ -1,19 +1,65 @@
#pragma warning disable 1591 #pragma warning disable 1591
using System; using System;
using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.Serialization; using System.Runtime.Serialization;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using MySqlConnector; using MySqlConnector;
using Newtonsoft.Json;
// make sure to adjust the prefix with the PACKAGE_NAME from ENV // make sure to adjust the prefix with the PACKAGE_NAME from ENV
using com.krohne.genericdatabaseapiservice.Models; using com.krohne.genericdatabaseapiservice.Models;
// make sure to adjust the prefix with the PACKAGE_NAME from ENV // make sure to adjust the prefix with the PACKAGE_NAME from ENV
namespace com.krohne.genericdatabaseapiservice.Services { namespace com.krohne.genericdatabaseapiservice.Services {
public class DbInfoObject {
public DbInfoObject(string host, string user, string password, string name) {
Host = host;
User = user;
Password = password;
Name = name;
}
public string Host { get; set; }
public string User { get; set; }
public string Password { get; set; }
public string Name { get; set; }
}
public interface IDbInfoService {
DbInfoObject GetInfoByTag(string tag);
string GetInfoStringByTag(string tag);
}
public class DbInfoService : IDbInfoService {
private readonly IConfiguration Configuration;
private Dictionary<string, DbInfoObject> DbInfos;
public DbInfoService(IConfiguration configuration) {
Configuration = configuration;
Console.WriteLine("Database Infofile: {0}", Configuration["Database:InfoFile"]);
DbInfos = JsonConvert.DeserializeObject<Dictionary<string, DbInfoObject>>(File.ReadAllText(Configuration["Database:InfoFile"]));
}
public DbInfoObject GetInfoByTag(string tag) {
return DbInfos[tag];
}
public string GetInfoStringByTag(string tag) {
return String.Format(
"Server={0};User ID={1};Password={2};Database={3}",
DbInfos[tag].Host,
DbInfos[tag].User,
DbInfos[tag].Password,
DbInfos[tag].Name);
}
}
public interface IDbService { public interface IDbService {
Task<List<TOUT>> ReadBySelect<TIN, TOUT>(string selectStatement, bool justOne, TIN input); Task<List<TOUT>> ReadBySelect<TIN, TOUT>(string databaseTag, string selectStatement, bool justOne, TIN input);
} }
public class DbServiceException : Exception {} public class DbServiceException : Exception {}
@ -23,21 +69,18 @@ namespace com.krohne.genericdatabaseapiservice.Services {
public class DbService : IDbService { public class DbService : IDbService {
private readonly IConfiguration Configuration; private readonly IConfiguration Configuration;
private string databaseConnInfo; private readonly IDbInfoService DbInfoService;
public DbService(IConfiguration configuration) { public DbService(IConfiguration configuration, IDbInfoService dbInfoService) {
Configuration = configuration; Configuration = configuration;
databaseConnInfo = String.Format( DbInfoService = dbInfoService;
"Server={0};User ID={1};Password={2};Database={3}",
Configuration["Database:Host"],
Configuration["Database:User"],
Configuration["Database:Password"],
Configuration["Database:Name"]);
} }
async public Task<List<TOUT>> ReadBySelect<TIN, TOUT>(string selectStatement, bool justOne, TIN input) { async public Task<List<TOUT>> ReadBySelect<TIN, TOUT>(string databaseTag, string selectStatement, bool justOne, TIN input) {
var itemList = new List<TOUT>(); var itemList = new List<TOUT>();
var databaseConnInfo = DbInfoService.GetInfoStringByTag(databaseTag);
Console.WriteLine("ConnInfo: {0}", databaseConnInfo); Console.WriteLine("ConnInfo: {0}", databaseConnInfo);
Console.WriteLine("Statement: {0}", selectStatement); Console.WriteLine("Statement: {0}", selectStatement);

View File

@ -0,0 +1,8 @@
{
"pdb_el_reader1": {
"Host": "172.16.10.18",
"User": "apiservicetestdb",
"Password": "xxx",
"Name": "apiservicetestdb"
}
}

View File

@ -75,6 +75,7 @@ statementChecker = {
'delete': re.compile('^delete', re.IGNORECASE), 'delete': re.compile('^delete', re.IGNORECASE),
'post': re.compile('^insert', re.IGNORECASE) 'post': re.compile('^insert', re.IGNORECASE)
} }
databaseTagFinder = re.compile('DATABASETAGBEGIN (.*) DATABASETAGEND')
operations = [] operations = []
for path in apiDefinition['paths'].values(): for path in apiDefinition['paths'].values():
@ -100,6 +101,9 @@ for path in apiDefinition['paths'].values():
statement = statementFinderResult.group(1) statement = statementFinderResult.group(1)
if not statementChecker[method].match(statement): if not statementChecker[method].match(statement):
raise Exception(f"Invalid statement {statement} for method {method}") raise Exception(f"Invalid statement {statement} for method {method}")
databaseTagFinderResult = databaseTagFinder.search(description)
if databaseTagFinderResult:
databaseTag = databaseTagFinderResult.group(1)
bodyInputType = {} bodyInputType = {}
if 'requestBody' in operation: if 'requestBody' in operation:
@ -124,6 +128,7 @@ for path in apiDefinition['paths'].values():
'allSelector': operation['operationId'].endswith('all'), 'allSelector': operation['operationId'].endswith('all'),
'byIdSelector': operation['operationId'].endswith('byid'), 'byIdSelector': operation['operationId'].endswith('byid'),
'statement': statement, 'statement': statement,
'databaseTag': databaseTag,
'bodyInputType': bodyInputType, 'bodyInputType': bodyInputType,
'paramInputTypes': paramInputTypes 'paramInputTypes': paramInputTypes
}) })

View File

@ -90,7 +90,7 @@ if [ "$STAGE2" = "1" ]; then
echo "patch DbService registering into generated startup code" echo "patch DbService registering into generated startup code"
sed -i output/src/$PACKAGE_NAME/Startup.cs \ sed -i output/src/$PACKAGE_NAME/Startup.cs \
-e 's#\(using '$PACKAGE_NAME'.OpenApi;\)#\1\n\n// added by post-processor\nusing '$PACKAGE_NAME'.Services;\n#' \ -e 's#\(using '$PACKAGE_NAME'.OpenApi;\)#\1\n\n// added by post-processor\nusing '$PACKAGE_NAME'.Services;\n#' \
-e 's#^\([[:space:]]*\)\(// Add framework services.\)#\1// added by post-processor\n\1services.AddTransient<IDbService, DbService>();\n\n\1\2#' \ -e 's#^\([[:space:]]*\)\(// Add framework services.\)#\1// added by post-processor\n\1services.AddSingleton<IDbInfoService, DbInfoService>();\n\1services.AddTransient<IDbService, DbService>();\n\n\1\2#' \
-e 's#\(c.RoutePrefix = "\)openapi\(";\)#\1'$ROUTE_PREFIX'/api/doc\2#' \ -e 's#\(c.RoutePrefix = "\)openapi\(";\)#\1'$ROUTE_PREFIX'/api/doc\2#' \
-e 's#\(c.SwaggerEndpoint("\)/openapi/2.0.0/openapi.json\(", "Generic Database API Service");\)#\1/'$ROUTE_PREFIX'/api/openapi/JSON\2#' \ -e 's#\(c.SwaggerEndpoint("\)/openapi/2.0.0/openapi.json\(", "Generic Database API Service");\)#\1/'$ROUTE_PREFIX'/api/openapi/JSON\2#' \
-e 's#\(c.RouteTemplate = "\)openapi/{documentName}/openapi.json\(";\)#\1'$ROUTE_PREFIX'/api/openapi/JSON\2#' \ -e 's#\(c.RouteTemplate = "\)openapi/{documentName}/openapi.json\(";\)#\1'$ROUTE_PREFIX'/api/openapi/JSON\2#' \

View File

@ -26,6 +26,9 @@ paths:
operationId: Regular.productionOrder operationId: Regular.productionOrder
summary: Returns productionOrder entries summary: Returns productionOrder entries
description: description:
DATABASETAGBEGIN
pdb_el_reader1
DATABASETAGEND
STATEMENTBEGIN STATEMENTBEGIN
SELECT produktionsauftrag AS productionOrderNumber, SELECT produktionsauftrag AS productionOrderNumber,
C_Nummer AS cgNumber, C_Nummer AS cgNumber,

View File

@ -86,7 +86,8 @@ ${operation['func']}InputType, #slurp
#else #else
Object, #slurp Object, #slurp
#end if #end if
$operation['resultType']['csName']>("#slurp $operation['resultType']['csName']>(#slurp
"$operation['databaseTag']", "#slurp
#if not $operation['statement'] #if not $operation['statement']
SELECT #slurp SELECT #slurp
#set $sep = "" #set $sep = ""