ShareBikeStorage.sol
pragma solidity >=0.6.10;
pragma experimental ABIEncoderV2;
//import "DataStrong.sol";
import "Table.sol";
import "AddressToString.sol";
import "LibConverter.sol";
import "LibString.sol";
contract ShareBikeStorage{
TableFactory tf;
using LibConverter for uint256;
using LibString for bytes;
struct Bike{
string id;
uint256 borrowed_time;
address borrow_user;
int status;
}
constructor()public{
tf = TableFactory(0x1001);
tf.createTable("TABLE_NAME","id","borrowed_time,borrow_user,status");
}
function registerBike(string memory _id)public returns(int){
Table table = tf.openTable("TABLE_NAME");
Entries entries = table.select(_id,table.newCondition());
require(entries.size()<=0,"该单车已存在");
Entry entry = table.newEntry();
entry.set("id",_id);
entry.set("borrowed_time",uint256(0));
entry.set("borrow_user","");
entry.set("status",uint256(0));
int count = table.insert(_id,entry);
return count;
}
function getBikeDetail(uint256 _id)public returns(Bike memory){
Table table = tf.openTable("TABLE_NAME");
Bike memory bike;
string memory bikeid = _id.uintToBytes().bytesToString();
Entries entries = table.select(bikeid,table.newCondition());
require(entries.size()>0,"该单车不存在");
Entry entry = entries.get(0);
bike = Bike({
id: entry.getString("id"),
borrowed_time: entry.getUInt("borrowed_time"),
borrow_user: entry.getAddress("borrow_user"),
status: entry.getInt("status")
});
return bike;
}
function getBikeBorrowedUser(uint256 _id)public returns(address){
Table table = tf.openTable("TABLE_NAME");
string memory bikeid = _id.uintToBytes().bytesToString();
Entries entries = table.select(bikeid,table.newCondition());
require(entries.size()>0,"该单车不存在");
Entry entry = entries.get(0);
address user_address = entry.getAddress("borrow_user");
return user_address;
}
function getBikeBorrowedTime(uint256 _id)public returns(uint256){
Table table = tf.openTable("TABLE_NAME");
string memory bikeid = _id.uintToBytes().bytesToString();
Entries entries = table.select(bikeid,table.newCondition());
require(entries.size()>0,"该单车不存在");
Entry entry = entries.get(0);
uint256 time = entry.getUInt("borrowed_time");
return time;
}
function getBikeStatus(uint256 _id)public returns(int){
Table table = tf.openTable("TABLE_NAME");
string memory bikeid = _id.uintToBytes().bytesToString();
Entries entries = table.select(bikeid,table.newCondition());
require(entries.size()>0,"该单车不存在");
Entry entry = entries.get(0);
int _status = entry.getInt("status");
return _status;
}
function updateBikeStatus(uint256 _id,int _status)public returns(int){
Table table = tf.openTable("TABLE_NAME");
string memory bikeid = _id.uintToBytes().bytesToString();
Entries entries = table.select(bikeid,table.newCondition());
require(entries.size()>0,"该单车不存在");
Entry entry = entries.get(0);
entry.set("status",_status);
int count = table.update(bikeid,entry,table.newCondition());
return count;
}
function updateReturnBike(uint256 _id)public returns(int){
Table table = tf.openTable("TABLE_NAME");
string memory bikeid = _id.uintToBytes().bytesToString();
Entries entries = table.select(bikeid,table.newCondition());
require(entries.size()>0,"该单车不存在");
Entry entry = entries.get(0);
entry.set("borrow_user","");
entry.set("borrowed_time",uint256(0));
int count = table.update(bikeid,entry,table.newCondition());
return count;
}
function updateBikeBrrowed(uint256 _id,address _useraddress,uint256 _borrowedtime)public returns(int){
Table table = tf.openTable("TABLE_NAME");
string memory bikeid = _id.uintToBytes().bytesToString();
Entries entries = table.select(bikeid,table.newCondition());
require(entries.size()>0,"该单车不存在");
Entry entry = entries.get(0);
entry.set("borrow_user",_useraddress);
entry.set("borrowed_time",_borrowedtime);
entry.set("status",int(1));
int count = table.update(bikeid,entry,table.newCondition());
return count;
}
function remove(uint256 _id)public returns(int){
Table table = tf.openTable("TABLE_NAME");
string memory bikeid = _id.uintToBytes().bytesToString();
int count = table.remove(bikeid,table.newCondition());
return count;
}
}
UserStorage.sol
pragma solidity >=0.6.10;
pragma experimental ABIEncoderV2;
import "DataStrong.sol";
import "Table.sol";
import "AddressToString.sol";
contract UserStorage is DataStrong{
TableFactory tf;
using AddressToString for address;
constructor()public{
tf = TableFactory(0x1001);
tf.createTable("USER_TABLE","useraddress","name,role,balances,credit,status");
}
function addUser(address _useraddress,string memory _name,int256 _role)public returns(int){
Table table = tf.openTable("USER_TABLE");
string memory userid = _useraddress.addressToString();
Entries entries = table.select(userid,table.newCondition());
require(entries.size()<=0,"该用户已存在");
Entry entry = table.newEntry();
entry.set("useraddress",userid);
entry.set("name",_name);
entry.set("role",_role);
entry.set("balances",uint256(0));
entry.set("credit",int256(60));
entry.set("status",int256(0));
int count = table.insert(userid,entry);
return count;
}
function getUserDetail(address _useraddress)public returns(string memory,int,int,int){
Table table = tf.openTable("USER_TABLE");
string memory userid = _useraddress.addressToString();
Entries entries = table.select(userid,table.newCondition());
require(entries.size()>0,"该用户不存在");
Entry entry = entries.get(0);
return (entry.getString("name"),entry.getInt("balances"),entry.getInt("credit"),entry.getInt("status"));
}
function getUserRole(address _useraddress)public returns(int){
Table table = tf.openTable("USER_TABLE");
string memory userid = _useraddress.addressToString();
Entries entries = table.select(userid,table.newCondition());
require(entries.size()>0,"该用户不存在");
Entry entry = entries.get(0);
return entry.getInt("role");
}
function updateBalance(address _useraddress,int256 _balance)public returns(int){
Table table = tf.openTable("USER_TABLE");
string memory userid = _useraddress.addressToString();
User memory user;
Entries entries = table.select(userid,table.newCondition());
require(entries.size()>0,"该用户不存在");
Entry entry = table.newEntry();
entry.set("balances",_balance);
int count = table.update(userid,entry,table.newCondition());
return count;
}
function updateCreditPoint(address _useraddress,int256 _credit)public returns(int){
Table table = tf.openTable("USER_TABLE");
string memory userid = _useraddress.addressToString();
User memory user;
Entries entries = table.select(userid,table.newCondition());
require(entries.size()>0,"该用户不存在");
Entry entry = table.newEntry();
entry.set("credit",_credit);
int count = table.update(userid,entry,table.newCondition());
return count;
}
function getIsUser(address _useraddress)public returns(bool){
Table table = tf.openTable("USER_TABLE");
string memory userid = _useraddress.addressToString();
Entries entries = table.select(userid,table.newCondition());
if(entries.size()>0){
return true;
}else{
return false;
}
}
function removeUser(address _useraddress)public returns(int){
Table table = tf.openTable("USER_TABLE");
string memory userid = _useraddress.addressToString();
int count = table.remove(userid,table.newCondition());
return count;
}
}