-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Автоматическое применение миграций при старте приложения. - Для сущностей истории изменений и объектов реестра добавлено поле хэша, чтобы однозначно определять запись. - Для сущностей истории изменений и объектов реестра добавлено поле Id с уникальным хэшем элемента (binary(16) и оптимизированы методы работы с элементами по этому ID. Старые ключи больше не используются, как и доп. индексы. - Обновлены миграции PostgreSQL / SQL Server - При загрузке истории изменений и объектов реестра теперь исполоьзуются уникальные ключи для каждой записи. - Расширены unit-тесты для библиотеки чтения данных ФИАС. - Небольшой рефакторинг заданий
- Loading branch information
Showing
32 changed files
with
7,387 additions
and
500 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
118 changes: 118 additions & 0 deletions
118
Libs/YPermitin.FIASToolSet.DistributionReader/Helpers/MD5Builder.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
using System.Security.Cryptography; | ||
using System.Text; | ||
|
||
namespace YPermitin.FIASToolSet.DistributionReader.Helpers; | ||
|
||
public class MD5Builder : IDisposable | ||
{ | ||
private readonly MD5 _md5; | ||
|
||
public MD5Builder() | ||
{ | ||
_md5 = MD5.Create(); | ||
} | ||
|
||
public MD5Builder Add(int value) | ||
{ | ||
AddIntToHash(_md5, value); | ||
return this; | ||
} | ||
|
||
public MD5Builder Add(long value) | ||
{ | ||
AddLongToHash(_md5, value); | ||
return this; | ||
} | ||
|
||
public MD5Builder Add(DateTime value) | ||
{ | ||
AddDateTimeToHash(_md5, value); | ||
return this; | ||
} | ||
|
||
public MD5Builder Add(string value) | ||
{ | ||
AddStringToHash(_md5, value); | ||
return this; | ||
} | ||
|
||
public MD5Builder Add(Guid value) | ||
{ | ||
AddGuidToHash(_md5, value); | ||
return this; | ||
} | ||
|
||
public MD5Builder Add(bool value) | ||
{ | ||
AddBoolToHash(_md5, value); | ||
return this; | ||
} | ||
|
||
public byte[] Build() | ||
{ | ||
_md5.TransformFinalBlock(Array.Empty<byte>(), 0, 0); | ||
return _md5.Hash; | ||
} | ||
|
||
public string BuildAsString() | ||
{ | ||
var hash = Build(); | ||
return ConvertByteArrayToString(hash); | ||
} | ||
|
||
public void Dispose() | ||
{ | ||
_md5?.Dispose(); | ||
} | ||
|
||
#region Service | ||
|
||
private void AddStringToHash(ICryptoTransform cryptoTransform, string textToHash) | ||
{ | ||
var inputBuffer = Encoding.UTF8.GetBytes(textToHash); | ||
cryptoTransform.TransformBlock(inputBuffer, 0, inputBuffer.Length, inputBuffer, 0); | ||
} | ||
|
||
private void AddIntToHash(ICryptoTransform cryptoTransform, int intToHash) | ||
{ | ||
var inputBuffer = BitConverter.GetBytes(intToHash); | ||
cryptoTransform.TransformBlock(inputBuffer, 0, inputBuffer.Length, inputBuffer, 0); | ||
} | ||
|
||
private void AddLongToHash(ICryptoTransform cryptoTransform, long longToHash) | ||
{ | ||
var inputBuffer = BitConverter.GetBytes(longToHash); | ||
cryptoTransform.TransformBlock(inputBuffer, 0, inputBuffer.Length, inputBuffer, 0); | ||
} | ||
|
||
private void AddDateTimeToHash(ICryptoTransform cryptoTransform, DateTime dateTimeToHash) | ||
{ | ||
var inputBuffer = BitConverter.GetBytes(dateTimeToHash.ToBinary()); | ||
cryptoTransform.TransformBlock(inputBuffer, 0, inputBuffer.Length, inputBuffer, 0); | ||
} | ||
|
||
private void AddGuidToHash(ICryptoTransform cryptoTransform, Guid guidToHash) | ||
{ | ||
var inputBuffer = guidToHash.ToByteArray(); | ||
cryptoTransform.TransformBlock(inputBuffer, 0, inputBuffer.Length, inputBuffer, 0); | ||
} | ||
|
||
private void AddBoolToHash(ICryptoTransform cryptoTransform, bool boolToHash) | ||
{ | ||
var inputBuffer = BitConverter.GetBytes(boolToHash); | ||
cryptoTransform.TransformBlock(inputBuffer, 0, inputBuffer.Length, inputBuffer, 0); | ||
} | ||
|
||
private string ConvertByteArrayToString(byte[] bytes) | ||
{ | ||
var sb = new StringBuilder(); | ||
foreach (var b in bytes) | ||
{ | ||
sb.Append(b.ToString("X2")); | ||
} | ||
|
||
return sb.ToString(); | ||
} | ||
|
||
#endregion | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 10 additions & 0 deletions
10
Libs/YPermitin.FIASToolSet.DistributionReader/YPermitin.FIASToolSet.DistributionReader.xml
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.