You've already forked opc-backend
70 lines
3.1 KiB
Python
70 lines
3.1 KiB
Python
|
|
from rest_framework import serializers
|
||
|
|
from .models import Task, TaskApplication, TaskInvitation, DeliveryRecord
|
||
|
|
|
||
|
|
class DeliveryRecordSerializer(serializers.ModelSerializer):
|
||
|
|
class Meta:
|
||
|
|
model = DeliveryRecord
|
||
|
|
fields = '__all__'
|
||
|
|
|
||
|
|
class TaskApplicationSerializer(serializers.ModelSerializer):
|
||
|
|
applicant_name = serializers.ReadOnlyField(source='applicant.nickname')
|
||
|
|
applicant_username = serializers.ReadOnlyField(source='applicant.username')
|
||
|
|
applicant_avatar = serializers.ReadOnlyField(source='applicant.avatar_url')
|
||
|
|
applicant_rating = serializers.ReadOnlyField(source='applicant.rating')
|
||
|
|
applicant_completed_tasks = serializers.ReadOnlyField(source='applicant.completed_tasks')
|
||
|
|
task_detail = serializers.SerializerMethodField()
|
||
|
|
is_invited = serializers.SerializerMethodField()
|
||
|
|
delivery_records = DeliveryRecordSerializer(many=True, read_only=True)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = TaskApplication
|
||
|
|
fields = '__all__'
|
||
|
|
read_only_fields = ['id', 'applicant', 'status', 'reviewed_by', 'reviewed_at', 'created_at', 'updated_at']
|
||
|
|
|
||
|
|
def get_task_detail(self, obj):
|
||
|
|
return {
|
||
|
|
'id': obj.task.id,
|
||
|
|
'title': obj.task.title,
|
||
|
|
'budget_min': obj.task.budget_min,
|
||
|
|
'budget_max': obj.task.budget_max,
|
||
|
|
'status': obj.task.status,
|
||
|
|
}
|
||
|
|
|
||
|
|
def get_is_invited(self, obj):
|
||
|
|
from .models import TaskInvitation
|
||
|
|
return TaskInvitation.objects.filter(task=obj.task, expert=obj.applicant).exists()
|
||
|
|
|
||
|
|
|
||
|
|
class TaskInvitationSerializer(serializers.ModelSerializer):
|
||
|
|
enterprise_name = serializers.ReadOnlyField(source='task.enterprise.company_name')
|
||
|
|
enterprise_logo = serializers.ReadOnlyField(source='task.enterprise.logo_url')
|
||
|
|
enterprise_avatar = serializers.ReadOnlyField(source='task.publisher.avatar_url')
|
||
|
|
inviter_name = serializers.ReadOnlyField(source='task.publisher.nickname')
|
||
|
|
enterprise_phone = serializers.ReadOnlyField(source='task.publisher.phone')
|
||
|
|
task_title = serializers.ReadOnlyField(source='task.title')
|
||
|
|
expert_name = serializers.ReadOnlyField(source='expert.nickname')
|
||
|
|
expert_avatar = serializers.ReadOnlyField(source='expert.avatar_url')
|
||
|
|
expert_phone = serializers.ReadOnlyField(source='expert.phone')
|
||
|
|
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = TaskInvitation
|
||
|
|
fields = '__all__'
|
||
|
|
read_only_fields = ['id', 'created_at', 'updated_at']
|
||
|
|
|
||
|
|
|
||
|
|
class TaskSerializer(serializers.ModelSerializer):
|
||
|
|
applications = TaskApplicationSerializer(many=True, read_only=True)
|
||
|
|
invitations = TaskInvitationSerializer(many=True, read_only=True)
|
||
|
|
publisher_name = serializers.ReadOnlyField(source='publisher.nickname')
|
||
|
|
publisher_avatar = serializers.ReadOnlyField(source='publisher.avatar_url')
|
||
|
|
publisher_phone = serializers.ReadOnlyField(source='publisher.phone')
|
||
|
|
enterprise_name = serializers.ReadOnlyField(source='enterprise.company_name')
|
||
|
|
enterprise_logo = serializers.ReadOnlyField(source='enterprise.logo_url')
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Task
|
||
|
|
fields = '__all__'
|
||
|
|
read_only_fields = ['id', 'publisher', 'enterprise', 'created_at', 'updated_at', 'assigned_at', 'completed_at', 'cancelled_at']
|
||
|
|
|