From 5db4c8b120d1b98d1af56b6f00c3320ba212f31b Mon Sep 17 00:00:00 2001 From: luxcem Date: Sun, 23 Apr 2017 18:18:53 +0200 Subject: [PATCH] api urls for upvote/downvote/publish/reject --- apps/rp/api/views.py | 31 +++++++++++++++++++ apps/rp/migrations/0008_auto_20170423_1557.py | 29 +++++++++++++++++ apps/rp/urls.py | 5 +++ apps/rp/views/articles.py | 3 +- apps/rp/views/votes.py | 15 --------- 5 files changed, 67 insertions(+), 16 deletions(-) create mode 100644 apps/rp/migrations/0008_auto_20170423_1557.py diff --git a/apps/rp/api/views.py b/apps/rp/api/views.py index e8260de..5abe95e 100644 --- a/apps/rp/api/views.py +++ b/apps/rp/api/views.py @@ -1,4 +1,6 @@ from rest_framework import viewsets +from rest_framework.decorators import detail_route +from rest_framework.response import Response from rp.models import Article from .serializers import ArticleSerializer @@ -7,3 +9,32 @@ from .serializers import ArticleSerializer class ArticleViewSet(viewsets.ModelViewSet): queryset = Article.objects.all() serializer_class = ArticleSerializer + + def response_serialized_object(self, object): + return Response(self.serializer_class(object).data) + + @detail_route(methods=["post"], url_path="publish") + def publish(self, request, pk=None): + article = self.get_object() + article.status = "PUBLISHED" + article.save() + return self.response_serialized_object(article) + + @detail_route(methods=["post"], url_path="reject") + def reject(self, request, pk=None): + article = self.get_object() + article.status = "REJECTED" + article.save() + return self.response_serialized_object(article) + + @detail_route(methods=["post"], url_path="upvote") + def upvote(self, request, pk=None): + article = self.get_object() + article.upvote(username=request.user.username) + return self.response_serialized_object(article) + + @detail_route(methods=["post"], url_path="downvote") + def downvote(self, request, pk=None): + article = self.get_object() + article.downvote(username=request.user.username) + return self.response_serialized_object(article) diff --git a/apps/rp/migrations/0008_auto_20170423_1557.py b/apps/rp/migrations/0008_auto_20170423_1557.py new file mode 100644 index 0000000..0eae64c --- /dev/null +++ b/apps/rp/migrations/0008_auto_20170423_1557.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2017-04-23 15:57 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('rp', '0007_article_website'), + ] + + operations = [ + migrations.AlterModelOptions( + name='article', + options={'permissions': (('can_change_status', 'Can change article status'), ('can_change_priority', 'Can change article priority'), ('can_vote', 'Can vote articles')), 'verbose_name': 'Article', 'verbose_name_plural': 'Articles'}, + ), + migrations.AddField( + model_name='article', + name='priority', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='article', + name='status', + field=models.CharField(choices=[('PENDING', 'Pending'), ('PUBLISHED', 'Published'), ('REJECTED', 'Rejected')], default='PENDING', max_length=20, verbose_name='Status'), + ), + ] diff --git a/apps/rp/urls.py b/apps/rp/urls.py index 8e55da0..01251fa 100644 --- a/apps/rp/urls.py +++ b/apps/rp/urls.py @@ -8,6 +8,11 @@ urlpatterns = [ ArticleListFlux.as_view(), name="article-list" ), + url( + r"^article/list", + ArticleListFlux.as_view(), + name="article-list" + ), url( r"^votes/upvote/(?P\d+)/(?P\d+)$", upvote, diff --git a/apps/rp/views/articles.py b/apps/rp/views/articles.py index bdc7636..c60e89c 100644 --- a/apps/rp/views/articles.py +++ b/apps/rp/views/articles.py @@ -21,5 +21,6 @@ class ArticleListFlux(UDList): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["filter_view"] = self.kwargs.get("filter_view", "draft") - context["nb_draft"] = Article.objects.filter(und_score__gte=3, status="PENDING").count() + context["nb_draft"] = Article.objects.filter( + und_score__gte=3, status="PENDING").count() return context diff --git a/apps/rp/views/votes.py b/apps/rp/views/votes.py index 83affb9..359959b 100644 --- a/apps/rp/views/votes.py +++ b/apps/rp/views/votes.py @@ -1,20 +1,5 @@ from django.views.generic import ListView from django.contrib.contenttypes.models import ContentType -from django.http import HttpResponse - - -def upvote(request, content_type, object_id): - ct = ContentType.objects.get_for_id(content_type) - obj = ct.get_object_for_this_type(pk=object_id) - obj.upvote(username=request.user.username) - return HttpResponse({"success"}) - - -def downvote(request, content_type, object_id): - ct = ContentType.objects.get_for_id(content_type) - obj = ct.get_object_for_this_type(pk=object_id) - obj.downvote(username=request.user.username) - return HttpResponse({"success"}) class UDList(ListView): -- GitLab