adding payments for VM contracts
This commit is contained in:
parent
cd44d82463
commit
186146a597
46
src/db/vm.rs
46
src/db/vm.rs
@ -189,7 +189,46 @@ impl NewVmReq {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn submit(self, db: &Surreal<Client>) -> Result<(), Error> {
|
pub async fn submit(self, db: &Surreal<Client>) -> Result<(), Error> {
|
||||||
let _: Vec<Self> = db.insert(NEW_VM_REQ).relation(self).await?;
|
let locked_nano = self.locked_nano;
|
||||||
|
let account = self.admin.key().to_string();
|
||||||
|
let vm_id = self.id.key().to_string();
|
||||||
|
let vm_node = self.vm_node.key().to_string();
|
||||||
|
// TODO: check for possible injection and maybe use .bind()
|
||||||
|
let query = format!(
|
||||||
|
"
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
UPDATE account:{account} SET balance -= {locked_nano};
|
||||||
|
IF account:{account}.balance < 0 {{
|
||||||
|
THROW 'Insufficient funds.'
|
||||||
|
}};
|
||||||
|
UPDATE account:{account} SET tmp_locked += {locked_nano};
|
||||||
|
RELATE
|
||||||
|
account:{account}
|
||||||
|
->new_vm_req:{vm_id}
|
||||||
|
->vm_node:{vm_node}
|
||||||
|
CONTENT {{
|
||||||
|
created_at: time::now(), hostname: '{}', vcpus: {}, memory_mb: {}, disk_size_gb: {},
|
||||||
|
extra_ports: {}, public_ipv4: {:?}, public_ipv6: {:?},
|
||||||
|
dtrfs_url: '{}', dtrfs_sha: '{}', kernel_url: '{}', kernel_sha: '{}',
|
||||||
|
price_per_unit: {}, locked_nano: {locked_nano}, error: ''
|
||||||
|
}};
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
",
|
||||||
|
self.hostname,
|
||||||
|
self.vcpus,
|
||||||
|
self.memory_mb,
|
||||||
|
self.disk_size_gb,
|
||||||
|
format!("{:?}", self.extra_ports,),
|
||||||
|
self.public_ipv4,
|
||||||
|
self.public_ipv6,
|
||||||
|
self.dtrfs_url,
|
||||||
|
self.dtrfs_sha,
|
||||||
|
self.kernel_url,
|
||||||
|
self.kernel_sha,
|
||||||
|
self.price_per_unit
|
||||||
|
);
|
||||||
|
//let _: Vec<Self> = db.insert(NEW_VM_REQ).relation(self).await?;
|
||||||
|
db.query(query).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -367,9 +406,12 @@ impl ActiveVm {
|
|||||||
collected_at: new_vm_req.created_at,
|
collected_at: new_vm_req.created_at,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let admin_account = active_vm.admin.key().to_string();
|
||||||
|
let locked_nano = active_vm.locked_nano;
|
||||||
let _: Vec<ActiveVm> = db.insert(()).relation(active_vm).await?;
|
let _: Vec<ActiveVm> = db.insert(()).relation(active_vm).await?;
|
||||||
|
|
||||||
NewVmReq::delete(db, id).await?;
|
NewVmReq::delete(db, id).await?;
|
||||||
|
db.query(format!("UPDATE {ACCOUNT}:{admin_account} SET tmp_locked -= {locked_nano};"))
|
||||||
|
.await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user