Loggest thine Stuff
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

66 lines
1.3 KiB

package items
import (
"context"
"git.aiterp.net/stufflog3/stufflog3/models"
"git.aiterp.net/stufflog3/stufflog3/usecases/scopes"
"git.aiterp.net/stufflog3/stufflog3/usecases/stats"
)
type Service struct {
Scopes *scopes.Service
Stats *stats.Service
Repository Repository
}
func (s *Service) ListScoped(ctx context.Context, filter models.ItemFilter) ([]Result, error) {
sc := s.Scopes.Context(ctx)
if sc == nil {
return nil, models.PermissionDeniedError{}
}
if filter.ScopeIDs != nil {
userScopes, err := sc.Scopes(ctx)
if err != nil {
return nil, err
}
for _, id := range filter.ScopeIDs {
found := false
for _, scope := range userScopes {
if scope.ID == id {
found = true
break
}
}
if !found {
return nil, models.ForbiddenError("Scope you do not belong to found in filter scope IDs.")
}
}
} else {
filter.ScopeIDs = []int{sc.ID}
}
items, err := s.Repository.Fetch(ctx, filter)
if err != nil {
return nil, err
}
progresses, err := s.Repository.ListProgress(ctx, items...)
if err != nil {
return nil, err
}
scopeStats, err := sc.Stats(ctx)
if err != nil {
return nil, err
}
res := make([]Result, 0, len(items))
for _, item := range items {
res = append(res, generateResult(item, progresses, scopeStats))
}
return res, nil
}