Skip to content

Commit d82e5c3

Browse files
committed
CsvReader, CsvWriter, ExcelReader, ExcelWriter
1 parent b6b8656 commit d82e5c3

21 files changed

+193
-110
lines changed
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1-
using System.Collections.Generic;
2-
using System.IO;
1+
using System.IO;
2+
using System.Threading.Tasks;
33

44
namespace ClassifiedAds.CrossCuttingConcerns.Csv;
55

66
public interface ICsvReader<T>
7+
where T : ICsvResponse
78
{
8-
IEnumerable<T> Read(Stream stream);
9+
Task<T> ReadAsync(Stream stream);
910
}
11+
12+
public interface ICsvResponse
13+
{
14+
}
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1-
using System.Collections.Generic;
2-
using System.IO;
1+
using System.IO;
2+
using System.Threading.Tasks;
33

44
namespace ClassifiedAds.CrossCuttingConcerns.Csv;
55

66
public interface ICsvWriter<T>
7+
where T : ICsvRequest
78
{
8-
void Write(IEnumerable<T> collection, Stream stream);
9+
Task WriteAsync(T data, Stream stream);
910
}
11+
12+
public interface ICsvRequest
13+
{
14+
}
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
using System.IO;
2+
using System.Threading.Tasks;
23

34
namespace ClassifiedAds.CrossCuttingConcerns.Excel;
45

56
public interface IExcelReader<T>
7+
where T : IExcelResponse
8+
{
9+
Task<T> ReadAsync(Stream stream);
10+
}
11+
12+
public interface IExcelResponse
613
{
7-
T Read(Stream stream);
814
}
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
using System.IO;
2+
using System.Threading.Tasks;
23

34
namespace ClassifiedAds.CrossCuttingConcerns.Excel;
45

56
public interface IExcelWriter<T>
7+
where T : IExcelRequest
68
{
7-
void Write(T data, Stream stream);
9+
Task WriteAsync(T data, Stream stream);
810
}
11+
12+
public interface IExcelRequest
13+
{
14+
}

src/ModularMonolith/ClassifiedAds.Infrastructure/Csv/CsvReader.cs

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/ModularMonolith/ClassifiedAds.Infrastructure/Csv/CsvWriter.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/ModularMonolith/ClassifiedAds.Modules.Configuration/ConfigurationModuleServiceCollectionExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
using ClassifiedAds.Modules.Configuration.Authorization;
44
using ClassifiedAds.Modules.Configuration.ConfigurationOptions;
55
using ClassifiedAds.Modules.Configuration.Entities;
6+
using ClassifiedAds.Modules.Configuration.Excel;
67
using ClassifiedAds.Modules.Configuration.Excel.ClosedXML;
78
using ClassifiedAds.Modules.Configuration.Repositories;
89
using Microsoft.AspNetCore.Builder;
910
using Microsoft.EntityFrameworkCore;
1011
using System;
11-
using System.Collections.Generic;
1212
using System.Reflection;
1313

1414
namespace Microsoft.Extensions.DependencyInjection;
@@ -35,8 +35,8 @@ public static IServiceCollection AddConfigurationModule(this IServiceCollection
3535

3636
services.AddAuthorizationPolicies(Assembly.GetExecutingAssembly(), AuthorizationPolicyNames.GetPolicyNames());
3737

38-
services.AddScoped<IExcelReader<List<ConfigurationEntry>>, ConfigurationEntryExcelReader>();
39-
services.AddScoped<IExcelWriter<List<ConfigurationEntry>>, ConfigurationEntryExcelWriter>();
38+
services.AddScoped<IExcelReader<ImportConfigurationEntriesFromExcel>, ImportConfigurationEntriesFromExcelHandler>();
39+
services.AddScoped<IExcelWriter<ExportConfigurationEntriesToExcel>, ExportConfigurationEntriesToExcelHandler>();
4040

4141
return services;
4242
}

src/ModularMonolith/ClassifiedAds.Modules.Configuration/Controllers/ConfigurationEntriesController.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using ClassifiedAds.Modules.Configuration.Authorization;
44
using ClassifiedAds.Modules.Configuration.ConfigurationOptions;
55
using ClassifiedAds.Modules.Configuration.Entities;
6+
using ClassifiedAds.Modules.Configuration.Excel;
67
using ClassifiedAds.Modules.Configuration.Models;
78
using CryptographyHelper;
89
using CryptographyHelper.AsymmetricAlgorithms;
@@ -29,14 +30,14 @@ public class ConfigurationEntriesController : ControllerBase
2930
private readonly Dispatcher _dispatcher;
3031
private readonly ILogger _logger;
3132
private readonly ConfigurationModuleOptions _moduleOptions;
32-
private readonly IExcelWriter<List<ConfigurationEntry>> _configurationEntriesExcelWriter;
33-
private readonly IExcelReader<List<ConfigurationEntry>> _configurationEntriesExcelReader;
33+
private readonly IExcelWriter<ExportConfigurationEntriesToExcel> _configurationEntriesExcelWriter;
34+
private readonly IExcelReader<ImportConfigurationEntriesFromExcel> _configurationEntriesExcelReader;
3435

3536
public ConfigurationEntriesController(Dispatcher dispatcher,
3637
ILogger<ConfigurationEntriesController> logger,
3738
IOptionsSnapshot<ConfigurationModuleOptions> moduleOptions,
38-
IExcelWriter<List<ConfigurationEntry>> configurationEntriesExcelWriter,
39-
IExcelReader<List<ConfigurationEntry>> configurationEntriesExcelReader)
39+
IExcelWriter<ExportConfigurationEntriesToExcel> configurationEntriesExcelWriter,
40+
IExcelReader<ImportConfigurationEntriesFromExcel> configurationEntriesExcelReader)
4041
{
4142
_dispatcher = dispatcher;
4243
_logger = logger;
@@ -131,17 +132,17 @@ public async Task<IActionResult> ExportAsExcel()
131132
{
132133
var entries = await _dispatcher.DispatchAsync(new GetEntititesQuery<ConfigurationEntry>());
133134
using var stream = new MemoryStream();
134-
_configurationEntriesExcelWriter.Write(entries, stream);
135+
await _configurationEntriesExcelWriter.WriteAsync(new ExportConfigurationEntriesToExcel { ConfigurationEntries = entries }, stream);
135136
return File(stream.ToArray(), MediaTypeNames.Application.Octet, "ConfigurationEntries.xlsx");
136137
}
137138

138139
[HttpPost("ImportExcel")]
139-
public IActionResult ImportExcel([FromForm] UploadFileModel model)
140+
public async Task<IActionResult> ImportExcel([FromForm] UploadFileModel model)
140141
{
141142
using var stream = model.FormFile.OpenReadStream();
142-
var entries = _configurationEntriesExcelReader.Read(stream);
143+
var entries = await _configurationEntriesExcelReader.ReadAsync(stream);
143144

144145
// TODO: import to database
145-
return Ok(entries);
146+
return Ok(entries.ConfigurationEntries);
146147
}
147148
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
using ClassifiedAds.CrossCuttingConcerns.Excel;
2-
using ClassifiedAds.Modules.Configuration.Entities;
32
using ClosedXML.Excel;
4-
using System.Collections.Generic;
53
using System.IO;
4+
using System.Threading.Tasks;
65

76
namespace ClassifiedAds.Modules.Configuration.Excel.ClosedXML;
87

9-
public class ConfigurationEntryExcelWriter : IExcelWriter<List<ConfigurationEntry>>
8+
public class ExportConfigurationEntriesToExcelHandler : IExcelWriter<ExportConfigurationEntriesToExcel>
109
{
11-
public void Write(List<ConfigurationEntry> data, Stream stream)
10+
public Task WriteAsync(ExportConfigurationEntriesToExcel data, Stream stream)
1211
{
1312
using var workbook = new XLWorkbook();
1413
var worksheet = workbook.Worksheets.Add("Sheet1");
@@ -18,13 +17,15 @@ public void Write(List<ConfigurationEntry> data, Stream stream)
1817
worksheet.Range("A1:B1").Style.Font.Bold = true;
1918

2019
int i = 2;
21-
foreach (var row in data)
20+
foreach (var row in data.ConfigurationEntries)
2221
{
2322
worksheet.Cell("A" + i).Value = row.Key;
2423
worksheet.Cell("B" + i).Value = row.Value;
2524
i++;
2625
}
2726

2827
workbook.SaveAs(stream);
28+
29+
return Task.CompletedTask;
2930
}
3031
}
Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
using ClassifiedAds.CrossCuttingConcerns.Excel;
22
using ClassifiedAds.CrossCuttingConcerns.Exceptions;
33
using ClassifiedAds.Modules.Configuration.Entities;
4+
using ClassifiedAds.Modules.Configuration.Excel;
45
using ClosedXML.Excel;
56
using System.Collections.Generic;
67
using System.IO;
78
using System.Linq;
9+
using System.Threading.Tasks;
810

911
namespace ClassifiedAds.Modules.Configuration.Excel.ClosedXML;
1012

11-
public class ConfigurationEntryExcelReader : IExcelReader<List<ConfigurationEntry>>
13+
public class ImportConfigurationEntriesFromExcelHandler : IExcelReader<ImportConfigurationEntriesFromExcel>
1214
{
13-
public List<ConfigurationEntry> Read(Stream stream)
15+
private static Dictionary<string, string> GetCorrectHeaders()
16+
{
17+
return new Dictionary<string, string>
18+
{
19+
{ "A", "Key" },
20+
{ "B", "Value" },
21+
};
22+
}
23+
24+
public Task<ImportConfigurationEntriesFromExcel> ReadAsync(Stream stream)
1425
{
1526
using var workbook = new XLWorkbook(stream);
1627
var worksheet = workbook.Worksheets.First();
@@ -34,15 +45,6 @@ public List<ConfigurationEntry> Read(Stream stream)
3445
rows.Add(row);
3546
}
3647

37-
return rows;
38-
}
39-
40-
private static Dictionary<string, string> GetCorrectHeaders()
41-
{
42-
return new Dictionary<string, string>
43-
{
44-
{ "A", "Key" },
45-
{ "B", "Value" },
46-
};
48+
return Task.FromResult(new ImportConfigurationEntriesFromExcel { ConfigurationEntries = rows });
4749
}
4850
}

0 commit comments

Comments
 (0)