| | 1 | = Атомично креирање на финансиска трансакција |
| | 2 | |
| | 3 | Корисникот креира нова финансиска трансакција со следните податоци: |
| | 4 | - Име на финансиска трансакција:// „Пазарување во маркет“ |
| | 5 | - Датум:// тековен датум |
| | 6 | - Трансакциска сметка:// Cash Account (id = 1) |
| | 7 | - Потрошен износ:// 3000 МКД |
| | 8 | - Заработен износ:// 0 МКД |
| | 9 | Оваа акција мора да резултира со: |
| | 10 | - нов запис во табелата `transaction` со автоматско поставен тековен датум |
| | 11 | - нов запис во `transaction_breakdown` доколку проверката за лимит не фрли исклучок |
| | 12 | - автоматско ажурирање на балансот на трансакциската сметка |
| | 13 | - точна пресметка на `net_amount` |
| | 14 | **Доколку било кој чекор не успее, ниеден податок не смее да остане запишан во базата. |
| | 15 | Се прави автоматски `ROLLBACK` ако настане грешка** |
| | 16 | |
| | 17 | {{{#!sql |
| | 18 | BEGIN; |
| | 19 | |
| | 20 | -- Се активира тригерот `trg_set_transaction_date` |
| | 21 | |
| | 22 | INSERT INTO transaction ( |
| | 23 | transaction_name, |
| | 24 | amount |
| | 25 | ) |
| | 26 | VALUES ( |
| | 27 | 'Пазарување во маркет', |
| | 28 | 3000 |
| | 29 | ); |
| | 30 | |
| | 31 | -- Се активира тригерот `trg_cash_account_limit` |
| | 32 | |
| | 33 | INSERT INTO transaction_breakdown ( |
| | 34 | transaction_id, |
| | 35 | transaction_account_id, |
| | 36 | spent_amount, |
| | 37 | earned_amount |
| | 38 | ) |
| | 39 | VALUES ( |
| | 40 | currval('transaction_transaction_id_seq'), |
| | 41 | 1, |
| | 42 | 3000, |
| | 43 | 0 |
| | 44 | ); |
| | 45 | |
| | 46 | -- Се активира тригерот `trg_update_transaction_account_balance` |
| | 47 | |
| | 48 | -- Се активира тригерот `trg_update_transaction_net_amount` |
| | 49 | |
| | 50 | COMMIT; |
| | 51 | -- ROLLBACK ако настане грешка |
| | 52 | }}} |