Refactoring bulk user stories creation

remotes/origin/enhancement/email-actions
Anler Hp 2014-08-01 11:05:58 +02:00
parent 7c81fbbe97
commit 58cc11e3d4
3 changed files with 23 additions and 31 deletions

View File

@ -18,15 +18,12 @@ from django.db import transaction
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import status from rest_framework import status
from taiga.base import filters from taiga.base import filters, response
from taiga.base import exceptions as exc from taiga.base import exceptions as exc
from taiga.base.decorators import list_route from taiga.base.decorators import list_route
from taiga.base.decorators import action
from taiga.base.permissions import has_project_perm
from taiga.base.api import ModelCrudViewSet from taiga.base.api import ModelCrudViewSet
from taiga.projects.notifications import WatchedResourceMixin from taiga.projects.notifications import WatchedResourceMixin
@ -68,30 +65,18 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi
@list_route(methods=["POST"]) @list_route(methods=["POST"])
def bulk_create(self, request, **kwargs): def bulk_create(self, request, **kwargs):
bulk_stories = request.DATA.get('bulkStories', None) serializer = serializers.UserStoriesBulkSerializer(data=request.DATA)
if bulk_stories is None: if serializer.is_valid():
raise exc.BadRequest(_('bulkStories parameter is mandatory')) data = serializer.data
project = Project.objects.get(id=data["project_id"])
project_id = request.DATA.get('projectId', None)
if project_id is None:
raise exc.BadRequest(_('projectId parameter is mandatory'))
project = get_object_or_404(Project, id=project_id)
status_id = request.DATA.get('statusId', None)
if status_id:
status = get_object_or_404(UserStoryStatus, id=status_id)
else:
status = project.default_us_status
self.check_permissions(request, 'bulk_create', project) self.check_permissions(request, 'bulk_create', project)
user_stories = services.create_userstories_in_bulk( user_stories = services.create_userstories_in_bulk(
bulk_stories, callback=self.post_save, project=project, owner=request.user, data["bulk_stories"], project=project, owner=request.user,
status=status) status_id=data.get("status_id", project.default_us_status_id),
callback=self.post_save)
user_stories_serialized = self.serializer_class(user_stories, many=True) user_stories_serialized = self.serializer_class(user_stories, many=True)
return Response(data=user_stories_serialized.data) return response.Ok(user_stories_serialized.data)
return response.BadRequest(serializer.errors)
@list_route(methods=["POST"]) @list_route(methods=["POST"])
def bulk_update_order(self, request, **kwargs): def bulk_update_order(self, request, **kwargs):

View File

@ -20,6 +20,7 @@ from rest_framework import serializers
from taiga.base.serializers import PickleField, NeighborsSerializerMixin from taiga.base.serializers import PickleField, NeighborsSerializerMixin
from taiga.mdrender.service import render as mdrender from taiga.mdrender.service import render as mdrender
from taiga.projects.validators import ProjectExistsValidator
from . import models from . import models
@ -108,3 +109,9 @@ class NeighborUserStorySerializer(serializers.ModelSerializer):
model = models.UserStory model = models.UserStory
fields = ("id", "ref", "subject") fields = ("id", "ref", "subject")
depth = 0 depth = 0
class UserStoriesBulkSerializer(ProjectExistsValidator, serializers.Serializer):
project_id = serializers.IntegerField()
status_id = serializers.IntegerField(required=False)
bulk_stories = serializers.CharField()

View File

@ -70,9 +70,9 @@ def test_api_create_in_bulk_with_status(client):
project = f.create_project() project = f.create_project()
url = reverse("userstories-bulk-create") url = reverse("userstories-bulk-create")
data = { data = {
"bulkStories": "Story #1\nStory #2", "bulk_stories": "Story #1\nStory #2",
"projectId": project.id, "project_id": project.id,
"statusId": project.default_us_status.id "status_id": project.default_us_status.id
} }
client.login(project.owner) client.login(project.owner)