Refactoring bulk user stories creation
parent
7c81fbbe97
commit
58cc11e3d4
|
@ -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):
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue