Production grade kick contract code for financial transaction tested for both vm and app modified schema to include node in kick, default time for deleted_app and removed unwanted fields app data migration for testing kick contract for active_app fixed some tests register operator Reviewed-on: #2 Co-authored-by: Noor <noormohammedb@protonmail.com> Co-committed-by: Noor <noormohammedb@protonmail.com> Signed-off-by: Noor <noormohammedb@protonmail.com>
37 lines
1005 B
SQL
37 lines
1005 B
SQL
DEFINE FUNCTION OVERWRITE fn::vm_price_per_minute(
|
|
$vm_id: record
|
|
) {
|
|
LET $vm = (select * from $vm_id)[0];
|
|
LET $ip_price = IF $vm.public_ipv4.len() > 0 { 10 } ELSE { 0 };
|
|
RETURN (
|
|
($vm.vcpus * 10) + (($vm.memory_mb + 256) / 200) + ($vm.disk_size_gb / 10) + $ip_price)
|
|
* $vm.price_per_unit;
|
|
};
|
|
|
|
DEFINE FUNCTION OVERWRITE fn::delete_vm(
|
|
$vm_id: record
|
|
) {
|
|
LET $vm = (select * from $vm_id)[0];
|
|
LET $account = $vm.in;
|
|
LET $deleted_vm = $vm.patch([{
|
|
'op': 'replace',
|
|
'path': 'id',
|
|
'value': type::record("deleted_vm:" + record::id($vm.id))
|
|
}]);
|
|
IF $vm.locked_nano >= 0 {
|
|
UPDATE $account SET balance += $vm.locked_nano;
|
|
};
|
|
INSERT RELATION INTO deleted_vm ( $deleted_vm );
|
|
DELETE $vm.id;
|
|
};
|
|
|
|
DEFINE FUNCTION OVERWRITE fn::app_price_per_minute(
|
|
$app_id: record
|
|
) {
|
|
LET $app = (select * from $app_id)[0];
|
|
RETURN
|
|
(($app.vcpus * 5) +
|
|
($app.memory_mb / 200) +
|
|
($app.disk_size_gb / 10))
|
|
* $app.price_per_unit;
|
|
}; |