diff options
| author | Maksim A. Boyko <maksim.a.boyko@gmail.com> | 2012-07-30 15:58:33 -0400 |
|---|---|---|
| committer | Maksim A. Boyko <maksim.a.boyko@gmail.com> | 2012-07-30 15:58:33 -0400 |
| commit | 988bcb92e1dfb8ae5ad138565693fb6c7a2dfe49 (patch) | |
| tree | 8ccfd2524df4a780d0b11ed2409c00c8f82850cf /backend | |
| parent | 68abe17c3babeef6afe933fd57387ba930105e06 (diff) | |
Backend: Add api_user_videos, api_user_likes
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/models.py | 4 | ||||
| -rw-r--r-- | backend/views.py | 58 |
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): |
