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.
65 lines
1.3 KiB
65 lines
1.3 KiB
package projects
|
|
|
|
import (
|
|
"context"
|
|
"git.aiterp.net/stufflog3/stufflog3/usecases/items"
|
|
"git.aiterp.net/stufflog3/stufflog3/usecases/scopes"
|
|
"git.aiterp.net/stufflog3/stufflog3/usecases/stats"
|
|
)
|
|
|
|
type Service struct {
|
|
Scopes *scopes.Service
|
|
Stats *stats.Service
|
|
Items *items.Service
|
|
|
|
Repository Repository
|
|
}
|
|
|
|
func (s *Service) Find(ctx context.Context, id int) (*Result, error) {
|
|
scopeID := s.Scopes.ScopeFromContext(ctx).ID
|
|
|
|
project, err := s.Repository.Find(ctx, scopeID, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
requirements, requirementStats, err := s.Repository.ListRequirements(ctx, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
items, itemProgresses, err := s.Items.ListProject(ctx, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
stats, err := s.Stats.List(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := GenerateResult(
|
|
*project,
|
|
requirements,
|
|
requirementStats,
|
|
items,
|
|
itemProgresses,
|
|
stats,
|
|
)
|
|
|
|
return &result, nil
|
|
}
|
|
|
|
func (s *Service) List(ctx context.Context) ([]Entry, error) {
|
|
projects, err := s.Repository.List(ctx, s.Scopes.ScopeFromContext(ctx).ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
entries := make([]Entry, 0, len(projects))
|
|
for _, project := range projects {
|
|
entries = append(entries, generateEntry(project))
|
|
}
|
|
|
|
return entries, nil
|
|
}
|