feat(time_entries): add time_entries app's basic structure and endpoints
This commit is contained in:
78
apps/time_entries/api/serializers.py
Normal file
78
apps/time_entries/api/serializers.py
Normal file
@@ -0,0 +1,78 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.serializers.base import BaseModelSerializer
|
||||
from apps.time_entries.models import TimeEntry
|
||||
from apps.projects.models import Project
|
||||
from apps.tags.models import Tag
|
||||
|
||||
|
||||
class TimeEntrySerializer(BaseModelSerializer):
|
||||
"""
|
||||
Output serializer for TimeEntry.
|
||||
"""
|
||||
class Meta:
|
||||
model = TimeEntry
|
||||
fields = BaseModelSerializer.Meta.fields + (
|
||||
"workspace",
|
||||
"user",
|
||||
"project",
|
||||
"description",
|
||||
"start_time",
|
||||
"end_time",
|
||||
"duration",
|
||||
"tags",
|
||||
"is_billable",
|
||||
"hourly_rate",
|
||||
"currency",
|
||||
)
|
||||
read_only_fields = fields
|
||||
|
||||
|
||||
class TimeEntryCreateSerializer(serializers.Serializer):
|
||||
"""
|
||||
Validates input data for creating/starting a time entry.
|
||||
"""
|
||||
workspace_id = serializers.UUIDField()
|
||||
project_id = serializers.PrimaryKeyRelatedField(
|
||||
queryset=Project.objects.filter(is_deleted=False),
|
||||
required=False,
|
||||
allow_null=True,
|
||||
source='project'
|
||||
)
|
||||
start_time = serializers.DateTimeField()
|
||||
end_time = serializers.DateTimeField(required=False, allow_null=True)
|
||||
description = serializers.CharField(required=False, allow_blank=True, default="")
|
||||
tags = serializers.PrimaryKeyRelatedField(
|
||||
queryset=Tag.objects.filter(is_deleted=False),
|
||||
many=True,
|
||||
required=False
|
||||
)
|
||||
is_billable = serializers.BooleanField(default=False)
|
||||
|
||||
|
||||
class TimeEntryUpdateSerializer(serializers.Serializer):
|
||||
"""
|
||||
Validates input data for updating an existing time entry.
|
||||
"""
|
||||
project_id = serializers.PrimaryKeyRelatedField(
|
||||
queryset=Project.objects.filter(is_deleted=False),
|
||||
required=False,
|
||||
allow_null=True,
|
||||
source='project'
|
||||
)
|
||||
start_time = serializers.DateTimeField(required=False)
|
||||
end_time = serializers.DateTimeField(required=False, allow_null=True)
|
||||
description = serializers.CharField(required=False, allow_blank=True)
|
||||
tags = serializers.PrimaryKeyRelatedField(
|
||||
queryset=Tag.objects.filter(is_deleted=False),
|
||||
many=True,
|
||||
required=False
|
||||
)
|
||||
is_billable = serializers.BooleanField(required=False)
|
||||
|
||||
|
||||
class TimeEntryStopSerializer(serializers.Serializer):
|
||||
"""
|
||||
Optional specific serializer for stopping a timer manually.
|
||||
"""
|
||||
end_time = serializers.DateTimeField(required=False, allow_null=True)
|
||||
Reference in New Issue
Block a user