diff --git a/app/apps/api/serializers.py b/app/apps/api/serializers.py index 220b4642cad65332ddbcfe54e75cdc545788d109..8076d780b3ad5baaf96cd3999fac2297f4f9d52a 100644 --- a/app/apps/api/serializers.py +++ b/app/apps/api/serializers.py @@ -11,7 +11,8 @@ from easy_thumbnails.files import get_thumbnailer from api.fields import DisplayChoiceField from users.models import User -from core.models import (Document, +from core.models import (Project, + Document, DocumentPart, Block, Line, @@ -58,6 +59,12 @@ class ScriptSerializer(serializers.ModelSerializer): fields = '__all__' +class ProjectSerializer(serializers.ModelSerializer): + class Meta: + model = Project + fields = '__all__' + + class PartMoveSerializer(serializers.ModelSerializer): index = serializers.IntegerField() @@ -112,11 +119,18 @@ class DocumentSerializer(serializers.ModelSerializer): valid_block_types = BlockTypeSerializer(many=True, read_only=True) valid_line_types = LineTypeSerializer(many=True, read_only=True) parts_count = serializers.SerializerMethodField() + project = serializers.SlugRelatedField(slug_field='slug', + queryset=Project.objects.all()) class Meta: model = Document - fields = ('pk', 'name', 'transcriptions', 'main_script', 'read_direction', - 'valid_block_types', 'valid_line_types', 'parts_count') + fields = ('pk', 'name', 'project', 'transcriptions', 'main_script', 'read_direction', + 'valid_block_types', 'valid_line_types', 'parts_count', + 'created_at', 'updated_at') + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['project'].queryset = Project.objects.for_user(self.context['user']) def get_parts_count(self, document): return document.parts.count() diff --git a/app/apps/api/urls.py b/app/apps/api/urls.py index 928ec985a8265e478e0bdf05e380b396641746cc..e2a8c20f3f14c9c52ac077566a338181cc81c839 100644 --- a/app/apps/api/urls.py +++ b/app/apps/api/urls.py @@ -2,7 +2,8 @@ from django.urls import include, path from rest_framework_nested import routers from rest_framework.authtoken import views -from api.views import (DocumentViewSet, +from api.views import (ProjectViewSet, + DocumentViewSet, UserViewSet, PartViewSet, DocumentTranscriptionViewSet, @@ -16,6 +17,7 @@ from api.views import (DocumentViewSet, router = routers.DefaultRouter() router.register(r'scripts', ScriptViewSet) +router.register(r'projects', ProjectViewSet) router.register(r'documents', DocumentViewSet) router.register(r'user', UserViewSet) router.register(r'types/block', BlockTypeViewSet) diff --git a/app/apps/api/views.py b/app/apps/api/views.py index f33ba76d4db9f3d9c3e0acd681d53083e812252e..1870d0e1e24c10c9e5d887dbff2b665bb95b1376 100644 --- a/app/apps/api/views.py +++ b/app/apps/api/views.py @@ -16,6 +16,7 @@ from rest_framework.pagination import PageNumberPagination from rest_framework.serializers import PrimaryKeyRelatedField from api.serializers import (UserOnboardingSerializer, + ProjectSerializer, DocumentSerializer, PartDetailSerializer, PartSerializer, @@ -35,7 +36,8 @@ from api.serializers import (UserOnboardingSerializer, TranscribeSerializer, OcrModelSerializer) -from core.models import (Document, +from core.models import (Project, + Document, DocumentPart, Block, Line, @@ -75,6 +77,12 @@ class ScriptViewSet(ReadOnlyModelViewSet): serializer_class = ScriptSerializer +class ProjectViewSet(ModelViewSet): + queryset = Project.objects.all() + serializer_class = ProjectSerializer + paginate_by = 10 + + class DocumentViewSet(ModelViewSet): queryset = Document.objects.all() serializer_class = DocumentSerializer @@ -86,6 +94,11 @@ class DocumentViewSet(ModelViewSet): Prefetch('valid_line_types', queryset=LineType.objects.order_by('name')), ) + def get_serializer_context(self): + context = super().get_serializer_context() + context['user'] = self.request.user + return context + def form_error(self, msg): return Response({'status': 'error', 'error': msg}, status=400) diff --git a/app/apps/core/migrations/0047_auto_20210510_1512.py b/app/apps/core/migrations/0047_auto_20210510_1512.py new file mode 100644 index 0000000000000000000000000000000000000000..e0b7560b07481f384ba4f2565cbb48015ab1e706 --- /dev/null +++ b/app/apps/core/migrations/0047_auto_20210510_1512.py @@ -0,0 +1,36 @@ +# Generated by Django 2.2.20 on 2021-05-10 15:12 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0046_data_share_doc_to_proj'), + ] + + operations = [ + migrations.AlterModelOptions( + name='project', + options={'ordering': ('-updated_at',)}, + ), + migrations.RemoveField( + model_name='document', + name='shared_with_groups', + ), + migrations.RemoveField( + model_name='document', + name='shared_with_users', + ), + migrations.AlterField( + model_name='document', + name='project', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='core.Project'), + ), + migrations.AlterField( + model_name='document', + name='workflow_state', + field=models.PositiveSmallIntegerField(choices=[(0, 'Draft'), (2, 'Published'), (3, 'Archived')], default=0), + ), + ]