Skip to content

Commit

Permalink
[api] Add more details in the messaging api (from_id and to_id). Upda…
Browse files Browse the repository at this point in the history
…te documentation.
  • Loading branch information
alexef committed Sep 27, 2013
1 parent d137a56 commit 6582df5
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 11 deletions.
24 changes: 23 additions & 1 deletion docs/api/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -462,14 +462,36 @@ Messages
* all
* sent
* recv
Each message contains the subject, text, date, sender and receiver (both names and ids) and reply_to id.

The `reply_to` parameter refers to another message (not an user), for conversations. If it's null, then the message
is the first in a conversation.

**Example response**:
.. sourcecode:: javascript

[
{
"from": "Gică Popescu",
"from_id": 2,
"to": "admin",
"to_id": 1,
"id": 4,
"subject": "Re: Ce faci măi?",
"date": "2013-09-27T18:02:47.364",
"text": "bine facem",
"read": false,
"reply_to": 3
}
]

.. http:post:: /api/messages/send/
Sends a message, using POST parameters:
* receiver (*mandatory, id or username)
* text (*mandatory)
* subject
* reply_to (id of the message to reply_to)
* reply_to (id of the message to reply_to, not of the sender)
.. http:post:: /api/messages/(action)/(msg_id)/
Expand Down
31 changes: 21 additions & 10 deletions wouso/interface/api/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def read(self, request, type=None):

if type == 'list':
return [u.nickname for u in online_last10]
# default, more info
# default, more info
return [{'nickname': u.nickname, 'first_name': u.user.first_name, 'last_name': u.user.last_name,
'id': u.id, 'last_seen': u.last_seen} for u in online_last10]

Expand Down Expand Up @@ -129,7 +129,7 @@ def read(self, request, player_id=None):
'title': player.level.title,
'image': player.level.image,
'id': player.level.id,
} if player.level else {}
} if player.level else {}

group = player.group
gold = player.coins['gold'] if 'gold' in player.coins.keys() else 0
Expand All @@ -151,7 +151,7 @@ def read(self, request, player_id=None):
'level': level,
'level_progress': God.get_level_progress(player),
'rank': topuser.position,
}
}


class ChangeNickname(BaseHandler):
Expand Down Expand Up @@ -199,7 +199,7 @@ class BazaarHandler(BaseHandler):
allowed_methods = ('GET',)
object_name = 'spells'
fields = ('name', 'title', 'description', 'available', 'due_days', 'type', 'mass', 'level_required', 'image_url',
'price', 'id')
'price', 'id')

def get_queryset(self, user=None):
return Spell.objects.all()
Expand Down Expand Up @@ -251,7 +251,7 @@ def create(self, request):
else:
player.magic.add_spell(spell)
scoring.score(player, None, 'buy-spell', external_id=spell.id,
price=spell.price)
price=spell.price)
SpellHistory.bought(player, spell)
return {'success': True}

Expand Down Expand Up @@ -290,6 +290,19 @@ def create(self, request, coin, tocoin):
class Messages(BaseHandler):
LIMIT = 100

def to_dict(self, m):
"""
:param m: Message instance
:return: dictionary
"""
return {'id': m.id, 'date': m.timestamp,
'from': unicode(m.sender), 'from_id': m.sender_id,
'to': unicode(m.receiver), 'to_id': m.receiver_id,
'text': m.text,
'subject': m.subject, 'reply_to': m.reply_to.id if m.reply_to else None,
'read': m.read
}

def read(self, request, type='all'):
player = request.user.get_profile()
msguser = player.get_extension(MessagingUser)
Expand All @@ -301,9 +314,7 @@ def read(self, request, type='all'):
qs = Message.objects.filter(receiver=msguser).exclude(archived=True)[:self.LIMIT]
else:
return []
return [{'id': m.id, 'date': m.timestamp, 'from':unicode(m.sender), 'to':unicode(m.receiver), 'text': m.text,
'subject': m.subject, 'reply_to': m.reply_to.id if m.reply_to else None,
'read': m.read} for m in qs]
return [self.to_dict(m) for m in qs]

class MessagesSender(BaseHandler):
allowed_methods = ('POST',)
Expand Down Expand Up @@ -484,7 +495,7 @@ def read(self, request, group_id, type=None):
'rank': gh.position,
'activity': '%sactivity/%s' % (fp, q),
'evolution': '%sevolution/%s' % (fp, q),
}
}
elif type == 'activity':
qs = Activity.get_group_activiy(group)
return [dict(user_from=unicode(a.user_from), user_to=unicode(a.user_to), message=a.message, date=a.timestamp) for a in qs]
Expand Down Expand Up @@ -514,7 +525,7 @@ def read(self, request):
class MembersMixin(object):
def to_dict(self, player):
return dict(first_name=player.user.first_name, last_name=player.user.last_name, id=player.id, points=player.points,
level=player.level_no, avatar=player_avatar(player), display_name=unicode(player))
level=player.level_no, avatar=player_avatar(player), display_name=unicode(player))


class RaceMembersHandler(BaseHandler, MembersMixin):
Expand Down

0 comments on commit 6582df5

Please sign in to comment.