2018-02-21 13:55:34 +03:00
// 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
2021-09-19 14:49:59 +03:00
import (
"fmt"
"code.gitea.io/gitea/models/db"
2021-12-10 04:27:50 +03:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2021-09-19 14:49:59 +03:00
)
2018-02-21 13:55:34 +03:00
// 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 )
}
2021-11-24 12:49:20 +03:00
func ( actions ActionList ) loadUsers ( e db . Engine ) ( [ ] * user_model . User , error ) {
2018-02-21 13:55:34 +03:00
if len ( actions ) == 0 {
return nil , nil
}
userIDs := actions . getUserIDs ( )
2021-11-24 12:49:20 +03:00
userMaps := make ( map [ int64 ] * user_model . User , len ( userIDs ) )
2018-02-21 13:55:34 +03:00
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
2021-11-24 12:49:20 +03:00
func ( actions ActionList ) LoadUsers ( ) ( [ ] * user_model . User , error ) {
2021-09-23 18:45:36 +03:00
return actions . loadUsers ( db . GetEngine ( db . DefaultContext ) )
2018-02-21 13:55:34 +03:00
}
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 )
}
2021-12-10 04:27:50 +03:00
func ( actions ActionList ) loadRepositories ( e db . Engine ) ( [ ] * repo_model . Repository , error ) {
2018-02-21 13:55:34 +03:00
if len ( actions ) == 0 {
return nil , nil
}
repoIDs := actions . getRepoIDs ( )
2021-12-10 04:27:50 +03:00
repoMaps := make ( map [ int64 ] * repo_model . Repository , len ( repoIDs ) )
2018-02-21 13:55:34 +03:00
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
2021-12-10 04:27:50 +03:00
func ( actions ActionList ) LoadRepositories ( ) ( [ ] * repo_model . Repository , error ) {
2021-09-23 18:45:36 +03:00
return actions . loadRepositories ( db . GetEngine ( db . DefaultContext ) )
2018-02-21 13:55:34 +03:00
}
// loadAttributes loads all attributes
2021-09-19 14:49:59 +03:00
func ( actions ActionList ) loadAttributes ( e db . Engine ) ( err error ) {
2018-02-21 13:55:34 +03:00
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 {
2021-09-23 18:45:36 +03:00
return actions . loadAttributes ( db . GetEngine ( db . DefaultContext ) )
2018-02-21 13:55:34 +03:00
}