summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-07-30 15:58:33 -0400
committerMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-07-30 15:58:33 -0400
commit988bcb92e1dfb8ae5ad138565693fb6c7a2dfe49 (patch)
tree8ccfd2524df4a780d0b11ed2409c00c8f82850cf /backend
parent68abe17c3babeef6afe933fd57387ba930105e06 (diff)
Backend: Add api_user_videos, api_user_likes
Diffstat (limited to 'backend')
-rw-r--r--backend/models.py4
-rw-r--r--backend/views.py58
2 files changed, 56 insertions, 6 deletions
diff --git a/backend/models.py b/backend/models.py
index 51efb82..414d043 100644
--- a/backend/models.py
+++ b/backend/models.py
@@ -5,6 +5,7 @@ from django.db import models
from django.contrib import auth
from django.contrib import admin
+
class SJSettingsModel(models.Model):
""" ScannerJammer abstract settings model
"""
@@ -110,6 +111,9 @@ class SJVideo(SJSiteModel):
class Meta:
verbose_name = "SJ Video"
+ def __unicode__(self):
+ return self.title
+
class SJChat(SJSiteModel):
""" ScannerJammer chat model
"""
diff --git a/backend/views.py b/backend/views.py
index 1311382..fa1f761 100644
--- a/backend/views.py
+++ b/backend/views.py
@@ -8,14 +8,19 @@ from django.template import loader
from django.template import Context
from django.shortcuts import render_to_response
from django.conf import settings
+from django.db.models import Q
from datetime import datetime
import sha
from backend.models import SJUserProfile
+from backend.models import SJVideo
+from backend.models import SJLike
API_HEADER = '#@scanjam 0.3b\n'
+ROOM_VIDEO_LOG_SIZE = 50
+
#
# Common funtions
#
@@ -224,23 +229,64 @@ def api_auth_password(request):
@require_POST
def api_user_videos(request):
- """ Public API
+ """ Get list of user videos. Public API
"""
- form_fields = ['user', 'start']
+ form_fields = ['user']
response = check_form_fields(request, form_fields)
if response:
return response
- return HttpResponse('Not implemented yet!\n')
+ try:
+ query = Q(user=auth.models.User.objects.get(id=request.POST['user']))
+ except auth.models.User.DoesNotExist:
+ return api_error_headers('no such user')
+ except:
+ return api_error_headers('db error')
+ if 'start' in request.POST:
+ try:
+ timestamp = float(request.POST['start'])
+ query = query & Q(date__lte=datetime.fromtimestamp(timestamp))
+ except:
+ pass
+ videos = SJVideo.objects.filter(query).order_by('-date')[0:ROOM_VIDEO_LOG_SIZE]
+ if not videos:
+ return api_error_headers('no videos')
+ response = api_ok_headers()
+ response.write('\n'.join(['\t'.join([str(v.id),
+ str(v.date),
+ str(v.user.id),
+ v.user.username,
+ v.url,
+ v.title]) for v in videos]))
+ return response
@require_POST
def api_user_likes(request):
- """ Public API
+ """ Get list of liked videos. Public API
"""
- form_fields = ['user', 'start']
+ form_fields = ['user']
response = check_form_fields(request, form_fields)
if response:
return response
- return HttpResponse('Not implemented yet!\n')
+ try:
+ query = Q(sjlike__user=auth.models.User.objects.get(id=request.POST['user']))
+ except auth.models.User.DoesNotExist:
+ return api_error_headers('no such user')
+ except:
+ return api_error_headers('db error')
+ if 'start' in request.POST:
+ try:
+ timestamp = float(request.POST['start'])
+ query = query & Q(date__lte=datetime.fromtimestamp(timestamp))
+ except:
+ pass
+ videos = SJVideo.objects.filter(query).order_by('-date')[0:ROOM_VIDEO_LOG_SIZE]
+ if not videos:
+ return api_error_headers('no videos')
+ response = api_ok_headers()
+ response.write('\n'.join(['\t'.join([str(v.user.id),
+ str(v.id),
+ str(v.date)]) for v in videos]))
+ return response
@require_POST
def api_user_top(request):