// Copyright 2018 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package models import "fmt" // ActionList defines a list of actions type ActionList []*Action func (actions ActionList) getUserIDs() []int64 { userIDs := make(map[int64]struct{}, len(actions)) for _, action := range actions { if _, ok := userIDs[action.ActUserID]; !ok { userIDs[action.ActUserID] = struct{}{} } } return keysInt64(userIDs) } func (actions ActionList) loadUsers(e Engine) ([]*User, error) { if len(actions) == 0 { return nil, nil } userIDs := actions.getUserIDs() userMaps := make(map[int64]*User, len(userIDs)) err := e. In("id", userIDs). Find(&userMaps) if err != nil { return nil, fmt.Errorf("find user: %v", err) } for _, action := range actions { action.ActUser = userMaps[action.ActUserID] } return valuesUser(userMaps), nil } // LoadUsers loads actions' all users func (actions ActionList) LoadUsers() ([]*User, error) { return actions.loadUsers(x) } func (actions ActionList) getRepoIDs() []int64 { repoIDs := make(map[int64]struct{}, len(actions)) for _, action := range actions { if _, ok := repoIDs[action.RepoID]; !ok { repoIDs[action.RepoID] = struct{}{} } } return keysInt64(repoIDs) } func (actions ActionList) loadRepositories(e Engine) ([]*Repository, error) { if len(actions) == 0 { return nil, nil } repoIDs := actions.getRepoIDs() repoMaps := make(map[int64]*Repository, len(repoIDs)) err := e. In("id", repoIDs). Find(&repoMaps) if err != nil { return nil, fmt.Errorf("find repository: %v", err) } for _, action := range actions { action.Repo = repoMaps[action.RepoID] } return valuesRepository(repoMaps), nil } // LoadRepositories loads actions' all repositories func (actions ActionList) LoadRepositories() ([]*Repository, error) { return actions.loadRepositories(x) } // loadAttributes loads all attributes func (actions ActionList) loadAttributes(e Engine) (err error) { if _, err = actions.loadUsers(e); err != nil { return } if _, err = actions.loadRepositories(e); err != nil { return } return nil } // LoadAttributes loads attributes of the actions func (actions ActionList) LoadAttributes() error { return actions.loadAttributes(x) }