transaction
This commit is contained in:
108
kernel/app_modules/card/services/CardTransactionService.php
Normal file
108
kernel/app_modules/card/services/CardTransactionService.php
Normal file
@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
namespace kernel\app_modules\card\services;
|
||||
|
||||
use kernel\app_modules\card\models\Card;
|
||||
use kernel\app_modules\card\models\CardTemplate;
|
||||
use kernel\app_modules\card\models\CardTransaction;
|
||||
use kernel\FormModel;
|
||||
|
||||
class CardTransactionService
|
||||
{
|
||||
protected array $errors = [];
|
||||
|
||||
public function create(FormModel $form_model): false|CardTransaction
|
||||
{
|
||||
$model = new CardTransaction();
|
||||
|
||||
$fromId = (int)$form_model->getItem('from');
|
||||
$toId = (int)$form_model->getItem('to');
|
||||
|
||||
if ($fromId !== 1001){
|
||||
$fromCard = Card::where("id", $form_model->getItem('from'))->first();
|
||||
if (!$fromCard){
|
||||
$this->errors[] = ["error_id" => 3, "error_msg" => "Sender not found"];
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($toId !== 1001){
|
||||
$toCard = Card::where("id", $form_model->getItem('to'))->first();
|
||||
if (!$toCard){
|
||||
$this->errors[] = ["error_id" => 3, "error_msg" => "Recipient not found"];
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($fromId !== 1001){
|
||||
if ($fromCard->balance < $form_model->getItem('amount')){
|
||||
$this->errors[] = ["error_id" => 3, "error_msg" => "Insufficient funds of the sender"];
|
||||
}
|
||||
}
|
||||
|
||||
// Пример заполнения:
|
||||
$model->from = $form_model->getItem('from');
|
||||
$model->to = $form_model->getItem('to');
|
||||
$model->status = $form_model->getItem('status');
|
||||
$model->type = $form_model->getItem('type');
|
||||
$model->amount = $form_model->getItem('amount');
|
||||
// $model->slug = Slug::createSlug($form_model->getItem('title'), Card::class); // Генерация уникального slug
|
||||
|
||||
if ($model->save()) {
|
||||
if ($fromCard){
|
||||
$fromCard->balance = $fromCard->balance - (int)$form_model->getItem('amount');
|
||||
$fromCard->save();
|
||||
}
|
||||
if ($toCard){
|
||||
$toCard->balance = $toCard->balance + (int)$form_model->getItem('amount');
|
||||
$toCard->save();
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function update(FormModel $form_model, CardTransaction $cardTransaction): false|CardTransaction
|
||||
{
|
||||
$fromCard = Card::where("id", $form_model->getItem('from'))->first();
|
||||
if (!$fromCard){
|
||||
$this->errors[] = ["error_id" => 3, "error_msg" => "Sender not found"];
|
||||
return false;
|
||||
}
|
||||
|
||||
$toCard = Card::where("id", $form_model->getItem('to'))->first();
|
||||
if (!$toCard){
|
||||
$this->errors[] = ["error_id" => 3, "error_msg" => "Recipient not found"];
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($fromCard->balance < $form_model->getItem('amount')){
|
||||
$this->errors[] = ["error_id" => 3, "error_msg" => "Insufficient funds of the sender"];
|
||||
}
|
||||
// Пример обновления:
|
||||
$cardTransaction->from = $form_model->getItem('from');
|
||||
$cardTransaction->to = $form_model->getItem('to');
|
||||
$cardTransaction->amount = $form_model->getItem('amount');
|
||||
$cardTransaction->type = $form_model->getItem('type');
|
||||
$cardTransaction->status = $form_model->getItem('status');
|
||||
|
||||
if ($cardTransaction->save()) {
|
||||
return $cardTransaction;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getErrorsString(): string
|
||||
{
|
||||
$errStr = "";
|
||||
foreach ($this->errors as $error){
|
||||
$errStr .= $error['error_msg'] . ". ";
|
||||
}
|
||||
|
||||
return $errStr;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user