MCPcopy Index your code
hub / github.com/apache/devlake / GetProjects

Function GetProjects

backend/server/services/project.go:54–100  ·  view source on GitHub ↗

GetProjects returns a paginated list of Projects based on `query`

(query *ProjectQuery)

Source from the content-addressed store, hash-verified

52
53// GetProjects returns a paginated list of Projects based on `query`
54func GetProjects(query *ProjectQuery) ([]*models.ApiOutputProject, int64, errors.Error) {
55 // verify input
56 if err := VerifyStruct(query); err != nil {
57 return nil, 0, err
58 }
59 clauses := []dal.Clause{
60 dal.From(&models.Project{}),
61 }
62 if query.Keyword != nil {
63 clauses = append(clauses, dal.Where("LOWER(name) LIKE ?", "%"+query.GetKeyword()+"%"))
64 }
65
66 count, err := db.Count(clauses...)
67 if err != nil {
68 return nil, 0, errors.Default.Wrap(err, "error getting DB count of project")
69 }
70
71 clauses = append(clauses,
72 dal.Orderby("created_at DESC"),
73 dal.Offset(query.GetSkip()),
74 dal.Limit(query.GetPageSize()),
75 )
76 projects := make([]*models.Project, count)
77 err = db.All(&projects, clauses...)
78 if err != nil {
79 return nil, 0, errors.Default.Wrap(err, "error finding DB project")
80 }
81 apiOutProjects := make([]*models.ApiOutputProject, len(projects))
82 g := new(errgroup.Group)
83 for idx, project := range projects {
84 tmpProject := *project
85 tmpIdx := idx
86 g.Go(func() error {
87 apiOutputProject, err := makeProjectOutput(&tmpProject, true)
88 if err != nil {
89 logger.Error(err, "makeProjectOutput, name: %s", tmpProject.Name)
90 return errors.Default.Wrap(err, "error making project output")
91 }
92 apiOutProjects[tmpIdx] = apiOutputProject
93 return nil
94 })
95 }
96 if err := g.Wait(); err != nil {
97 return nil, 0, errors.Convert(err)
98 }
99 return apiOutProjects, count, nil
100}
101
102// CreateProject accepts a project instance and insert it to database
103func CreateProject(projectInput *models.ApiInputProject) (*models.ApiOutputProject, errors.Error) {

Callers

nothing calls this directly

Calls 12

VerifyStructFunction · 0.85
makeProjectOutputFunction · 0.85
GetKeywordMethod · 0.80
WrapMethod · 0.80
GetSkipMethod · 0.80
GetPageSizeMethod · 0.80
WaitMethod · 0.80
FromMethod · 0.65
CountMethod · 0.65
AllMethod · 0.65
ErrorMethod · 0.65
ConvertMethod · 0.45

Tested by

no test coverage detected