Skip to content

Commit

Permalink
Implement delete version feature (#104)
Browse files Browse the repository at this point in the history
Signed-off-by: Igor Shishkin <me@teran.dev>
  • Loading branch information
teran authored Aug 9, 2024
1 parent bfa5764 commit 5e32721
Show file tree
Hide file tree
Showing 10 changed files with 69 additions and 7 deletions.
3 changes: 2 additions & 1 deletion cli/service/pb_mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ func (m *protoClientMock) ListVersions(ctx context.Context, in *v1proto.ListVers
}

func (m *protoClientMock) DeleteVersion(ctx context.Context, in *v1proto.DeleteVersionRequest, opts ...grpc.CallOption) (*v1proto.DeleteVersionResponse, error) {
panic("not implemented")
args := m.Called(in.GetContainer(), in.GetVersion())
return &v1proto.DeleteVersionResponse{}, args.Error(0)
}

func (m *protoClientMock) PublishVersion(ctx context.Context, in *v1proto.PublishVersionRequest, opts ...grpc.CallOption) (*v1proto.PublishVersionResponse, error) {
Expand Down
17 changes: 17 additions & 0 deletions cli/service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ type Service interface {
ListContainers() func(ctx context.Context) error

CreateVersion(containerName string, shouldPublish bool, fromDir *string) func(ctx context.Context) error
DeleteVersion(containerName, versionID string) func(ctx context.Context) error
ListVersions(containerName string) func(ctx context.Context) error
PublishVersion(containerName, versionID string) func(ctx context.Context) error

Expand Down Expand Up @@ -109,6 +110,22 @@ func (s *service) CreateVersion(containerName string, shouldPublish bool, fromDi
}
}

func (s *service) DeleteVersion(containerName, versionID string) func(ctx context.Context) error {
return func(ctx context.Context) error {
_, err := s.cli.DeleteVersion(ctx, &v1proto.DeleteVersionRequest{
Container: containerName,
Version: versionID,
})
if err != nil {
return errors.Wrap(err, "error deleting version")
}

fmt.Printf("version `%s` of container `%s` has been deleted\n", versionID, containerName)

return nil
}
}

func (s *service) ListVersions(containerName string) func(ctx context.Context) error {
return func(ctx context.Context) error {
resp, err := s.cli.ListVersions(ctx, &v1proto.ListVersionsRequest{
Expand Down
7 changes: 7 additions & 0 deletions cli/service/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,13 @@ func (s *serviceTestSuite) TestCreateVersionFromDirAndPublish() {
s.Require().NoError(fn(s.ctx))
}

func (s *serviceTestSuite) TestDeleteVersion() {
s.cliMock.On("DeleteVersion", "container1", "version1").Return(nil).Once()

fn := s.svc.DeleteVersion("container1", "version1")
s.Require().NoError(fn(s.ctx))
}

func (s *serviceTestSuite) TestListVersions() {
s.cliMock.On("ListVersions", "container1").Return([]string{"version1", "version2", "version3"}, nil).Once()

Expand Down
3 changes: 3 additions & 0 deletions cmd/cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,12 @@ func main() {
r := router.New(ctx)
r.Register(containerCreate.FullCommand(), cliSvc.CreateContainer(*containerCreateName))
r.Register(containerList.FullCommand(), cliSvc.ListContainers())

r.Register(versionList.FullCommand(), cliSvc.ListVersions(*versionListContainer))
r.Register(versionCreate.FullCommand(), cliSvc.CreateVersion(*versionCreateContainer, *versionCreatePublish, versionCreateFromDir))
r.Register(versionDelete.FullCommand(), cliSvc.DeleteVersion(*versionDeleteContainer, *versionDeleteVersion))
r.Register(versionPublish.FullCommand(), cliSvc.PublishVersion(*versionPublishContainer, *versionPublishVersion))

r.Register(objectCreate.FullCommand(), cliSvc.CreateObject(*objectCreateContainer, *objectCreateVersion, *objectCreatePath))
r.Register(objectList.FullCommand(), cliSvc.ListObjects(*objectListContainer, *objectListVersion))
r.Register(objectURL.FullCommand(), cliSvc.GetObjectURL(*objectURLContainer, *objectURLVersion, *objectURLKey))
Expand Down
9 changes: 7 additions & 2 deletions presenter/manager/grpc/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,13 @@ func (h *handlers) ListVersions(ctx context.Context, in *v1.ListVersionsRequest)
}, nil
}

func (h *handlers) DeleteVersion(context.Context, *v1.DeleteVersionRequest) (*v1.DeleteVersionResponse, error) {
panic("not implemented")
func (h *handlers) DeleteVersion(ctx context.Context, in *v1.DeleteVersionRequest) (*v1.DeleteVersionResponse, error) {
err := h.svc.DeleteVersion(ctx, in.GetContainer(), in.GetVersion())
if err != nil {
return nil, err
}

return &v1.DeleteVersionResponse{}, nil
}

func (h *handlers) PublishVersion(ctx context.Context, in *v1.PublishVersionRequest) (*v1.PublishVersionResponse, error) {
Expand Down
10 changes: 10 additions & 0 deletions presenter/manager/grpc/handlers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,16 @@ func (s *manageHandlersTestSuite) TestCreateVersion() {
s.Require().Equal("20240102030405", resp.GetVersion())
}

func (s *manageHandlersTestSuite) TestDeleteVersion() {
s.svcMock.On("DeleteVersion", "test-container", "test-version").Return(nil).Once()

_, err := s.client.DeleteVersion(s.ctx, &v1pb.DeleteVersionRequest{
Container: "test-container",
Version: "test-version",
})
s.Require().NoError(err)
}

func (s *manageHandlersTestSuite) TestPublishVersion() {
s.svcMock.On("PublishVersion", "test-container", "20240102030405").Return(nil).Once()

Expand Down
10 changes: 10 additions & 0 deletions repositories/metadata/postgresql/versions.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,16 @@ func (r *repository) DeleteVersion(ctx context.Context, container, version strin
return errors.Wrap(err, "error looking up version")
}

_, err = deleteQuery(ctx, tx, psql.
Delete("objects").
Where(sq.Eq{
"version_id": versionID,
}),
)
if err != nil {
return mapSQLErrors(err)
}

_, err = deleteQuery(ctx, tx, psql.
Delete("versions").
Where(sq.Eq{
Expand Down
7 changes: 7 additions & 0 deletions repositories/metadata/postgresql/versions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ func (s *postgreSQLRepositoryTestSuite) TestDeleteVersion() {
s.tp.On("Now").Return("2024-07-07T10:11:13Z").Times(2)
s.tp.On("Now").Return("2024-07-07T10:11:14Z").Times(2)
s.tp.On("Now").Return("2024-07-07T10:11:15Z").Times(2)
s.tp.On("Now").Return("2024-07-07T10:11:16Z").Times(3)

err := s.repo.CreateContainer(s.ctx, "container1")
s.Require().NoError(err)
Expand All @@ -188,6 +189,12 @@ func (s *postgreSQLRepositoryTestSuite) TestDeleteVersion() {
version4, err := s.repo.CreateVersion(s.ctx, "container2")
s.Require().NoError(err)

err = s.repo.CreateBLOB(s.ctx, "deadbeef", 10, "application/octet-stream")
s.Require().NoError(err)

err = s.repo.CreateObject(s.ctx, "container2", version4, "testkey", "deadbeef")
s.Require().NoError(err)

versions1, err := s.repo.ListAllVersionsByContainer(s.ctx, "container1")
s.Require().NoError(err)
s.Require().Equal([]models.Version{
Expand Down
3 changes: 2 additions & 1 deletion service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,8 @@ func (s *service) PublishVersion(ctx context.Context, container, id string) erro
}

func (s *service) DeleteVersion(ctx context.Context, container, id string) error {
panic("not implemented")
err := s.mdRepo.DeleteVersion(ctx, container, id)
return mapMetadataErrors(err)
}

func (s *service) AddObject(ctx context.Context, container, versionID, key, casKey string) error {
Expand Down
7 changes: 4 additions & 3 deletions service/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,10 @@ func (s *serviceTestSuite) TestPublishVersion() {
}

func (s *serviceTestSuite) TestDeleteVersion() {
s.Require().PanicsWithValue("not implemented", func() {
s.svc.DeleteVersion(s.ctx, "container", "version")
})
s.mdRepoMock.On("DeleteVersion", "test_container", "test_version").Return(nil).Once()

err := s.svc.DeleteVersion(s.ctx, "test_container", "test_version")
s.Require().NoError(err)
}

func (s *serviceTestSuite) TestAddObject() {
Expand Down

0 comments on commit 5e32721

Please # to comment.