[backport] Adding end points for getting projects by slug, tasks, userstories and issues by ref
parent
0d70eb088a
commit
e1183deaa6
|
@ -60,6 +60,12 @@ class ProjectViewSet(ModelCrudViewSet):
|
|||
qs = models.Project.objects.all()
|
||||
return attach_votescount_to_queryset(qs, as_field="stars_count")
|
||||
|
||||
@list_route(methods=["GET"])
|
||||
def by_slug(self, request):
|
||||
slug = request.QUERY_PARAMS.get("slug", None)
|
||||
project = get_object_or_404(models.Project, slug=slug)
|
||||
return self.retrieve(request, pk=project.pk)
|
||||
|
||||
@detail_route(methods=["GET", "PATCH"])
|
||||
def modules(self, request, pk=None):
|
||||
project = self.get_object()
|
||||
|
|
|
@ -153,6 +153,13 @@ class IssueViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
|
|||
if obj.type and obj.type.project != obj.project:
|
||||
raise exc.PermissionDenied(_("You don't have permissions to set this type to this issue."))
|
||||
|
||||
@list_route(methods=["GET"])
|
||||
def by_ref(self, request):
|
||||
ref = request.QUERY_PARAMS.get("ref", None)
|
||||
project_id = request.QUERY_PARAMS.get("project", None)
|
||||
issue = get_object_or_404(models.Issue, ref=ref, project_id=project_id)
|
||||
return self.retrieve(request, pk=issue.pk)
|
||||
|
||||
@list_route(methods=["POST"])
|
||||
def bulk_create(self, request, **kwargs):
|
||||
serializer = serializers.IssuesBulkSerializer(data=request.DATA)
|
||||
|
|
|
@ -40,6 +40,7 @@ class CanLeaveProject(PermissionComponent):
|
|||
|
||||
class ProjectPermission(TaigaResourcePermission):
|
||||
retrieve_perms = HasProjectPerm('view_project')
|
||||
by_slug_perms = HasProjectPerm('view_project')
|
||||
create_perms = IsAuthenticated()
|
||||
update_perms = IsProjectOwner()
|
||||
partial_update_perms = IsProjectOwner()
|
||||
|
|
|
@ -236,6 +236,7 @@ class ProjectSerializer(ModelSerializer):
|
|||
my_permissions = serializers.SerializerMethodField("get_my_permissions")
|
||||
i_am_owner = serializers.SerializerMethodField("get_i_am_owner")
|
||||
tags_colors = TagsColorsField(required=False)
|
||||
users = serializers.SerializerMethodField("get_users")
|
||||
|
||||
class Meta:
|
||||
model = models.Project
|
||||
|
@ -256,6 +257,9 @@ class ProjectSerializer(ModelSerializer):
|
|||
return is_project_owner(self.context["request"].user, obj)
|
||||
return False
|
||||
|
||||
def get_users(self, obj):
|
||||
return UserSerializer(obj.members.all(), many=True).data
|
||||
|
||||
def validate_total_milestones(self, attrs, source):
|
||||
"""
|
||||
Check that total_milestones is not null, it's an optional parameter but
|
||||
|
|
|
@ -64,6 +64,13 @@ class TaskViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
|
|||
if obj.milestone and obj.user_story and obj.milestone != obj.user_story.milestone:
|
||||
raise exc.WrongArguments(_("You don't have permissions for add/modify this task."))
|
||||
|
||||
@list_route(methods=["GET"])
|
||||
def by_ref(self, request):
|
||||
ref = request.QUERY_PARAMS.get("ref", None)
|
||||
project_id = request.QUERY_PARAMS.get("project", None)
|
||||
task = get_object_or_404(models.Task, ref=ref, project_id=project_id)
|
||||
return self.retrieve(request, pk=task.pk)
|
||||
|
||||
@list_route(methods=["POST"])
|
||||
def bulk_create(self, request, **kwargs):
|
||||
serializer = serializers.TasksBulkSerializer(data=request.DATA)
|
||||
|
|
|
@ -95,6 +95,13 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi
|
|||
|
||||
super().post_save(obj, created)
|
||||
|
||||
@list_route(methods=["GET"])
|
||||
def by_ref(self, request):
|
||||
ref = request.QUERY_PARAMS.get("ref", None)
|
||||
project_id = request.QUERY_PARAMS.get("project", None)
|
||||
userstory = get_object_or_404(models.UserStory, ref=ref, project_id=project_id)
|
||||
return self.retrieve(request, pk=userstory.pk)
|
||||
|
||||
@list_route(methods=["POST"])
|
||||
def bulk_create(self, request, **kwargs):
|
||||
serializer = serializers.UserStoriesBulkSerializer(data=request.DATA)
|
||||
|
|
|
@ -45,6 +45,13 @@ class WikiViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
|
|||
filter_backends = (filters.CanViewWikiPagesFilterBackend,)
|
||||
filter_fields = ("project", "slug")
|
||||
|
||||
@list_route(methods=["GET"])
|
||||
def by_slug(self, request):
|
||||
slug = request.QUERY_PARAMS.get("slug", None)
|
||||
project_id = request.QUERY_PARAMS.get("project", None)
|
||||
wiki_page = get_object_or_404(models.WikiPage, slug=slug, project_id=project_id)
|
||||
return self.retrieve(request, pk=wiki_page.pk)
|
||||
|
||||
@list_route(methods=["POST"])
|
||||
def render(self, request, **kwargs):
|
||||
content = request.DATA.get("content", None)
|
||||
|
|
Loading…
Reference in New Issue