@@ -25,8 +25,50 @@ import (
2525 "gorm.io/gorm"
2626)
2727
28- func ListProjects (c * gin.Context ) {
28+ func ListProjectsApi (c * gin.Context ) {
29+ // assume all exists as validated in middleware
30+ organisationId := c .GetString (middleware .ORGANISATION_ID_KEY )
31+ organisationSource := c .GetString (middleware .ORGANISATION_SOURCE_KEY )
2932
33+ var org models.Organisation
34+ err := models .DB .GormDB .Where ("external_id = ? AND external_source = ?" , organisationId , organisationSource ).First (& org ).Error
35+ if err != nil {
36+ if errors .Is (err , gorm .ErrRecordNotFound ) {
37+ slog .Info ("Organisation not found" , "organisationId" , organisationId , "source" , organisationSource )
38+ c .String (http .StatusNotFound , "Could not find organisation: " + organisationId )
39+ } else {
40+ slog .Error ("Error fetching organisation" , "organisationId" , organisationId , "source" , organisationSource , "error" , err )
41+ c .String (http .StatusInternalServerError , "Error fetching organisation" )
42+ }
43+ return
44+ }
45+
46+ var projects []models.Project
47+
48+ err = models .DB .GormDB .Preload ("Organisation" ).
49+ Where ("projects.organisation_id = ?" , org .ID ).
50+ Order ("name" ).
51+ Find (& projects ).Error
52+
53+ if err != nil {
54+ slog .Error ("Error fetching projects" , "organisationId" , organisationId , "orgId" , org .ID , "error" , err )
55+ c .String (http .StatusInternalServerError , "Unknown error occurred while fetching database" )
56+ return
57+ }
58+
59+ marshalledRepos := make ([]interface {}, 0 )
60+
61+ for _ , p := range projects {
62+ marshalled := p .MapToJsonStruct ()
63+ marshalledRepos = append (marshalledRepos , marshalled )
64+ }
65+
66+ slog .Info ("Successfully fetched projects" , "organisationId" , organisationId , "orgId" , org .ID , "projectCount" , len (projects ))
67+
68+ response := make (map [string ]interface {})
69+ response ["result" ] = marshalledRepos
70+
71+ c .JSON (http .StatusOK , response )
3072}
3173
3274func FindProjectsForRepo (c * gin.Context ) {
@@ -353,11 +395,10 @@ func ReportProjectsForRepo(c *gin.Context) {
353395 )
354396
355397 project := models.Project {
356- Name : request .Name ,
357- ConfigurationYaml : request .ConfigurationYaml ,
358- OrganisationID : org .ID ,
359- RepoFullName : repo .RepoFullName ,
360- Organisation : org ,
398+ Name : request .Name ,
399+ OrganisationID : org .ID ,
400+ RepoFullName : repo .RepoFullName ,
401+ Organisation : org ,
361402 }
362403
363404 err = models .DB .GormDB .Create (& project ).Error
0 commit comments