diff --git a/peridot/db/db.go b/peridot/db/db.go index 51d04a0..71fd868 100644 --- a/peridot/db/db.go +++ b/peridot/db/db.go @@ -125,6 +125,7 @@ type Access interface { GetPluginsForProject(projectId string) (models.Plugins, error) GetExternalRepositoriesForProject(projectId string) (models.ExternalRepositories, error) + GetExternalRepository(projectId string, id string) (models.ExternalRepository, error) DeleteExternalRepositoryForProject(projectId string, externalRepositoryId string) error CreateExternalRepositoryForProject(projectId string, repoURL string, priority *int32, moduleHotfixes bool) (*models.ExternalRepository, error) FindRepositoriesForPackage(projectId string, pkg string, internalOnly bool) (models.Repositories, error) diff --git a/peridot/db/psql/repository.go b/peridot/db/psql/repository.go index a3104a5..0774bcd 100644 --- a/peridot/db/psql/repository.go +++ b/peridot/db/psql/repository.go @@ -45,6 +45,16 @@ func (a *Access) GetExternalRepositoriesForProject(projectId string) (ret models return ret, nil } +func (a *Access) GetExternalRepository(projectId string, repoId string) (*models.ExternalRepository, error) { + var r models.ExternalRepository + err := a.query.Select(&r, "select id, created_at, project_id, url, priority, module_hotfixes from external_repositories where project_id = $1 and id = $2 order by created_at desc", projectId, repoId) + if err != nil { + return nil, err + } + + return &r, nil +} + func (a *Access) DeleteExternalRepositoryForProject(projectId string, id string) error { _, err := a.query.Exec("delete from external_repositories where project_id = $1 and id = $2", projectId, id) return err diff --git a/peridot/impl/v1/project.go b/peridot/impl/v1/project.go index 0c9aee9..e6165b2 100644 --- a/peridot/impl/v1/project.go +++ b/peridot/impl/v1/project.go @@ -236,6 +236,47 @@ func (s *Server) GetRepository(ctx context.Context, req *peridotpb.GetRepository }, nil } +func (s *Server) ListExternalRepositories(ctx context.Context, req *peridotpb.ListExternalRepositoriesRequest) (*peridotpb.ListExternalRepositoriesResponse, error) { + if err := req.ValidateAll(); err != nil { + return nil, err + } + if err := s.checkPermission(ctx, ObjectProject, req.ProjectId.Value, PermissionView); err != nil { + return nil, err + } + + repos, err := s.db.GetExternalRepositoriesForProject(req.ProjectId.Value) + if err != nil { + s.log.Errorf("could not list repositories: %v", err) + return nil, utils.CouldNotRetrieveObjects + } + + return &peridotpb.ListExternalRepositoriesResponse { + Repositories: repos.ToProto(), + }, nil +} + +func (s *Server) GetExternalRepository(ctx context.Context, req *peridotpb.GetExternalRepositoryRequest) (*peridotpb.GetExternalRepositoryResponse, error) { + if err := req.ValidateAll(); err != nil { + return nil, err + } + if err := s.checkPermission(ctx, ObjectProject, req.ProjectId.Value, PermissionView); err != nil { + return nil, err + } + + repos, err := s.db.GetExternalRepositoryForProject(req.ProjectId.Value, &req.Id.Value, false) + if err != nil { + s.log.Errorf("could not list repositories: %v", err) + return nil, utils.CouldNotRetrieveObjects + } + if len(repos) == 0 { + return nil, utils.CouldNotFindObject + } + + return &peridotpb.GetRepositoryResponse{ + Repository: repos[0].ToProto(), + }, nil +} + func (s *Server) GetProjectCredentials(ctx context.Context, req *peridotpb.GetProjectCredentialsRequest) (*peridotpb.GetProjectCredentialsResponse, error) { if err := req.ValidateAll(); err != nil { return nil, err