aboutsummaryrefslogtreecommitdiff
path: root/BackEnd/Timeline/Services/DatabaseManagement/DatabaseBackupService.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-04-23 17:28:18 +0800
committercrupest <crupest@outlook.com>2021-04-23 17:37:37 +0800
commit6e067a28d8527726a2a17045bef0f0e3d3430ed5 (patch)
tree967ed4c84981d6b626a3370c726d35d1c3e2c2b4 /BackEnd/Timeline/Services/DatabaseManagement/DatabaseBackupService.cs
parent6acef36dc717834605eda2af9e1738dac8fa2f6d (diff)
downloadtimeline-6e067a28d8527726a2a17045bef0f0e3d3430ed5.tar.gz
timeline-6e067a28d8527726a2a17045bef0f0e3d3430ed5.tar.bz2
timeline-6e067a28d8527726a2a17045bef0f0e3d3430ed5.zip
refactor: Refactor a lot.
Diffstat (limited to 'BackEnd/Timeline/Services/DatabaseManagement/DatabaseBackupService.cs')
-rw-r--r--BackEnd/Timeline/Services/DatabaseManagement/DatabaseBackupService.cs37
1 files changed, 37 insertions, 0 deletions
diff --git a/BackEnd/Timeline/Services/DatabaseManagement/DatabaseBackupService.cs b/BackEnd/Timeline/Services/DatabaseManagement/DatabaseBackupService.cs
new file mode 100644
index 00000000..c00b5f95
--- /dev/null
+++ b/BackEnd/Timeline/Services/DatabaseManagement/DatabaseBackupService.cs
@@ -0,0 +1,37 @@
+using Microsoft.EntityFrameworkCore;
+using System.Globalization;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using Timeline.Entities;
+
+namespace Timeline.Services.DatabaseManagement
+{
+ public interface IDatabaseBackupService
+ {
+ Task BackupAsync(CancellationToken cancellationToken = default);
+ }
+
+ public class DatabaseBackupService : IDatabaseBackupService
+ {
+ private readonly DatabaseContext _database;
+ private readonly IPathProvider _pathProvider;
+ private readonly IClock _clock;
+
+ public DatabaseBackupService(DatabaseContext database, IPathProvider pathProvider, IClock clock)
+ {
+ _database = database;
+ _pathProvider = pathProvider;
+ _clock = clock;
+ }
+
+ public async Task BackupAsync(CancellationToken cancellationToken = default)
+ {
+ var backupDirPath = _pathProvider.GetDatabaseBackupDirectory();
+ Directory.CreateDirectory(backupDirPath);
+ var fileName = _clock.GetCurrentTime().ToString("yyyy-MM-ddTHH-mm-ss", CultureInfo.InvariantCulture);
+ var path = Path.Combine(backupDirPath, fileName);
+ await _database.Database.ExecuteSqlInterpolatedAsync($"VACUUM INTO {path}", cancellationToken);
+ }
+ }
+}