feat: redesign task due date manager

This commit is contained in:
Jordan Knott
2021-01-01 14:51:40 -06:00
parent a8b3809515
commit d6101d9221
20 changed files with 450 additions and 167 deletions

View File

@ -383,6 +383,7 @@ type ComplexityRoot struct {
CreatedAt func(childComplexity int) int
Description func(childComplexity int) int
DueDate func(childComplexity int) int
HasTime func(childComplexity int) int
ID func(childComplexity int) int
Labels func(childComplexity int) int
Name func(childComplexity int) int
@ -2376,6 +2377,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
return e.complexity.Task.DueDate(childComplexity), true
case "Task.hasTime":
if e.complexity.Task.HasTime == nil {
break
}
return e.complexity.Task.HasTime(childComplexity), true
case "Task.id":
if e.complexity.Task.ID == nil {
break
@ -3135,6 +3143,7 @@ type Task {
position: Float!
description: String
dueDate: Time
hasTime: Boolean!
complete: Boolean!
completedAt: Time
assigned: [Member!]!
@ -3477,6 +3486,7 @@ type UpdateTaskLocationPayload {
input UpdateTaskDueDate {
taskID: UUID!
hasTime: Boolean!
dueDate: Time
}
@ -13558,6 +13568,40 @@ func (ec *executionContext) _Task_dueDate(ctx context.Context, field graphql.Col
return ec.marshalOTime2ᚖtimeᚐTime(ctx, field.Selections, res)
}
func (ec *executionContext) _Task_hasTime(ctx context.Context, field graphql.CollectedField, obj *db.Task) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Task",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.HasTime, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _Task_complete(ctx context.Context, field graphql.CollectedField, obj *db.Task) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
@ -18596,6 +18640,12 @@ func (ec *executionContext) unmarshalInputUpdateTaskDueDate(ctx context.Context,
if err != nil {
return it, err
}
case "hasTime":
var err error
it.HasTime, err = ec.unmarshalNBoolean2bool(ctx, v)
if err != nil {
return it, err
}
case "dueDate":
var err error
it.DueDate, err = ec.unmarshalOTime2ᚖtimeᚐTime(ctx, v)
@ -20968,6 +21018,11 @@ func (ec *executionContext) _Task(ctx context.Context, sel ast.SelectionSet, obj
res = ec._Task_dueDate(ctx, field, obj)
return res
})
case "hasTime":
out.Values[i] = ec._Task_hasTime(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "complete":
out.Values[i] = ec._Task_complete(ctx, field, obj)
if out.Values[i] == graphql.Null {

View File

@ -519,6 +519,7 @@ type UpdateTaskDescriptionInput struct {
type UpdateTaskDueDate struct {
TaskID uuid.UUID `json:"taskID"`
HasTime bool `json:"hasTime"`
DueDate *time.Time `json:"dueDate"`
}

View File

@ -175,6 +175,7 @@ type Task {
position: Float!
description: String
dueDate: Time
hasTime: Boolean!
complete: Boolean!
completedAt: Time
assigned: [Member!]!
@ -517,6 +518,7 @@ type UpdateTaskLocationPayload {
input UpdateTaskDueDate {
taskID: UUID!
hasTime: Boolean!
dueDate: Time
}
@ -943,3 +945,4 @@ type DeleteUserAccountPayload {
ok: Boolean!
userAccount: UserAccount!
}

View File

@ -423,28 +423,35 @@ func (r *mutationResolver) UpdateTaskDueDate(ctx context.Context, input UpdateTa
activityType = TASK_DUE_DATE_CHANGED
data["PrevDueDate"] = prevTask.DueDate.Time.String()
data["CurDueDate"] = input.DueDate.String()
} else {
} else if input.DueDate != nil {
data["DueDate"] = input.DueDate.String()
}
var dueDate sql.NullTime
log.WithField("dueDate", input.DueDate).Info("before ptr!")
if input.DueDate == nil {
dueDate = sql.NullTime{Valid: false, Time: time.Now()}
} else {
dueDate = sql.NullTime{Valid: true, Time: *input.DueDate}
}
task, err := r.Repository.UpdateTaskDueDate(ctx, db.UpdateTaskDueDateParams{
TaskID: input.TaskID,
DueDate: dueDate,
})
createdAt := time.Now().UTC()
d, err := json.Marshal(data)
_, err = r.Repository.CreateTaskActivity(ctx, db.CreateTaskActivityParams{
TaskID: task.TaskID,
Data: d,
CausedBy: userID,
CreatedAt: createdAt,
ActivityTypeID: activityType,
})
var task db.Task
if !(input.DueDate == nil && !prevTask.DueDate.Valid) {
task, err = r.Repository.UpdateTaskDueDate(ctx, db.UpdateTaskDueDateParams{
TaskID: input.TaskID,
DueDate: dueDate,
HasTime: input.HasTime,
})
createdAt := time.Now().UTC()
d, _ := json.Marshal(data)
_, err = r.Repository.CreateTaskActivity(ctx, db.CreateTaskActivityParams{
TaskID: task.TaskID,
Data: d,
CausedBy: userID,
CreatedAt: createdAt,
ActivityTypeID: activityType,
})
} else {
task, err = r.Repository.GetTaskByID(ctx, input.TaskID)
}
return &task, err
}

View File

@ -175,6 +175,7 @@ type Task {
position: Float!
description: String
dueDate: Time
hasTime: Boolean!
complete: Boolean!
completedAt: Time
assigned: [Member!]!

View File

@ -49,6 +49,7 @@ type UpdateTaskLocationPayload {
input UpdateTaskDueDate {
taskID: UUID!
hasTime: Boolean!
dueDate: Time
}