From 6e067a28d8527726a2a17045bef0f0e3d3430ed5 Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 23 Apr 2021 17:28:18 +0800 Subject: refactor: Refactor a lot. --- .../DatabaseManagement/DatabaseBackupService.cs | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 BackEnd/Timeline/Services/DatabaseManagement/DatabaseBackupService.cs (limited to 'BackEnd/Timeline/Services/DatabaseManagement/DatabaseBackupService.cs') 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); + } + } +} -- cgit v1.2.3