Files
upstream-traggo/timespan/convert.go
upstream-mirror cda7c1a474
Some checks failed
build / build (push) Failing after 3s
snapshot of https://github.com/traggo/server.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 05:24:45 +05:00

90 lines
2.1 KiB
Go

package timespan
import (
"fmt"
"time"
"github.com/traggo/server/generated/gqlmodel"
"github.com/traggo/server/model"
)
func timespanToInternal(userID int, start model.Time, end *model.Time, tags []*gqlmodel.InputTimeSpanTag, note string) (model.TimeSpan, error) {
_, offset := start.Time().Zone()
span := model.TimeSpan{
StartUserTime: start.OmitTimeZone(),
StartUTC: start.UTC(),
UserID: userID,
Tags: tagsToInternal(tags),
OffsetUTC: offset,
Note: note,
}
if end != nil {
if start.Time().After(end.Time()) {
return span, fmt.Errorf("start must be before end")
}
endUser := end.OmitTimeZone()
span.EndUserTime = &endUser
endUTC := end.UTC()
span.EndUTC = &endUTC
}
return span, nil
}
func timeSpanToExternal(span model.TimeSpan) *gqlmodel.TimeSpan {
location := time.FixedZone("unknown", span.OffsetUTC)
result := gqlmodel.TimeSpan{
Start: model.Time(span.StartUTC.In(location)),
End: nil,
ID: span.ID,
Tags: tagsToExternal(span.Tags),
Note: span.Note,
}
if span.EndUTC != nil && !span.EndUTC.IsZero() {
end := *span.EndUTC
endModel := model.Time(end.In(location))
result.End = &endModel
}
return &result
}
func tagsToExternal(tags []model.TimeSpanTag) []*gqlmodel.TimeSpanTag {
result := []*gqlmodel.TimeSpanTag{}
for _, tag := range tags {
result = append(result, &gqlmodel.TimeSpanTag{
Key: tag.Key,
Value: tag.StringValue,
})
}
return result
}
func tagsToInternal(gqls []*gqlmodel.InputTimeSpanTag) []model.TimeSpanTag {
result := make([]model.TimeSpanTag, 0)
for _, tag := range gqls {
result = append(result, tagToInternal(*tag))
}
return result
}
func tagToInternal(gqls gqlmodel.InputTimeSpanTag) model.TimeSpanTag {
return model.TimeSpanTag{
Key: gqls.Key,
StringValue: gqls.Value,
}
}
func tagsToInputTag(tags []model.TimeSpanTag) []*gqlmodel.InputTimeSpanTag {
result := make([]*gqlmodel.InputTimeSpanTag, 0)
for _, tag := range tags {
result = append(result, &gqlmodel.InputTimeSpanTag{
Key: tag.Key,
Value: tag.StringValue,
})
}
return result
}