Taylohtio/IDP/webapi/ImportFlatTool/Program.cs

156 lines
6.3 KiB
C#

using Autofac;
using Autofac.Core;
using Csv;
using Serilog;
using Serilog.Core;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using webapi.core;
using webapi.Domain.Events;
using webapi.Domain.SeedWork;
using webapi.Infractructure;
using webapi.Infractructure.Core;
using webapi.Infractructure.Core.EventHandlers;
using webapi.Infractructure.Repositories;
using webapi.Infrastructure.Repositories;
namespace ImportFlatTool
{
class Program
{
static void Main(string[] args)
{
if (args.Length < 3) {
Console.WriteLine("Arguments should be set in following order: \"csvFileName\", \"pmsCondoName\", \"taloyhtioCondoUrl\"");
Console.WriteLine("Press any key to close the console...");
Console.ReadKey();
return;
}
var csvFileName = args[0];
var pmsCondoName = args[1];
var taloyhtioCondoUrl = args[2];
if (string.IsNullOrEmpty(csvFileName))
{
Console.WriteLine("The \"csvFileName\" could be empty");
Console.WriteLine("Press any key to close the console...");
Console.ReadKey();
return;
}
if (string.IsNullOrEmpty(pmsCondoName))
{
Console.WriteLine("The \"pmsCondoName\" could be empty");
Console.WriteLine("Press any key to close the console...");
Console.ReadKey();
return;
}
if (string.IsNullOrEmpty(taloyhtioCondoUrl))
{
Console.WriteLine("The \"taloyhtioCondoUrl\" could be empty");
Console.WriteLine("Press any key to close the console...");
Console.ReadKey();
return;
}
if (!File.Exists(csvFileName)) throw new FileNotFoundException($"File is not found {csvFileName}");
try
{
var builder = new ContainerBuilder();
ILogger log = Log.ForContext<Program>();
builder.RegisterType<EventsHandlerFactory>()
.WithParameters(new List<Parameter> {
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(ILifetimeScope),
(pi, ctx) => ctx.Resolve<ILifetimeScope>()) })
.SingleInstance();
builder.RegisterType<UserAuthRepository>()
.As<IUserAuthRepository>()
.WithParameters(new List<Parameter> {
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(ILogger),
(pi, ctx) => log),
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(string) && pi.Name == "storageConnectionString",
(pi, ctx) => ConfigurationManager.ConnectionStrings["AzureProdConnectionString"].ConnectionString),
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(EventsHandlerFactory),
(pi, ctx) => ctx.Resolve<EventsHandlerFactory>()),
})
.SingleInstance();
builder.RegisterType<UserFlatMappingRepository>()
.As<IUserFlatMappingRepository>()
.WithParameters(new List<Parameter> {
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(ILogger),
(pi, ctx) => log),
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(string) && pi.Name == "storageConnectionString",
(pi, ctx) => ConfigurationManager.ConnectionStrings["AzureProdConnectionString"].ConnectionString),
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(EventsHandlerFactory),
(pi, ctx) => ctx.Resolve<EventsHandlerFactory>()),
})
.SingleInstance();
builder.RegisterType<RevokeUserAssignmentDomainEventHandler>()
.As<BaseEventHandler<RevokeUserAssignmentDomainEvent>>()
.WithParameters(new List<Parameter> {
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(ILogger),
(pi, ctx) => log),
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(IUserFlatMappingRepository),
(pi, ctx) => ctx.Resolve<IUserFlatMappingRepository>()),
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(IUserAuthRepository),
(pi, ctx) => ctx.Resolve<IUserAuthRepository>()),
})
.SingleInstance(); ;
var container = builder.Build();
var manager = new FlatManager(LogUtils._log,
ConfigurationManager.ConnectionStrings["AzureProdConnectionString"].ConnectionString,
ConfigurationManager.AppSettings["SPAPIUrl"],
container);
var csv = File.ReadAllText(csvFileName);
foreach (var line in CsvReader.ReadFromText(csv, new CsvOptions() { HeaderMode = HeaderMode.HeaderAbsent }))
{
for (var i = 0; i < line.ColumnCount; i++)
{
LogUtils.LogDebug($"Importing of the flat \"{line[i]}\"");
manager.ImportFlat(flatTitle: line[i], pmsCondoName, taloyhtioCondoUrl)
.GetAwaiter().GetResult();
}
}
}
catch (Exception ex)
{
LogUtils.LogError($"Error: {ex.Message} {ex.StackTrace} {ex.InnerException}");
Console.WriteLine("There is an error when importing.");
Console.WriteLine("Press any key to close the console...");
Console.ReadKey();
return;
}
Console.WriteLine("All flats data has been imported.");
Console.WriteLine("Press any key to close the console...");
Console.ReadKey();
}
}
}