Sugar Network/API: Difference between revisions

Line 23: Line 23:
== Objects ==
== Objects ==


The common ''COMMAND''s are:
=== Common actions ===


/'''create'''
Actions might be restricted for particular object, see the corresponding section for detailed information.
 
* {{Code|/<OBJECT>/'''create'''}}


Create new ''OBJECT'' item.
Create new ''OBJECT'' item.
Inputs:
Inputs:
:* {{Code|ctime}} ''int'', the UNIX seconds time of entry creation; optional, will be set on a server side otherwise;
:* {{Code|ctime}}, ''int''<br>the UNIX seconds time of entry creation; optional, will be set on a server side otherwise;
:* {{Code|mtime}} ''int'', the UNIX seconds time of entry modification; optional, will be set on a server side otherwise;
:* {{Code|mtime}}, ''int''<br>the UNIX seconds time of entry modification; optional, will be set on a server side otherwise;
 
Returns:
Returns:
:* {{Code|guid}} ''str'', globally unique identifier that specifies created item;
:* {{Code|guid}}, ''str''<br>globally unique identifier that specifies created item;


  /'''update'''?guid=<>
  /<OBJECT>/'''update'''?guid=<>


Modify the specified item.
Modify the specified ''OBJECT'' item.


Inputs:
Inputs:
: Keys that need to be modified.
: Keys that need to be modified.


  /'''delete'''?guid=<>
  /<OBJECT>/'''delete'''?guid=<>
 
Delete the specified ''OBJECT'' item. The real destroying won't happen, the item will be hidden. The garbage collection of hidden items will be processed by Network administrators.


Delete the specified item. The real destroying won't happen, the item will be hidden. The garbage collection of hidden items will be processed by Network administrators.
/<OBJECT>/'''find'''?[query=<>][&offset=<>][&limit=<>][&properties=<PROP>[,..]][&order_by=<nowiki>[+|-]</nowiki><PROP>[,..]]


/'''find'''?[query=<>][&offset=<>][&limit=<>][&properties=<PROP>[,..]][&order_by=<nowiki>[+|-]</nowiki><PROP>[,..]]
Find ''OBJECT'' items.


Find items.
Where:
Where:
:* {{Code|query}} ''str'', search request in [http://xapian.org/docs/queryparser.html Xapian] notation;
:* {{Code|query}}, ''str''<br>search request in [http://xapian.org/docs/queryparser.html Xapian] notation;
:* {{Code|offset}} ''int'', start index to return entries from;
:* {{Code|offset}}, ''int''<br>start index to return entries from;
:* {{Code|limit}} ''int'', do not return more then specified value;
:* {{Code|limit}}, ''int''<br>do not return more then specified value;
:* {{Code|properties}} ''str'', coma separated list of ''OBJECT'' properties to return; by default, return all properties;
:* {{Code|properties}}, ''str''<br>coma separated list of ''OBJECT'' properties to return; by default, return all properties;
:* {{Code|order_by}} ''str'', coma separated list of ''OBJECT'' properties to sort the resulting list; if an property starts with the {{Code|-}}, the order is descending, otherwise it is ascending;
:* {{Code|order_by}}, ''str''<br>coma separated list of ''OBJECT'' properties to sort the resulting list; if an property starts with the {{Code|-}}, the order is descending, otherwise it is ascending;
 
Inputs:
Inputs:
:* A dictionary with ''OBJECT'''s properties to restrict the resulting list.
:* A dictionary with ''OBJECT'''s properties to restrict the resulting list.
Returns:
Returns:
:* An array of dictionaries with ''OBJECT'' properties, dictionaries contain at least {{Code|guid}} property.
:* An array of dictionaries with ''OBJECT'' properties, dictionaries contain at least {{Code|guid}} property.


  /'''get'''?guid=<>[&properties=<PROP>[,..]]
  /<OBJECT>/'''get'''?guid=<>[&properties=<PROP>[,..]]
 
Return ''OBJECT'' properties the of particular item.


Return properties the of particular item.
Where:
Where:
:* {{Code|properties}} ''str'', coma separated list of ''OBJECT'' properties to return; by default, return all properties.
:* {{Code|properties}}, ''str''<br>coma separated list of ''OBJECT'' properties to return; by default, return all properties.
 
Returns:
Returns:
:* A dictionary with ''OBJECT'' properties that contains at least {{Code|guid}} property.
:* A dictionary with ''OBJECT'' properties that contains at least {{Code|guid}} property.


=== Player ===
=== player ===
 
Properties:
:* {{Code|nickname}}, ''str'', ''read''<br>set by Sugar Shell;
:* {{Code|color}}, ''str'', ''read''<br>colors pair in format {{Code|#RRGGBB,#RRGGBB}}, set by Sugar Shell.
 
Calculated properties:
:* {{Code|reputation}}, ''int'', ''read''<br>current ''player'''s reputation based on:
:** direct votes from other players,
:** votes given to objects where the ''player'' is a creator;
:* {{Code|vote}}, ''bool'', ''read'', ''write''<br>did url requester voted for the current object or not;
 
Events:
 
Actions:
 
* '''create''' and '''destroy''' are not allowed;
* '''update''' is allowed only for a user who is associated with a ''player''.
 
/player/'''send'''?guid=<PLAYER>
 
Send private message to the ''PLAYER'', sender should be different to the ''PLAYER''.
 
Inputs:
: A dictionary with [[#event|event]] properties.
 
=== project ===
 
Properties:
:* {{Code|title}}, ''str'', ''read'', ''write'' only for the team members<br>one line title;
:* {{Code|description}}, ''str'', ''read'', ''write'' only for the team members<br>multi lined description;
:* {{Code|creator}}, ''guid'', ''read''<br>the ''player'' who created the object;
:* {{Code|type}}, ''str'', ''read'', ''write'' only for the team members<br>the project type:
:** {{Code|general}},
:** {{Code|activity}},
:** {{Code|wiki}},
:** {{Code|gallery}};
:* {{Code|zoom}}, ''str'', ''read'', ''write'' only for the team members<br>Network Zoom level that project belongs:
:** {{Code|worldwide}},
:** {{Code|neighbourhood}},
:** {{Code|private}}.
 
Calculated properties:
:* {{Code|reputation}}, ''int'', ''read''<br>current ''project'''s reputation based on:
:** direct votes from other players,
:** votes given to related objects if theirs ''respect'' property is empty;
:* {{Code|vote}}, ''bool'', ''read'', ''write''<br>did url requester voted for the current object or not.
 
Many-to-many relations:
:* ''team'', relates to ''player''.
 
Actions:
 
* right after '''create''' call, the creator ''player'' will be the only ''team'' member;
* '''update''' and '''destroy''' are allowed only for ''team'' members.
 
/project/'''add_member'''?guid=<PROJECT>&member=<PLAYER>
 
Make a ''PLAYER'' the ''team'' member. Only ''team'' members can call this action.
 
/project/'''remove_member'''?guid=<PROJECT>&member=<PLAYER>
 
Remove ''PLAYER'' from the to the ''team''. Only ''team'' member can call this action if he is not the ''PLAYER'' and ''PLAYER'' is not the same as ''creator''.
 
=== question ===
 
Properties:
:* {{Code|title}}, ''str'', ''read'', ''write'' only for creator<br>one line title;
:* {{Code|description}}, ''str'', ''read'', ''write'' only for creator<br>multi lined description;
:* {{Code|creator}}, ''guid'', ''read''<br>the ''player'' who created the object;
:* {{Code|respect}}, ''guid'', ''read'', ''create''<br>what ''player'' needs to be respected on getting vote to this object, if empty, the ''project'' itself will be voted;
:* {{Code|solution}}, ''guid'', ''read'', ''write'' only by creator<br>the ''solution'' which solves the object.
 
Calculated properties:
:* {{Code|reputation}}, ''int'', ''read''<br>current object's reputation;
:* {{Code|vote}}, ''bool'', ''read'', ''write''<br>did url requester voted for the current object or not;
:* {{Code|implementation_status}}, ''str'', ''read''<br>if ''question'' has an associated ''objective'', this ''objective'''s status is a status of the ''question'', otherwise the property is empty.
 
=== idea ===
 
Properties:
:* {{Code|title}}, ''str'', ''read'', ''write'' only for creator<br>one line title;
:* {{Code|description}}, ''str'', ''read'', ''write'' only for creator<br>multi lined description;
:* {{Code|creator}}, ''guid'', ''read''<br>the ''player'' who created the object;
:* {{Code|respect}}, ''guid'', ''read'', ''create''<br>what ''player'' needs to be respected on getting vote to this object, if empty, the ''project'' itself will be voted.
 
Calculated properties:
:* {{Code|reputation}}, ''int'', ''read''<br>current object's reputation;
:* {{Code|vote}}, ''bool'', ''read'', ''write''<br>did url requester voted for the current object or not;
:* {{Code|implementation_status}}, ''str'', ''read''<br>if ''idea'' has an associated ''objective'', this ''objective'''s status is a status of the ''idea'', otherwise the property is empty.
 
=== problem ===
 
Properties:
:* {{Code|title}}, ''str'', ''read'', ''write'' only for creator<br>one line title;
:* {{Code|description}}, ''str'', ''read'', ''write'' only for creator<br>multi lined description;
:* {{Code|creator}}, ''guid'', ''read''<br>the ''player'' who created the object;
:* {{Code|respect}}, ''guid'', ''read'', ''create''<br>what ''player'' needs to be respected on getting vote to this object, if empty, the ''project'' itself will be voted;
:* {{Code|solution}}, ''guid'', ''read'', ''write'' only by creator<br>the ''solution'' which solves the object.
 
Calculated properties:
:* {{Code|reputation}}, ''int'', ''read''<br>current object's reputation;
:* {{Code|vote}}, ''bool'', ''read'', ''write''<br>did url requester voted for the current object or not;
:* {{Code|implementation_status}}, ''str'', ''read''<br>if ''problem'' has an associated ''objective'', this ''objective'''s status is a status of the ''problem', otherwise the property is empty.
 
=== solution ===
 
The solution for ''question''/''idea''/''problem'' objects.
 
Properties:
:* {{Code|text}}, ''wikitext'', ''read'', ''write'' only for creator<br>solution text;
:* {{Code|creator}}, ''guid'', ''read''<br>the ''player'' who created the object;
:* {{Code|respect}}, ''guid'', ''read'', ''create''<br>what ''player'' needs to be respected on getting vote to this object, if empty, the ''project'' itself will be voted.
 
Calculated properties:
:* {{Code|reputation}}, ''int'', ''read''<br>current object's reputation;
:* {{Code|vote}}, ''bool'', ''read'', ''write''<br>did url requester voted for the current object or not.
 
=== wiki ===
 
Properties:
:* {{Code|title}}, ''str'', ''read'', ''write'' only for creator<br>one line title;
:* {{Code|description}}, ''str'', ''read'', ''write'' only for creator<br>multi lined description;
:* {{Code|creator}}, ''guid'', ''read''<br>the ''player'' who created the object;
:* {{Code|respect}}, ''guid'', ''read'', ''create''<br>what ''player'' needs to be respected on getting vote to this object, if empty, the ''project'' itself will be voted;
:* {{Code|reputation}}, ''int'', ''read''<br>current object's reputation;
:* {{Code|vote}}, ''bool'', ''read'', ''write''<br>did url requester voted for the current object or not;
 
=== gallery ===
 
Properties:
:* {{Code|title}}, ''str'', ''read'', ''write'' only for creator<br>one line title;
:* {{Code|description}}, ''str'', ''read'', ''write'' only for creator<br>multi lined description;
:* {{Code|creator}}, ''guid'', ''read''<br>the ''player'' who created the object;
:* {{Code|respect}}, ''guid'', ''read'', ''create''<br>what ''player'' needs to be respected on getting vote to this object, if empty, the ''project'' itself will be voted;
:* {{Code|reputation}}, ''int'', ''read''<br>current object's reputation;
:* {{Code|vote}}, ''bool'', ''read'', ''write''<br>did url requester voted for the current object or not;


=== Project ===
=== objective ===


=== Question ===
Properties:
:* {{Code|title}}, ''str'', ''read'', ''write'' only for the team members<br>one line title;
:* {{Code|description}}, ''str'', ''read'', ''write'' only for the team members<br>multi lined description;
:* {{Code|creator}}, ''guid'', ''read''<br>the ''player'' who created the object;
:* {{Code|respect}}, ''guid'', ''read'', ''create''<br>what ''player'' needs to be respected on getting vote to this object, if empty, the ''project'' itself will be voted;
:* {{Code|reputation}}, ''int'', ''read''<br>current object's reputation;
:* {{Code|vote}}, ''bool'', ''read'', ''write''<br>did url requester voted for the current object or not;


=== Idea ===
=== release ===


=== Problem ===
=== comment ===


=== Wiki ===
=== event ===


=== Gallery ===


=== Release ===
== Many-to-many relations ==


=== Objective ===
== Changelog ==


=== Comment ===
This section shows how API is evolving. The API state is being described by a version. The major number is being changed only if backwards compatibility was broken.


=== Event ===
'''1.0'''
: Not yet released API.


== Notifications ==
== Notifications ==