Rewrite README in plain language, fix repository description
This commit is contained in:
parent
9eb82e44c9
commit
8f381db2cb
|
|
@ -94,7 +94,7 @@ public class OrderRepository
|
||||||
// Первая позиция списывается успешно, на второй специально выбрасывается
|
// Первая позиция списывается успешно, на второй специально выбрасывается
|
||||||
// ошибка. В результате БД не меняется вообще: остатки возвращаются
|
// ошибка. В результате БД не меняется вообще: остатки возвращаются
|
||||||
// к прежнему значению, а заказ не создаётся.
|
// к прежнему значению, а заказ не создаётся.
|
||||||
// Метод возвращает текст описания случившимся — для вывода в консоль.
|
// Метод возвращает текст описания случившимся - для вывода в консоль.
|
||||||
public async Task<string> CreateOrderWithRollbackDemoAsync(int customerId)
|
public async Task<string> CreateOrderWithRollbackDemoAsync(int customerId)
|
||||||
{
|
{
|
||||||
await using var connection = _connectionFactory.CreateConnection();
|
await using var connection = _connectionFactory.CreateConnection();
|
||||||
|
|
@ -123,7 +123,7 @@ public class OrderRepository
|
||||||
var report = new List<string>();
|
var report = new List<string>();
|
||||||
report.Add("Остатки ДО операции:");
|
report.Add("Остатки ДО операции:");
|
||||||
foreach (var it in demoItems)
|
foreach (var it in demoItems)
|
||||||
report.Add($" [{it.Id}] {it.Name} — было {it.Stock} шт.");
|
report.Add($" [{it.Id}] {it.Name} - было {it.Stock} шт.");
|
||||||
|
|
||||||
await using var transaction = (SqlTransaction)await connection.BeginTransactionAsync();
|
await using var transaction = (SqlTransaction)await connection.BeginTransactionAsync();
|
||||||
|
|
||||||
|
|
@ -146,12 +146,12 @@ public class OrderRepository
|
||||||
await orderCommand.ExecuteNonQueryAsync();
|
await orderCommand.ExecuteNonQueryAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Шаг 2. Списываем первую позицию — это успешно
|
// Шаг 2. Списываем первую позицию - это успешно
|
||||||
await DeductStockAsync(connection, transaction, demoItems[0].Id, 2);
|
await DeductStockAsync(connection, transaction, demoItems[0].Id, 2);
|
||||||
|
|
||||||
report.Add($"Списание товара [{demoItems[0].Id}] {demoItems[0].Name} - 2 шт. прошло успешно.");
|
report.Add($"Списание товара [{demoItems[0].Id}] {demoItems[0].Name} - 2 шт. прошло успешно.");
|
||||||
report.Add("Но тут приложение «падает» (искусственная ошибка).");
|
report.Add("Но тут приложение «падает» (искусственная ошибка).");
|
||||||
report.Add("Вызывается Rollback — все изменения выше отменяются:");
|
report.Add("Вызывается Rollback - все изменения выше отменяются:");
|
||||||
|
|
||||||
// Шаг 3. Искусственная ошибка внутри транзакции
|
// Шаг 3. Искусственная ошибка внутри транзакции
|
||||||
throw new InvalidOperationException("Искусственная ошибка при обработке второй позиции заказа");
|
throw new InvalidOperationException("Искусственная ошибка при обработке второй позиции заказа");
|
||||||
|
|
@ -164,7 +164,7 @@ public class OrderRepository
|
||||||
report.Add("Выполнен transaction.RollbackAsync().");
|
report.Add("Выполнен transaction.RollbackAsync().");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Читаем остатки ПОСЛЕ отката — база вернулась в исходное состояние
|
// Читаем остатки ПОСЛЕ отката - база вернулась в исходное состояние
|
||||||
string checkSql = @"
|
string checkSql = @"
|
||||||
SELECT Id, Name, StockQuantity
|
SELECT Id, Name, StockQuantity
|
||||||
FROM Products
|
FROM Products
|
||||||
|
|
@ -179,7 +179,7 @@ public class OrderRepository
|
||||||
{
|
{
|
||||||
while (await checkReader.ReadAsync())
|
while (await checkReader.ReadAsync())
|
||||||
{
|
{
|
||||||
report.Add($" [{checkReader.GetInt32(0)}] {checkReader.GetString(1)} — стало {checkReader.GetInt32(2)} шт.");
|
report.Add($" [{checkReader.GetInt32(0)}] {checkReader.GetString(1)} - стало {checkReader.GetInt32(2)} шт.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class Program
|
||||||
|
|
||||||
var input = Console.ReadLine();
|
var input = Console.ReadLine();
|
||||||
|
|
||||||
// Ввод закрыт (например, перенаправлен и закончился) — выходим из программы,
|
// Ввод закрыт (например, перенаправлен и закончился) - выходим из программы,
|
||||||
// иначе цикл меню будет крутиться бесконечно.
|
// иначе цикл меню будет крутиться бесконечно.
|
||||||
if (input is null)
|
if (input is null)
|
||||||
{
|
{
|
||||||
|
|
@ -128,7 +128,7 @@ var input = Console.ReadLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Очистка экрана. Console.Clear() не работает, если вывод перенаправлен
|
// Очистка экрана. Console.Clear() не работает, если вывод перенаправлен
|
||||||
// (например, при запуске через管道 или в CI) — в этом случае просто пропускаем её.
|
// (например, при запуске через管道 или в CI) - в этом случае просто пропускаем её.
|
||||||
private static void ClearConsole()
|
private static void ClearConsole()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
@ -137,7 +137,7 @@ var input = Console.ReadLine();
|
||||||
}
|
}
|
||||||
catch (IOException)
|
catch (IOException)
|
||||||
{
|
{
|
||||||
// Консоли нет — ничего не очищаем
|
// Консоли нет - ничего не очищаем
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -359,7 +359,7 @@ var input = Console.ReadLine();
|
||||||
Console.WriteLine($"Процедура вернула товаров: {products.Count}");
|
Console.WriteLine($"Процедура вернула товаров: {products.Count}");
|
||||||
foreach (var p in products)
|
foreach (var p in products)
|
||||||
{
|
{
|
||||||
Console.WriteLine($" [{p.Id}] {p.Name} — {p.Price:C} (остаток: {p.StockQuantity})");
|
Console.WriteLine($" [{p.Id}] {p.Name} - {p.Price:C} (остаток: {p.StockQuantity})");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (products.Count == 0)
|
if (products.Count == 0)
|
||||||
|
|
@ -385,7 +385,7 @@ var input = Console.ReadLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Наглядная демонстрация отката транзакции (Rollback).
|
// Наглядная демонстрация отката транзакции (Rollback).
|
||||||
// Первая позиция списывается успешно, затем происходит ошибка —
|
// Первая позиция списывается успешно, затем происходит ошибка -
|
||||||
// и вся транзакция отменяется. Остатки в базе не меняются.
|
// и вся транзакция отменяется. Остатки в базе не меняются.
|
||||||
private static async Task DemoRollback(ShopService service)
|
private static async Task DemoRollback(ShopService service)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user