Changes between Version 34 and Version 35 of Трансакции


Ignore:
Timestamp:
06/15/25 20:00:11 (12 hours ago)
Author:
183175
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Трансакции

    v34 v35  
    160160Конкретно кај нас во база, овој ред гарантира дека сите промени во трансакцијата се трајно запишани во база.\\
    161161Дури и серверот ако падне веднаш по '''COMMIT''', базата гарантира дека тие податоци ќе бидат зачувани.\\
     162= Сите ACID примери употребени на едно место
     163Како што знаеме, и понатаму ке го тестираме сценариото од избор на производ до нарачување, \\
     164но ова е пример конкретно каде сите '''4 ACID''' примери се употребени на едно место :
     165{{{#!sql
     166const client = await db.pool.connect();
     167try {
     168  await client.query("BEGIN");  // Почеток на транзакција
     169
     170  // Проверка и земање id на начин на плаќање
     171  const paymentMethodResult = await client.query("SELECT id_payment_method FROM payment_methods WHERE method_name = $1", [paymentMethod]);
     172
     173  // Проверка и создавање/наоѓање на customer
     174  if (userId) {
     175    // Проверка дали постои customer со email
     176    // Ако не, вметни нов customer + адреса
     177  } else {
     178    // Вметни нов customer + адреса без email
     179  }
     180
     181  // Вметни нова нарачка во orders табелата
     182
     183  // За секој продукт во кошничката:
     184  //   1) SELECT SUM(quantity) од stock каде size и product одговараат
     185  //   2) Проверка дали има доволна залиха
     186  //   3) SELECT stock rows FOR UPDATE за заклучување
     187  //   4) UPDATE stock quantity (одземање залиха)
     188  //   5) INSERT во contains табелата (поврзување нарачка-продукти)
     189
     190  // Вметни запис во payments табелата
     191
     192  await client.query("COMMIT");  // Потврда на транзакцијата
     193  res.status(200).json({ message: "Нарачката е успешно завршена.", orderId });
     194} catch (err) {
     195  await client.query("ROLLBACK");  // Враќање назад ако има грешка
     196  res.status(500).json({ message: "Грешка при обработка на нарачката: " + err.message });
     197} finally {
     198  client.release();
     199}
     200
     201}}}