fix(timezone): fix timer clock-skew
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from rest_framework import serializers
|
||||
from django.utils import timezone
|
||||
|
||||
from core.serializers.base import BaseModelSerializer
|
||||
from apps.time_entries.models import TimeEntry
|
||||
@@ -31,6 +32,27 @@ class TimeEntrySerializer(BaseModelSerializer):
|
||||
tag_details = serializers.SerializerMethodField()
|
||||
start_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
|
||||
end_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", allow_null=True)
|
||||
start_time_ms = serializers.SerializerMethodField()
|
||||
end_time_ms = serializers.SerializerMethodField()
|
||||
server_now_ms = serializers.SerializerMethodField()
|
||||
|
||||
@staticmethod
|
||||
def _epoch_ms(value):
|
||||
if value is None:
|
||||
return None
|
||||
if timezone.is_naive(value):
|
||||
value = timezone.make_aware(value, timezone.get_current_timezone())
|
||||
return int(value.timestamp() * 1000)
|
||||
|
||||
def get_start_time_ms(self, obj):
|
||||
return self._epoch_ms(obj.start_time)
|
||||
|
||||
def get_end_time_ms(self, obj):
|
||||
return self._epoch_ms(obj.end_time)
|
||||
|
||||
def get_server_now_ms(self, obj):
|
||||
server_now = self.context.get("server_now") or timezone.now()
|
||||
return self._epoch_ms(server_now)
|
||||
|
||||
def get_tags(self, obj):
|
||||
return [str(tag.id) for tag in Tag.all_objects.filter(time_entries=obj).order_by("-updated_at", "-created_at")]
|
||||
@@ -76,7 +98,10 @@ class TimeEntrySerializer(BaseModelSerializer):
|
||||
"project_details",
|
||||
"description",
|
||||
"start_time",
|
||||
"start_time_ms",
|
||||
"end_time",
|
||||
"end_time_ms",
|
||||
"server_now_ms",
|
||||
"duration",
|
||||
"tags",
|
||||
"tag_details",
|
||||
|
||||
Reference in New Issue
Block a user