Skip to content

Commit 7d3fe2e

Browse files
authored
Merge pull request #59 from PandaTechAM/development
Refactor exports, remove legacy tests, and update packages
2 parents f786477 + 4c45871 commit 7d3fe2e

File tree

8 files changed

+127
-413
lines changed

8 files changed

+127
-413
lines changed

src/FileExporter/Extensions/EnumerableExtensions.cs

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -133,40 +133,29 @@ public static ExportFile ToPdf<T>(this IEnumerable<T> data,
133133
return ReturnFileOrZippedVersion(datatable, files, MimeTypes.Pdf);
134134
}
135135

136-
public static ExportFile ToFileFormat<T>(this IEnumerable<T> data, ExportType type)
136+
private static ExportFile CreateZip(string baseName, MimeTypes innerType, IReadOnlyList<byte[]> parts)
137137
{
138-
return type switch
138+
using var ms = new MemoryStream();
139+
using (var zip = new ZipArchive(ms, ZipArchiveMode.Create, leaveOpen: true))
139140
{
140-
ExportType.Xlsx => data.ToXlsx(),
141-
ExportType.Csv => data.ToCsv(),
142-
ExportType.Pdf => data.ToPdf(),
143-
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null)
144-
};
145-
}
141+
for (var i = 0; i < parts.Count; i++)
142+
{
143+
var entryName = parts.Count == 1
144+
? $"{baseName}{innerType.Extension}"
145+
: $"{baseName}_{i + 1}{innerType.Extension}";
146146

147-
private static ExportFile Zip(string fileName, MimeTypes mimeType, List<byte[]> files)
148-
{
149-
using var memoryStream = new MemoryStream();
150-
using var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true);
151-
{
152-
}
153-
for (var i = 0; i < files.Count; i++)
154-
{
155-
var entry = archive.CreateEntry(fileName + Suffix(i), CompressionLevel.Optimal);
156-
using var entryStream = entry.Open();
157-
entryStream.Write(files[i], 0, files[i].Length);
158-
}
147+
var entry = zip.CreateEntry(entryName, CompressionLevel.Optimal);
159148

160-
archive.Dispose(); //don't delete this line otherwize file will be corrupted
161-
162-
return new ExportFile(fileName, MimeTypes.Zip, memoryStream.ToArray());
163-
164-
string Suffix(int index)
165-
{
166-
return files.Count == 1 ? $"{mimeType.Extension}" : $"_{index + 1}{mimeType.Extension}";
149+
using var es = entry.Open();
150+
es.Write(parts[i]);
151+
}
167152
}
153+
154+
// no extra ToArray(); MemoryStream already owns the buffer we need
155+
return new ExportFile($"{baseName}.zip", MimeTypes.Zip, ms.GetBuffer()[..(int)ms.Length]);
168156
}
169157

158+
170159
private static ExportFile ReturnFileOrZippedVersion<T>(DataTable<T> dataTable, List<byte[]> files, MimeTypes type)
171160
{
172161
if (files.Count == 1 && files.First()
@@ -175,6 +164,6 @@ private static ExportFile ReturnFileOrZippedVersion<T>(DataTable<T> dataTable, L
175164
return new ExportFile(dataTable.Name, type, files.First());
176165
}
177166

178-
return Zip(dataTable.Name, type, files);
167+
return CreateZip(dataTable.Name, type, files);
179168
}
180169
}

src/FileExporter/FileExporter.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
<Copyright>MIT</Copyright>
99
<PackageIcon>Logo.jpg</PackageIcon>
1010
<PackageReadmeFile>Readme.md</PackageReadmeFile>
11-
<Version>4.0.3</Version>
11+
<Version>4.0.4</Version>
1212
<Company>PandaTech</Company>
1313
<Title>Model to File</Title>
1414
<PackageTags>Pandatech, lib, export, xlsx, csv, pdf</PackageTags>
1515
<Description>Export table data into xls, xlsx, csv, pdf formats</Description>
1616
<RepositoryUrl>https://github.com/PandaTechAM/be-lib-file-exporter</RepositoryUrl>
17-
<PackageReleaseNotes>Cleanup</PackageReleaseNotes>
17+
<PackageReleaseNotes>Refactor exports, remove legacy tests, and update packages</PackageReleaseNotes>
1818
</PropertyGroup>
1919

2020
<ItemGroup>
@@ -38,8 +38,8 @@
3838
</ItemGroup>
3939

4040
<ItemGroup>
41-
<PackageReference Include="ClosedXML" Version="0.104.2" />
42-
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.4" />
41+
<PackageReference Include="ClosedXML" Version="0.105.0" />
42+
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.5" />
4343
<PackageReference Include="PdfSharpCore" Version="1.3.67" />
4444
</ItemGroup>
4545
</Project>

test/FileExporter.Demo/FileExporter.Demo.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.4"/>
10+
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.5" />
1111
<PackageReference Include="Swashbuckle.AspNetCore" Version="8.1.1"/>
1212
</ItemGroup>
1313

test/FileExporter.Tests/AppDbContext.cs

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

test/FileExporter.Tests/ExportRuleTests/RulesTests.cs

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

test/FileExporter.Tests/FileExporter.Tests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
</ItemGroup>
2323

2424
<ItemGroup>
25-
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="9.0.4"/>
2625
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0"/>
2726
<PackageReference Include="xunit" Version="2.9.3"/>
2827
<PackageReference Include="coverlet.collector" Version="6.0.4">

0 commit comments

Comments
 (0)