add item composition in projects.
continuous-integration/drone/push Build is passing

This commit is contained in:
2021-11-29 21:59:38 +01:00
parent 3ea0d53da0
commit 62235658eb
8 changed files with 237 additions and 23 deletions
+104 -10
View File
@@ -251,6 +251,12 @@ func (l *Loader) FindProject(ctx context.Context, id string) (*models.ProjectRes
UserID: auth.UserID(ctx),
TaskIDs: taskIDs,
})
for _, log := range logs {
if log.SecondaryItemID == nil {
itemIDs.Add(*log.SecondaryItemID)
}
}
if err != nil {
return nil, err
}
@@ -265,12 +271,26 @@ func (l *Loader) FindProject(ctx context.Context, id string) (*models.ProjectRes
result.Tasks = make([]*models.TaskResult, len(tasks))
for i, task := range tasks {
result.Tasks[i] = &models.TaskResult{
Logs: []*models.Log{},
Logs: []*models.LogWithSecondaryItem{},
}
result.Tasks[i].Task = *task
for _, log := range logs {
if log.TaskID == task.ID {
result.Tasks[i].Logs = append(result.Tasks[i].Logs, log)
log := models.LogWithSecondaryItem{
Log: *log,
SecondaryItem: nil,
}
if log.SecondaryItemID != nil {
for _, item := range items {
if item.ID == *log.SecondaryItemID {
log.SecondaryItem = item
break
}
}
}
result.Tasks[i].Logs = append(result.Tasks[i].Logs, &log)
}
}
for _, item := range items {
@@ -280,6 +300,10 @@ func (l *Loader) FindProject(ctx context.Context, id string) (*models.ProjectRes
}
}
for _, log := range result.Tasks[i].Logs {
if project.StartTime != nil && log.LoggedTime.Before(*project.StartTime) {
continue
}
result.Tasks[i].CompletedAmount += log.Amount(result.Tasks[i].ItemID)
}
}
@@ -319,6 +343,11 @@ func (l *Loader) ListProjects(ctx context.Context, filter models.ProjectFilter)
if err != nil {
return nil, err
}
for _, log := range logs {
if log.SecondaryItemID != nil {
itemIDs.Add(*log.SecondaryItemID)
}
}
items, err := l.DB.Items().List(ctx, models.ItemFilter{
UserID: auth.UserID(ctx),
@@ -350,11 +379,25 @@ func (l *Loader) ListProjects(ctx context.Context, filter models.ProjectFilter)
taskResult := &models.TaskResult{
Task: *task,
Logs: []*models.Log{},
Logs: []*models.LogWithSecondaryItem{},
}
for _, log := range logs {
if log.TaskID == task.ID {
taskResult.Logs = append(taskResult.Logs, log)
log := models.LogWithSecondaryItem{
Log: *log,
SecondaryItem: nil,
}
if log.SecondaryItemID != nil {
for _, item := range items {
if item.ID == *log.SecondaryItemID {
log.SecondaryItem = item
break
}
}
}
taskResult.Logs = append(taskResult.Logs, &log)
}
}
for _, item := range items {
@@ -364,6 +407,10 @@ func (l *Loader) ListProjects(ctx context.Context, filter models.ProjectFilter)
}
}
for _, log := range taskResult.Logs {
if project.StartTime != nil && log.LoggedTime.Before(*project.StartTime) {
continue
}
taskResult.CompletedAmount += log.Amount(taskResult.ItemID)
}
results[i].Tasks = append(results[i].Tasks, taskResult)
@@ -468,7 +515,7 @@ func (l *Loader) FindTask(ctx context.Context, id string) (*models.TaskResult, e
result.Item, _ = l.DB.Items().Find(ctx, task.ItemID)
result.Project, _ = l.DB.Projects().Find(ctx, task.ProjectID)
result.Logs, err = l.DB.Logs().List(ctx, models.LogFilter{
logs, err := l.DB.Logs().List(ctx, models.LogFilter{
UserID: task.UserID,
TaskIDs: []string{task.ID},
})
@@ -476,8 +523,34 @@ func (l *Loader) FindTask(ctx context.Context, id string) (*models.TaskResult, e
return nil, err
}
for _, log := range result.Logs {
itemIds := stringset.New()
for _, log := range logs {
if log.SecondaryItemID != nil {
itemIds.Add(*log.SecondaryItemID)
}
}
items, err := l.DB.Items().List(ctx, models.ItemFilter{
UserID: task.UserID,
IDs: itemIds.Strings(),
})
for _, log := range logs {
result.CompletedAmount += log.Amount(result.ItemID)
log := models.LogWithSecondaryItem{
Log: *log,
SecondaryItem: nil,
}
if log.SecondaryItemID != nil {
for _, item := range items {
if item.ID == *log.SecondaryItemID {
log.SecondaryItem = item
break
}
}
}
result.Logs = append(result.Logs, &log)
}
return result, nil
@@ -509,7 +582,11 @@ func (l *Loader) ListTasks(ctx context.Context, filter models.TaskFilter) ([]*mo
if err != nil {
return nil, err
}
for _, log := range logs {
if log.SecondaryItemID != nil {
itemIDs.Add(*log.SecondaryItemID)
}
}
items, err := l.DB.Items().List(ctx, models.ItemFilter{
UserID: auth.UserID(ctx),
IDs: itemIDs.Strings(),
@@ -530,13 +607,30 @@ func (l *Loader) ListTasks(ctx context.Context, filter models.TaskFilter) ([]*mo
for _, task := range tasks {
result := &models.TaskResult{
Task: *task,
Logs: []*models.Log{},
Logs: []*models.LogWithSecondaryItem{},
}
for _, log := range logs {
if log.TaskID == task.ID {
result.Logs = append(result.Logs, log)
if log.TaskID != task.ID {
continue
}
result.CompletedAmount += log.Amount(result.ItemID)
log := models.LogWithSecondaryItem{
Log: *log,
SecondaryItem: nil,
}
if log.SecondaryItemID != nil {
for _, item := range items {
if item.ID == *log.SecondaryItemID {
log.SecondaryItem = item
break
}
}
}
result.Logs = append(result.Logs, &log)
}
for _, item := range items {