snapshot of https://github.com/traggo/server.git (master, 2026-09-16; blobs > 131072B omitted)
Some checks failed
build / build (push) Failing after 3s
Some checks failed
build / build (push) Failing after 3s
This commit is contained in:
89
timespan/convert.go
Normal file
89
timespan/convert.go
Normal file
@@ -0,0 +1,89 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user