DGitDB.sol
1 pragma solidity ^0.4.8; 2 3 /** 4 * Contract that oracle github API 5 * 6 * GitHubRegistry is a storage contract 7 * 8 * By Ricardo Guilherme Schmidt 9 * Released under GPLv3 License 10 */ 11 12 import "lib/ethereans/management/Owned.sol"; 13 14 contract DGitDBI { 15 function addRepository(uint256 _id, uint256 _owner, string _name, string _full_name, address _addr); 16 function addUser(uint256 _id, string _login, uint8 _type, address _addr); 17 function setRepositoryAddress(uint256 _repositoryId, address _repositoryAddress); 18 function setRepositoryName(uint256 _repositoryId, string _full_name, string _name); 19 function setUserAddress(uint userId, address account); 20 function setUserName(uint256 _userId, string _name); 21 function getRepositoryId(string _full_name) constant returns (uint256); 22 function getRepositoryName(uint256 _id) constant returns (string); 23 function getRepositoryAddress(uint256 _id) constant returns(address); 24 function getRepositoryAddress(string _full_name) constant returns(address); 25 function getUserAddress(uint256 _id) constant returns(address); 26 function getUserAddress(string _login) constant returns(address); 27 function getClaimedHead(uint256 _repoid) constant returns (bytes20); 28 function getClaimedHead(string _full_name) constant returns (bytes20); 29 function getClaimedTail(uint256 _repoid) constant returns (bytes20); 30 function setClaimed(uint256 _repoid, bytes20 _head, bytes20 _tail, uint points); 31 function setPending(uint256 _repoid, uint256 _userid, uint256 _points); 32 function setPending(string _full_name, uint256 _userid, uint256 _points); 33 function claimPending(uint256 _repoid, uint256 _userid) returns (uint256 points); 34 } 35 36 contract DGitDB is DGitDBI, Owned { 37 38 mapping (string => uint256) repositoryNames; 39 mapping (string => uint256) userNames; 40 mapping (uint256 => Repository) repositories; 41 mapping (uint256 => User) users; 42 43 struct Repository { 44 uint256 owner; 45 string name; 46 string full_name; 47 address addr; 48 uint points; 49 bytes20 head; 50 bytes20 tail; 51 mapping (uint256 => uint256) pending; 52 } 53 54 55 struct User { 56 string login; 57 uint8 utype; 58 address addr; 59 } 60 61 function setClaimed(uint256 _repoid, bytes20 _head, bytes20 _tail, uint _points) 62 only_owner { 63 repositories[_repoid].head = _head; 64 repositories[_repoid].tail = _tail; 65 repositories[_repoid].points += _points; 66 } 67 function setPending(uint256 _repoid, uint256 _userid, uint256 _points){ 68 repositories[_repoid].pending[_userid] += _points; 69 } 70 function setPending(string _full_name, uint256 _userid, uint256 _points){ 71 repositories[repositoryNames[_full_name]].pending[_userid] += _points; 72 } 73 function claimPending(uint256 _repoid, uint256 _userid) returns (uint256 points){ 74 points = repositories[_repoid].pending[_userid]; 75 delete repositories[_repoid].pending[_userid]; 76 } 77 78 function getClaimedHead(uint256 _repoid) constant returns (bytes20){ 79 return repositories[_repoid].head; 80 } 81 function getClaimedHead(string _full_name) constant returns (bytes20){ 82 return repositories[repositoryNames[_full_name]].head; 83 } 84 function getClaimedTail(uint256 _repoid) constant returns (bytes20){ 85 return repositories[_repoid].tail; 86 } 87 88 function addRepository(uint256 _id, uint256 _owner, string _name, string _full_name, address _addr) only_owner { 89 repositories[_id] = Repository({owner:_owner,name:_name,full_name:_full_name,addr:_addr,points:0,head:0,tail:0}); 90 repositoryNames[_full_name] = _id; 91 } 92 93 function addUser(uint256 _id, string _login, uint8 _utype, address _addr) only_owner{ 94 users[_id] = User({login:_login,utype:_utype,addr:_addr}); 95 userNames[_login] = _id; 96 } 97 98 function setRepositoryAddress(uint256 _repositoryId, address _repositoryAddress) 99 only_owner { 100 repositories[_repositoryId].addr = _repositoryAddress; 101 } 102 103 function setUserAddress(uint userId, address account) 104 only_owner{ 105 users[userId].addr = account; 106 } 107 function setRepositoryName(uint256 _repositoryId, string _full_name, string _name) 108 only_owner { 109 delete repositoryNames[repositories[_repositoryId].full_name]; 110 repositoryNames[_full_name] = _repositoryId; 111 repositories[_repositoryId].full_name = _full_name; 112 repositories[_repositoryId].name = _full_name; 113 } 114 115 function setUserName(uint256 _userId, string _name) 116 only_owner { 117 delete userNames[users[_userId].login]; 118 userNames[_name] = _userId; 119 users[_userId].login = _name; 120 } 121 122 function getUserAddress(uint256 _id) constant returns(address){ 123 return users[_id].addr; 124 } 125 function getUserAddress(string _login) constant returns(address){ 126 return users[userNames[_login]].addr; 127 } 128 function getRepositoryAddress(uint256 _id) constant returns(address){ 129 return repositories[_id].addr; 130 } 131 function getRepositoryAddress(string _full_name) constant returns(address){ 132 return repositories[repositoryNames[_full_name]].addr; 133 } 134 function getRepositoryId(string _full_name) constant returns (uint256){ 135 return repositoryNames[_full_name]; 136 } 137 function getRepositoryName(uint256 _id) constant returns (string){ 138 return repositories[_id].full_name; 139 } 140 141 } 142 143 library DBFactory { 144 function newStorage() returns (DGitDBI){ 145 return new DGitDB(); 146 } 147 }