You've already forked opc-backend
开发了多角色登录与鉴权接口:实现了普通用户、企业和管理员的登录分流,并支持Token验证。
开发了权限控制接口:实现了通过数据库分配菜单权限节点,控制接口访问安全。 开发了实名认证中心:实现了个人身份证信息与企业营业执照的提交与审核接口。 开发了任务与协作大厅核心业务:实现了任务的发布、接单、状态流转以及专家邀约接口。 配置了全局环境变量与数据库引擎:集成了 PostgreSQL 数据库、Redis 缓存与 MinIO 对象存储。
This commit is contained in:
69
tasks/serializers.py
Normal file
69
tasks/serializers.py
Normal file
@@ -0,0 +1,69 @@
|
||||
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']
|
||||
|
||||
Reference in New Issue
Block a user