2022-08-10 15:06:09 +00:00
using Logic.ProductionToProductMapper.Cordonel ;
using Newtonsoft.Json ;
2021-10-01 09:09:20 +00:00
using Service.Core ;
using System ;
using System.Collections.Generic ;
using System.Data ;
using System.Linq ;
using System.Net ;
using System.Net.Http ;
using System.Text ;
using System.Threading.Tasks ;
using System.Web ;
using System.Web.Http ;
using Xylem.Common.Logic.ProductionOrderCore.File ;
using Xylem.Common.Logic.ProductionOrderCore.FW ;
namespace Xylem.Common.Service.MeterProcessState.Controllers
{
[RoutePrefix("api/FileUpToDate")]
public class FileUpToDateController : ApiController
{
public static class GlobalConfig
{
public static Lazy < string > connectionString = new Lazy < string > ( ( )
= >
System . Configuration . ConfigurationManager . ConnectionStrings [ "default" ] . ConnectionString
) ;
}
private async Task < HttpResponseMessage > InsertFileDb ( string FileName , string FileContent = null , bool isForDevloper = true )
{
try
{
return await Task . Run ( ( ) = >
{
return Request . CreateResponse ( HttpStatusCode . OK , DbAccessWriteFile ( FileName , FileContent , isForDevloper ) ) ;
} ) ;
}
catch ( Exception ex )
{
return Request . CreateResponse ( HttpStatusCode . InternalServerError , ex ) ;
}
}
private string DbAccessWriteFile ( string FileName , string FileContent , bool isForDevloper )
{
if ( string . IsNullOrEmpty ( FileName ) )
{
throw new Exception ( "at FileName requierd" ) ;
}
using ( var dataacces = new SqlDataAccess ( GlobalConfig . connectionString . Value ) )
{
var devstring = isForDevloper ? "1" : "0" ;
var sb = new StringBuilder ( ) ;
sb . AppendLine ( $" declare @fileName as nvarchar(50) " ) ;
sb . AppendLine ( $" set @fileName = '{FileName}' " ) ;
sb . AppendLine ( $" update [Auftrag].[dbo].[TextFileStore] set FileIsLatest = 0 " ) ;
sb . AppendLine ( $" where FileIsLatest = 1 and [FileName] = @fileName and FileIsForDeveloperOnly = {devstring} " ) ;
sb . AppendLine ( $" INSERT INTO [dbo].[TextFileStore]" ) ;
sb . AppendLine ( $" ([FileName]" ) ;
sb . AppendLine ( $" ,[FileContent]" ) ;
sb . AppendLine ( $" ,[FileIsLatest]" ) ;
sb . AppendLine ( $" ,[FileDate]" ) ;
sb . AppendLine ( $" ,[FileIsForDeveloperOnly])" ) ;
sb . AppendLine ( $" VALUES" ) ;
sb . AppendLine ( $" (@fileName" ) ;
if ( FileContent ! = null )
{
sb . AppendLine ( $" ,'{FileContent.Replace(" \ ' ", " \ ' \ ' ")}'" ) ;
}
else
{
throw new ApplicationException ( "No FileContent to update" ) ;
}
sb . AppendLine ( $" ,1" ) ;
sb . AppendLine ( $" ,CURRENT_TIMESTAMP" ) ;
sb . AppendLine ( $" ,{devstring})" ) ;
sb . AppendLine ( $" select SCOPE_IDENTITY() " ) ;
var dbResult = dataacces . ExecuteQuery ( sb . ToString ( ) ) ;
if ( dbResult . Rows . Count ! = 1 )
{
throw new ApplicationException ( "Can not insert a TextFile" ) ;
}
return dbResult . Rows [ 0 ] [ 0 ] . ToString ( ) ;
}
}
/// <summary>
/// Set TextFile content PostFileJsonContent
/// </summary>
/// <returns></returns>
[Route("PostFileJsonContent"), HttpPost]
public async Task < HttpResponseMessage > PostFileJsonContent ( [ FromBody ] BaseFile file )
{
//why file is empty on large files??
string jsonData = JsonConvert . SerializeObject ( file ) ;
return await InsertFileDb ( file . FileName , file . FileContent , file . ForDeveloper ? ? true ) ;
}
/// <summary>
/// Set TextFile content PostFileJsonContent
/// </summary>
/// <returns></returns>
[Route("PostFwUpdateReportFile"), HttpPost]
public async Task < HttpResponseMessage > PostFwUpdateReportFile ( int PcbId , int UserId , [ FromBody ] BaseFile file )
{
//why file is empty on large files??
string jsonData = JsonConvert . SerializeObject ( file ) ;
var a = await InsertFileDb ( file . FileName , file . FileContent , file . ForDeveloper ? ? true ) ;
var fileID = 0 ;
return await Task . Run ( ( ) = >
{
try
{
if ( int . TryParse ( DbAccessWriteFile ( file . FileName , file . FileContent , false ) , out fileID ) )
{
using ( var dataacces = new SqlDataAccess ( GlobalConfig . connectionString . Value ) )
{
var sb = new StringBuilder ( ) ;
sb . AppendLine ( $" insert into [Cordonel_FwUpdateReport] " ) ;
sb . AppendLine ( $" select " ) ;
sb . AppendLine ( $" {PcbId} " ) ; //[CordonelFwUpdateReport_PcbId] [int] NOT NULL,
sb . AppendLine ( $" , {UserId} " ) ; //[CordonelFwUpdateReport_User] [int] NOT NULL,
sb . AppendLine ( $" , {fileID} " ) ; //[CordonelFwUpdateReport_FileId] [int] NOT NULL
sb . AppendLine ( $" select @@IDENTITY " ) ;
var retDT = dataacces . ExecuteQuery ( sb . ToString ( ) ) ;
return Request . CreateResponse ( HttpStatusCode . OK , retDT . Rows [ 0 ] [ 0 ] ) ;
}
}
}
catch ( Exception ex )
{
throw new ApplicationException ( $"file was not uploaded {ex.Message}" ) ;
}
throw new ApplicationException ( "file was not uploaded" ) ;
} ) ;
}
2022-08-10 15:06:09 +00:00
/// <summary>
/// Set LUT JSON content
/// </summary>
/// <returns></returns>
[Route("PostLutFile"), HttpPost]
public async Task < HttpResponseMessage > PostLutFile ( int DataLength , string version , int crc , int Metersize , string Region )
{
var httpFiles = HttpContext . Current . Request . Files ;
var listOfFiles = new List < Tuple < string , byte [ ] > > ( ) ;
foreach ( var a in httpFiles )
{
try
{
if ( HttpContext . Current . Request . Files [ a . ToString ( ) ] is HttpPostedFile f )
{
listOfFiles . Add ( new Tuple < string , byte [ ] > ( f . FileName , GetFileBytes ( f ) ) ) ;
}
}
catch ( Exception )
{
}
}
var fileID = 0 ;
return await Task . Run ( ( ) = >
{
try
{
int? retId = null ;
int FileCounter = StoreFiles ( out retId , true , listOfFiles . First ( ) . Item1 , FileCategoryID : 7 , listOfFiles : listOfFiles ) ;
if ( FileCounter = = listOfFiles . Count & & retId . HasValue )
{
fileID = retId . Value ;
}
if ( fileID ! = 0 )
{
using ( var dataacces = new SqlDataAccess ( GlobalConfig . connectionString . Value ) )
{
var sb = new StringBuilder ( ) ;
sb . AppendLine ( $" insert into [Cordonel_Lut] " ) ;
sb . AppendLine ( $" select " ) ;
sb . AppendLine ( $" {fileID} " ) ;
sb . AppendLine ( $" , {DataLength} " ) ;
sb . AppendLine ( $" , '{version}' " ) ;
sb . AppendLine ( $" , '{crc}' " ) ;
sb . AppendLine ( $" , '{Metersize}' " ) ;
sb . AppendLine ( $" , '{Region}' " ) ;
sb . AppendLine ( $" , 0 " ) ; // [CurrentVerionForProd]
sb . AppendLine ( $" select @@IDENTITY " ) ;
var retDT = dataacces . ExecuteQuery ( sb . ToString ( ) ) ;
return Request . CreateResponse ( HttpStatusCode . OK , retDT . Rows [ 0 ] [ 0 ] ) ;
}
}
else
{
throw new ApplicationException ( $"file was not uploaded. Without error" ) ;
}
}
catch ( Exception ex )
{
throw new ApplicationException ( $"file was not uploaded {ex.Message}" ) ;
}
throw new ApplicationException ( "file was not uploaded" ) ;
} ) ;
}
2021-10-01 09:09:20 +00:00
public virtual byte [ ] GetFileBytes ( HttpPostedFile uploadedFile )
{
var bytes = new byte [ uploadedFile . ContentLength ] ;
uploadedFile . InputStream . Read ( bytes , 0 , uploadedFile . ContentLength ) ;
return bytes ;
}
2022-08-10 15:06:09 +00:00
/// <summary>
/// Set LUT JSON content
/// </summary>
/// <returns></returns>
[Route("GetLutFiles"), HttpGet]
public async Task < HttpResponseMessage > GetLutFiles ( int? Metersize = null , string Region = null , bool? ForProd = null )
{
return await Task . Run ( ( ) = >
{
try
{
using ( var dataacces = new SqlDataAccess ( GlobalConfig . connectionString . Value ) )
{
var sb = new StringBuilder ( ) ;
sb . AppendLine ( $" SELECT [Id] " ) ;
sb . AppendLine ( $" ,lut.[FileID] " ) ;
sb . AppendLine ( $" ,[DataLength] " ) ;
sb . AppendLine ( $" ,[Version] " ) ;
sb . AppendLine ( $" ,[FileCrc] " ) ;
sb . AppendLine ( $" ,[MeterSize] " ) ;
sb . AppendLine ( $" ,[Region] " ) ;
sb . AppendLine ( $" ,[CurrentVerionForProd] " ) ;
sb . AppendLine ( $" ,files.[FileName] " ) ;
sb . AppendLine ( $" ,files.FileContent " ) ;
sb . AppendLine ( $" FROM [Auftrag].[dbo].[Cordonel_Lut] lut " ) ;
sb . AppendLine ( $" inner join [Auftrag].[dbo].[FileClusterStore] fileMaster on fileMaster.FileId = lut.[FileID] " ) ;
sb . AppendLine ( $" inner join [Auftrag].[dbo].[FileMapToCluster] map on fileMaster.FileIsDeleted = 0 and fileMaster.FileId = map.[FileMapToCluster_FileClusterId] " ) ;
sb . AppendLine ( $" inner join [Auftrag].[dbo].[File] files on files.FileId = map.[FileMapToCluster_FileId] " ) ;
var retDT = dataacces . ExecuteQuery ( sb . ToString ( ) ) ;
return Request . CreateResponse ( HttpStatusCode . OK , retDT ) ;
}
}
catch ( Exception ex )
{
throw new ApplicationException ( $"file was not uploaded {ex.Message}" ) ;
}
throw new ApplicationException ( "file was not uploaded" ) ;
} ) ;
}
2021-10-01 09:09:20 +00:00
/// <summary>
/// Set TextFile content PostFileJsonContent
/// </summary>
/// <returns></returns>
[Route("PostFWFileBinaryContent"), HttpPost]
public async Task < HttpResponseMessage > PostFWFileBinaryContent ( bool IsDevloper , string FWname , MeterSize ? meterSize = null , CordonelFWTypeEnum ? fWTypeEnum = null , int FileCategoryID = 1 , string FileDateString = "CURRENT_TIMESTAMP" )
{
var httpFiles = HttpContext . Current . Request . Files ;
var listOfFiles = new List < Tuple < string , byte [ ] > > ( ) ;
foreach ( var a in httpFiles )
{
try
{
if ( HttpContext . Current . Request . Files [ a . ToString ( ) ] is HttpPostedFile f )
{
listOfFiles . Add ( new Tuple < string , byte [ ] > ( a . ToString ( ) , GetFileBytes ( f ) ) ) ;
}
}
catch ( Exception )
{
2022-08-10 15:06:09 +00:00
2021-10-01 09:09:20 +00:00
}
2022-08-10 15:06:09 +00:00
2021-10-01 09:09:20 +00:00
}
2022-08-10 15:06:09 +00:00
2021-10-01 09:09:20 +00:00
return await Task . Run ( ( ) = >
{
int? retId = null ;
int FileCounter = StoreFiles ( out retId , IsDevloper , FWname , meterSize , fWTypeEnum , FileCategoryID , FileDateString , listOfFiles ) ;
if ( FileCounter = = listOfFiles . Count & & retId . HasValue )
{
return Request . CreateResponse ( HttpStatusCode . OK , retId . Value ) ;
}
return Request . CreateResponse ( HttpStatusCode . InternalServerError , "Not all files where stored!" ) ;
} ) ;
}
public int StoreFiles ( out int? FileClusterStoreId , bool IsDevloper , string FWname , MeterSize ? meterSize = null , CordonelFWTypeEnum ? fWTypeEnum = null , int FileCategoryID = 1 , string FileDateString = "CURRENT_TIMESTAMP" , List < Tuple < string , byte [ ] > > listOfFiles = null )
{
//1 Cordonel FW
//2 Cordonel Configruation File
//3 Cordonel Logger File
//4 Cordonel Update Safe
//5 Cordonel Update Sotware
//6 Cordonel Release Config
2022-08-10 15:06:09 +00:00
//7 Cordonel Look up table
2021-10-01 09:09:20 +00:00
FileClusterStoreId = null ;
using ( var dataacces = new SqlDataAccess ( GlobalConfig . connectionString . Value ) )
{
var sb = new StringBuilder ( ) ;
sb . AppendLine ( $" INSERT INTO [dbo].[FileClusterStore] " ) ;
sb . AppendLine ( $" ([FileName] " ) ;
sb . AppendLine ( $" ,[FileIsLatest] " ) ;
sb . AppendLine ( $" ,[FileDate] " ) ;
sb . AppendLine ( $" ,[FileIsForDeveloperOnly] " ) ;
sb . AppendLine ( $" ,[FileCategoryID] " ) ;
sb . AppendLine ( $" ,[FileIsDeleted]) " ) ;
sb . AppendLine ( $" VALUES " ) ;
sb . AppendLine ( $" ('{FWname}' " ) ;
sb . AppendLine ( $" ,0 " ) ;
sb . AppendLine ( $" ,{FileDateString} " ) ;
sb . AppendLine ( $" ,{(IsDevloper ? '1' : '0')} " ) ;
sb . AppendLine ( $" ,{FileCategoryID} " ) ;
sb . AppendLine ( $" ,0) " ) ;
sb . AppendLine ( $" SELECT @@IDENTITY " ) ;
var ret = dataacces . ExecuteQuery ( sb . ToString ( ) ) ;
FileClusterStoreId = ( int ) ( ( decimal ) ret . Rows [ 0 ] [ 0 ] ) ;
if ( meterSize . HasValue & & fWTypeEnum . HasValue )
{
sb = new StringBuilder ( ) ;
sb . AppendLine ( $" INSERT INTO[dbo].[CordonelFwFile]" ) ;
sb . AppendLine ( $" ([CordonelFwFile_FileClusterStoreId]" ) ;
sb . AppendLine ( $" ,[CordonelFwFile_Dn]" ) ;
sb . AppendLine ( $" ,[CordonelFwFile_Type])" ) ;
sb . AppendLine ( $" VALUES" ) ;
sb . AppendLine ( $" ({FileClusterStoreId}" ) ;
sb . AppendLine ( $" ,{meterSize.Value.GetHashCode()}" ) ;
sb . AppendLine ( $" ,{fWTypeEnum.Value.GetHashCode()})" ) ;
sb . AppendLine ( $" SELECT @@IDENTITY " ) ;
ret = dataacces . ExecuteQuery ( sb . ToString ( ) ) ;
var CordonelFwFileId = ( int ) ( ( decimal ) ret . Rows [ 0 ] [ 0 ] ) ;
}
}
int FileCounter = 0 ;
if ( listOfFiles . Any ( ) )
{
//addMapEntrie
for ( int i = 0 ; i < listOfFiles . Count ; i + + )
{
var content = listOfFiles [ i ] . Item2 ;
using ( var dataacces = new SqlDataAccess ( GlobalConfig . connectionString . Value ) )
{
var parameters = new List < System . Data . SqlClient . SqlParameter > ( ) ;
var FileContent = new System . Data . SqlClient . SqlParameter ( "@FileContent" , SqlDbType . VarBinary ) ;
var FileName = new System . Data . SqlClient . SqlParameter ( "@FileName" , SqlDbType . NVarChar , 150 ) ;
FileName . Value = listOfFiles [ i ] . Item1 ;
FileContent . Value = content ;
parameters . Add ( FileName ) ;
parameters . Add ( FileContent ) ;
var retDT = dataacces . ExecuteQuery ( "INSERT INTO [dbo].[File] ([FileContent], [FileName]) VALUES (@FileContent, @FileName) ;SELECT @@IDENTITY " , parameters ) ;
var FileId = ( int ) ( ( decimal ) retDT . Rows [ 0 ] [ 0 ] ) ;
var sb = new StringBuilder ( ) ;
sb . AppendLine ( $" INSERT INTO [dbo].[FileMapToCluster] ([FileMapToCluster_FileId],[FileMapToCluster_FileClusterId]) " ) ;
sb . AppendLine ( $" VALUES " ) ;
sb . AppendLine ( $" ({FileId}, " ) ;
sb . AppendLine ( $" {FileClusterStoreId}) " ) ;
sb . AppendLine ( $" SELECT @@IDENTITY" ) ;
var retDTMap = dataacces . ExecuteQuery ( sb . ToString ( ) ) ;
if ( retDTMap ! = null & & retDTMap . Rows . Count > 0 & & ( int ) ( ( decimal ) retDTMap . Rows [ 0 ] [ 0 ] ) > - 1 )
{
FileCounter = FileCounter + 1 ;
}
}
}
}
return FileCounter ;
}
/// <summary>
/// Returns a list of all Fw Files (FileCategoryID = 1) that match the filters and are not deleted
/// </summary>
/// <param name="FileId">null for all</param>
/// <param name="FileName">"" for all, use a like to serach</param>
/// <param name="FileIsLatest">null for all</param>
/// <param name="FileIsForDeveloperOnly">null for all</param>
/// <param name="CordonelFwFile_Dn">null for all</param>
/// <param name="CordonelFwFile_Type">null for all</param>
/// <returns></returns>
[Route("GetFwFiles"), HttpGet]
public async Task < HttpResponseMessage > GetFwFiles ( int? FileId = null , string FileName = "" , bool? FileIsLatest = null , bool? FileIsForDeveloperOnly = null , int? CordonelFwFile_Dn = null , int? CordonelFwFile_Type = null , int? FileCategoryID = 1 )
{
return await Task . Run ( ( ) = >
{
using ( var dataacces = new SqlDataAccess ( GlobalConfig . connectionString . Value ) )
{
var sb = new StringBuilder ( ) ;
sb . AppendLine ( dataacces . GenerateParam ( "FileId" , "int" , FileId ) ) ;
sb . AppendLine ( dataacces . GenerateParam ( "FileName" , "nvarchar(50)" , FileName ) ) ;
sb . AppendLine ( dataacces . GenerateParam ( "FileIsLatest" , "bit" , FileIsLatest ) ) ;
sb . AppendLine ( dataacces . GenerateParam ( "FileIsForDeveloperOnly" , "bit" , FileIsForDeveloperOnly ) ) ;
sb . AppendLine ( dataacces . GenerateParam ( "FileCategoryID" , "int" , FileCategoryID ) ) ;
sb . AppendLine ( dataacces . GenerateParam ( "CordonelFwFile_Dn" , "int" , CordonelFwFile_Dn ) ) ;
sb . AppendLine ( dataacces . GenerateParam ( "CordonelFwFile_Type" , "int" , CordonelFwFile_Type ) ) ;
sb . AppendLine ( $" select * from [Auftrag].[dbo].[FileClusterStore] fileMaster" ) ;
sb . AppendLine ( $" left outer join [Auftrag].[dbo].[CordonelFwFile] fw on fileMaster.FileIsDeleted = 0 and fileMaster.FileId = fw.CordonelFwFile_FileClusterStoreId" ) ;
sb . AppendLine ( $" where (@FileIsForDeveloperOnly is null or FileIsForDeveloperOnly = @FileIsForDeveloperOnly)" ) ;
sb . AppendLine ( $" and (@FileId is null or FileId = @FileId)" ) ;
sb . AppendLine ( $" and (@FileName is null or [FileName] like @FileName)" ) ;
sb . AppendLine ( $" and (@FileIsLatest is null or FileIsLatest = @FileIsLatest)" ) ;
sb . AppendLine ( $" and (@FileCategoryID is null or FileCategoryID = @FileCategoryID)" ) ;
sb . AppendLine ( $" and (@CordonelFwFile_Dn is null or CordonelFwFile_Dn = @CordonelFwFile_Dn )" ) ;
sb . AppendLine ( $" and (@CordonelFwFile_Type is null or CordonelFwFile_Type = @CordonelFwFile_Type)" ) ;
var retDT = dataacces . ExecuteQuery ( sb . ToString ( ) ) ;
return Request . CreateResponse ( HttpStatusCode . OK , retDT ) ;
}
} ) ;
}
/// <summary>
/// Get text file content if client file date is older or empty other wisre return empty string
/// </summary>
/// <returns></returns>
[Route("GetFileParts"), HttpGet]
public async Task < HttpResponseMessage > GetFileParts ( int? ParentFileId = null , int? FileId = null , string FileName = "" , bool readContent = false )
{
return await Task . Run ( ( ) = >
{
using ( var dataacces = new SqlDataAccess ( GlobalConfig . connectionString . Value ) )
{
var sb = new StringBuilder ( ) ;
sb . AppendLine ( dataacces . GenerateParam ( "ParentFileId" , "int" , ParentFileId ) ) ;
sb . AppendLine ( dataacces . GenerateParam ( "FileId" , "int" , FileId ) ) ;
sb . AppendLine ( dataacces . GenerateParam ( "FileName" , "nvarchar(50)" , FileName ) ) ;
sb . AppendLine ( $" select " ) ;
sb . AppendLine ( $" fileMaster.FileId as ParentFileId,files.FileId,files.[FileName] " ) ;
if ( readContent )
{
sb . AppendLine ( $" ,files.FileContent " ) ;
}
sb . AppendLine ( $" from [Auftrag].[dbo].[FileClusterStore] fileMaster " ) ;
sb . AppendLine ( $" inner join [Auftrag].[dbo].[FileMapToCluster] map on fileMaster.FileIsDeleted = 0 and fileMaster.FileId = map.[FileMapToCluster_FileClusterId] " ) ;
sb . AppendLine ( $" inner join [Auftrag].[dbo].[File] files on files.FileId = map.[FileMapToCluster_FileId] " ) ;
sb . AppendLine ( $" where " ) ;
sb . AppendLine ( $" (@ParentFileId is null or fileMaster.FileId = @ParentFileId)" ) ;
sb . AppendLine ( $" and (@FileId is null or files.FileId = @FileId)" ) ;
sb . AppendLine ( $" and (@FileName is null or files.[FileName] like @FileName)" ) ;
sb . AppendLine ( $" order by fileMaster.FileId desc" ) ;
var retDT = dataacces . ExecuteQuery ( sb . ToString ( ) ) ;
return Request . CreateResponse ( HttpStatusCode . OK , retDT ) ;
}
} ) ;
}
///// <summary>
///// Get text file content if client file date is older or empty other wisre return empty string
///// </summary>
///// <returns></returns>
//[Route("GetFileBinaryContent"), HttpGet]
//public async Task<HttpResponseMessage> GetFwFiles(string FileName, DateTimeOffset? ClientFileDate = null, bool isDeveloper = false)
//{
//}
/// <summary>
/// Get text file content if client file date is older or empty other wisre return empty string
/// </summary>
/// <returns></returns>
[Route("GetUpdateFileContent"), HttpGet]
public async Task < HttpResponseMessage > GetUpdateFileContent ( string FileName , DateTimeOffset ? ClientFileDate = null , bool isDeveloper = false )
{
try
{
return await Task . Run ( async ( ) = >
{
DateTime ? ClientFileDateUtc = null ;
if ( ClientFileDate . HasValue )
{
ClientFileDateUtc = ClientFileDate . Value . UtcDateTime ;
}
var retList = GetFiles ( FileName : FileName , isDeveloper : isDeveloper , latest : true , FileDateIsGreaterThan : ClientFileDateUtc ) ;
if ( retList . Count ! = 1 )
{
return Request . CreateResponse ( HttpStatusCode . OK , string . Empty ) ;
}
return Request . CreateResponse ( HttpStatusCode . OK , retList [ 0 ] ) ;
} ) ;
}
catch ( Exception ex )
{
return Request . CreateResponse ( HttpStatusCode . InternalServerError , ex ) ;
}
}
/// <summary>
/// Get TextFile content
/// </summary>
/// <returns></returns>
[Route("GetFileList"), HttpGet]
public async Task < HttpResponseMessage > GetFileList ( int? FileID = null , string FileName = "" , bool? latest = null , bool? isDeveloper = null )
{
try
{
return await Task . Run ( async ( ) = >
{
var retList = GetFiles ( FileID , FileName , latest , isDeveloper ) ;
return Request . CreateResponse ( HttpStatusCode . OK , retList ) ;
} ) ;
}
catch ( Exception ex )
{
return Request . CreateResponse ( HttpStatusCode . InternalServerError , ex ) ;
}
}
private List < BaseFile > GetFiles ( int? FileID = null , string FileName = "" , bool? latest = true , bool? isDeveloper = false , DateTime ? FileDateIsGreaterThan = null )
{
var ret = new List < BaseFile > ( ) ;
using ( var dataacces = new SqlDataAccess ( GlobalConfig . connectionString . Value ) )
{
var sb = new StringBuilder ( ) ;
sb . AppendLine ( $" SELECT FileId, FileName, FileContent, FileIsLatest, FileDate, FileIsForDeveloperOnly" ) ;
sb . AppendLine ( $" FROM TextFileStore " ) ;
sb . AppendLine ( $" where FileId > 0" ) ;
if ( FileID . HasValue )
{
sb . AppendLine ( $" and FileId = {FileID.Value}" ) ;
}
else
{
if ( ! String . IsNullOrEmpty ( FileName ) )
{
sb . AppendLine ( $" and FileName like '%{FileName}%' " ) ;
}
if ( latest . HasValue )
{
if ( latest . Value )
{
sb . AppendLine ( $" and FileIsLatest = 1 " ) ;
}
else
{
sb . AppendLine ( $" and FileIsLatest = 0 " ) ;
}
}
if ( isDeveloper . HasValue )
{
if ( isDeveloper . Value )
{
//sb.AppendLine($" and FileIsForDeveloperOnly = 1 ");
}
else
{
sb . AppendLine ( $" and FileIsForDeveloperOnly = 0 " ) ;
}
}
if ( FileDateIsGreaterThan . HasValue )
{
sb . AppendLine ( $" and FileDate > CONVERT(datetime, '{FileDateIsGreaterThan.Value.ToString(" yyyy - MM - dd HH : mm : ss : fff ")}',120) " ) ;
}
}
sb . AppendLine ( $" order by FileId desc " ) ;
var dbResult = dataacces . ExecuteQuery ( sb . ToString ( ) ) ;
foreach ( DataRow row in dbResult . Rows )
{
ret . Add (
new BaseFile ( )
{
FileId = ( int ) row [ "FileId" ] ,
FileName = ( string ) row [ "FileName" ] ,
FileContent = ( string ) row [ "FileContent" ] ,
IsLatest = ( bool ) row [ "FileIsLatest" ] ,
UploadDate = ( DateTime ) row [ "FileDate" ] ,
ForDeveloper = ( bool ) row [ "FileIsForDeveloperOnly" ] ,
} ) ;
}
return ret ;
}
}
/// <summary>
/// Get TextFile content
/// </summary>
/// <returns></returns>
[Route("GetFileContent"), HttpGet]
public async Task < HttpResponseMessage > GetFileContent ( int? FileID = null , string FileName = "" , bool isDeveloper = false )
{
try
{
return await Task . Run ( async ( ) = >
{
bool? islatest = null ;
if ( ! String . IsNullOrEmpty ( FileName ) & & ! FileID . HasValue )
{
islatest = true ;
}
var retList = GetFiles ( FileID , FileName , isDeveloper ) ;
if ( retList . Count ! = 1 )
{
return Request . CreateResponse ( HttpStatusCode . InternalServerError , "Can not find a TextFile for your request" ) ;
}
return Request . CreateResponse ( HttpStatusCode . OK , retList [ 0 ] ) ;
} ) ;
}
catch ( Exception ex )
{
return Request . CreateResponse ( HttpStatusCode . InternalServerError , ex ) ;
}
}
}
}