/ contracts / src / DGitDB.sol
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  }