github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/journal/impl_wlogdatesasyncprojector.go (about) 1 /* 2 * Copyright (c) 2021-present unTill Pro, Ltd. 3 */ 4 5 package journal 6 7 import ( 8 "time" 9 10 "github.com/voedger/voedger/pkg/istructs" 11 "github.com/voedger/voedger/pkg/state" 12 ) 13 14 var wLogDatesProjector = func(event istructs.IPLogEvent, s istructs.IState, intents istructs.IIntents) (err error) { 15 timestamp := time.UnixMilli(int64(event.RegisteredAt())).UTC() 16 kb, err := s.KeyBuilder(state.View, QNameViewWLogDates) 17 if err != nil { 18 return 19 } 20 kb.PutInt32(field_Year, int32(timestamp.Year())) 21 kb.PutInt32(field_DayOfYear, int32(timestamp.YearDay())) 22 23 sv, ok, err := s.CanExist(kb) 24 if err != nil { 25 return 26 } 27 28 lo := int64(event.WLogOffset()) 29 fo := lo 30 if ok { 31 if sv.AsInt64(field_LastOffset) >= lo { 32 // skip for idempotency 33 return nil 34 } 35 fo = sv.AsInt64(field_FirstOffset) 36 } 37 38 vb, err := intents.NewValue(kb) 39 if err != nil { 40 return 41 } 42 vb.PutInt64(field_FirstOffset, fo) 43 vb.PutInt64(field_LastOffset, lo) 44 return 45 }