satellite/{console,satellitedb}: add PublicID to Project, db method GetByPublicID
github issue: https://github.com/storj/storj/issues/4861 Change-Id: Ia83635c0de751a77cd5a49d641da19ed76132c46
This commit is contained in:
parent
9cd91c6df8
commit
4815cfc09b
@ -47,8 +47,9 @@ func TestProjectGet(t *testing.T) {
|
||||
t.Run("OK", func(t *testing.T) {
|
||||
link := "http://" + address.String() + "/api/projects/" + project.ID.String()
|
||||
expected := fmt.Sprintf(
|
||||
`{"id":"%s","name":"%s","description":"%s","partnerId":"%s","userAgent":null,"ownerId":"%s","rateLimit":null,"burstLimit":null,"maxBuckets":null,"createdAt":"%s","memberCount":0,"storageLimit":"25.00 GB","bandwidthLimit":"25.00 GB","segmentLimit":150000}`,
|
||||
`{"id":"%s","publicId":"%s","name":"%s","description":"%s","partnerId":"%s","userAgent":null,"ownerId":"%s","rateLimit":null,"burstLimit":null,"maxBuckets":null,"createdAt":"%s","memberCount":0,"storageLimit":"25.00 GB","bandwidthLimit":"25.00 GB","segmentLimit":150000}`,
|
||||
project.ID.String(),
|
||||
project.PublicID.String(),
|
||||
project.Name,
|
||||
project.Description,
|
||||
project.PartnerID.String(),
|
||||
|
@ -26,6 +26,8 @@ type Projects interface {
|
||||
GetOwn(ctx context.Context, userID uuid.UUID) ([]Project, error)
|
||||
// Get is a method for querying project from the database by id.
|
||||
Get(ctx context.Context, id uuid.UUID) (*Project, error)
|
||||
// GetByPublicID is a method for querying project from the database by public_id.
|
||||
GetByPublicID(ctx context.Context, publicID uuid.UUID) (*Project, error)
|
||||
// Insert is a method for inserting project into the database.
|
||||
Insert(ctx context.Context, project *Project) (*Project, error)
|
||||
// Delete is a method for deleting project by Id from the database.
|
||||
@ -84,6 +86,7 @@ type ProjectLimitConfig struct {
|
||||
// Project is a database object that describes Project entity.
|
||||
type Project struct {
|
||||
ID uuid.UUID `json:"id"`
|
||||
PublicID uuid.UUID `json:"publicId"`
|
||||
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
|
37
satellite/satellitedb/projectfromdbx_test.go
Normal file
37
satellite/satellitedb/projectfromdbx_test.go
Normal file
@ -0,0 +1,37 @@
|
||||
// Copyright (C) 2019 Storj Labs, Inc.
|
||||
// See LICENSE for copying information.
|
||||
|
||||
package satellitedb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"storj.io/storj/satellite/satellitedb/dbx"
|
||||
)
|
||||
|
||||
func TestProjectFromDbx(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
t.Run("can't create dbo from nil dbx model", func(t *testing.T) {
|
||||
project, err := projectFromDBX(ctx, nil)
|
||||
|
||||
assert.Nil(t, project)
|
||||
assert.NotNil(t, err)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
|
||||
t.Run("can't create dbo from dbx model with invalid ID", func(t *testing.T) {
|
||||
dbxProject := dbx.Project{
|
||||
Id: []byte("qweqwe"),
|
||||
}
|
||||
|
||||
project, err := projectFromDBX(ctx, &dbxProject)
|
||||
|
||||
assert.Nil(t, project)
|
||||
assert.NotNil(t, err)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
@ -84,6 +84,18 @@ func (projects *projects) Get(ctx context.Context, id uuid.UUID) (_ *console.Pro
|
||||
return projectFromDBX(ctx, project)
|
||||
}
|
||||
|
||||
// GetByPublicID is a method for querying project from the database by public_id.
|
||||
func (projects *projects) GetByPublicID(ctx context.Context, publicID uuid.UUID) (_ *console.Project, err error) {
|
||||
defer mon.Task()(&ctx)(&err)
|
||||
|
||||
project, err := projects.db.Get_Project_By_PublicId(ctx, dbx.Project_PublicId(publicID[:]))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return projectFromDBX(ctx, project)
|
||||
}
|
||||
|
||||
// Insert is a method for inserting project into the database.
|
||||
func (projects *projects) Insert(ctx context.Context, project *console.Project) (_ *console.Project, err error) {
|
||||
defer mon.Task()(&ctx)(&err)
|
||||
@ -92,6 +104,10 @@ func (projects *projects) Insert(ctx context.Context, project *console.Project)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
publicID, err := uuid.New()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
createFields := dbx.Project_Create_Fields{}
|
||||
if !project.PartnerID.IsZero() {
|
||||
@ -111,6 +127,7 @@ func (projects *projects) Insert(ctx context.Context, project *console.Project)
|
||||
}
|
||||
createFields.RateLimit = dbx.Project_RateLimit_Raw(project.RateLimit)
|
||||
createFields.MaxBuckets = dbx.Project_MaxBuckets_Raw(project.MaxBuckets)
|
||||
createFields.PublicId = dbx.Project_PublicId(publicID[:])
|
||||
|
||||
createdProject, err := projects.db.Create_Project(ctx,
|
||||
dbx.Project_Id(projectID[:]),
|
||||
@ -272,7 +289,7 @@ func (projects *projects) ListByOwnerID(ctx context.Context, ownerID uuid.UUID,
|
||||
}
|
||||
|
||||
rows, err := projects.sdb.Query(ctx, projects.sdb.Rebind(`
|
||||
SELECT id, name, description, owner_id, rate_limit, max_buckets, created_at,
|
||||
SELECT id, public_id, name, description, owner_id, rate_limit, max_buckets, created_at,
|
||||
(SELECT COUNT(*) FROM project_members WHERE project_id = projects.id) AS member_count
|
||||
FROM projects
|
||||
WHERE owner_id = ?
|
||||
@ -297,7 +314,7 @@ func (projects *projects) ListByOwnerID(ctx context.Context, ownerID uuid.UUID,
|
||||
}
|
||||
var rateLimit, maxBuckets sql.NullInt32
|
||||
nextProject := &console.Project{}
|
||||
err = rows.Scan(&nextProject.ID, &nextProject.Name, &nextProject.Description, &nextProject.OwnerID, &rateLimit, &maxBuckets, &nextProject.CreatedAt, &nextProject.MemberCount)
|
||||
err = rows.Scan(&nextProject.ID, &nextProject.PublicID, &nextProject.Name, &nextProject.Description, &nextProject.OwnerID, &rateLimit, &maxBuckets, &nextProject.CreatedAt, &nextProject.MemberCount)
|
||||
if err != nil {
|
||||
return console.ProjectsPage{}, err
|
||||
}
|
||||
@ -329,6 +346,14 @@ func projectFromDBX(ctx context.Context, project *dbx.Project) (_ *console.Proje
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var publicID uuid.UUID
|
||||
if len(project.PublicId) > 0 {
|
||||
publicID, err = uuid.FromBytes(project.PublicId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
var partnerID uuid.UUID
|
||||
if len(project.PartnerId) > 0 {
|
||||
partnerID, err = uuid.FromBytes(project.PartnerId)
|
||||
@ -349,6 +374,7 @@ func projectFromDBX(ctx context.Context, project *dbx.Project) (_ *console.Proje
|
||||
|
||||
return &console.Project{
|
||||
ID: id,
|
||||
PublicID: publicID,
|
||||
Name: project.Name,
|
||||
Description: project.Description,
|
||||
PartnerID: partnerID,
|
||||
|
@ -1,37 +1,36 @@
|
||||
// Copyright (C) 2019 Storj Labs, Inc.
|
||||
// See LICENSE for copying information.
|
||||
|
||||
package satellitedb
|
||||
package satellitedb_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"storj.io/storj/satellite/satellitedb/dbx"
|
||||
"storj.io/common/testcontext"
|
||||
"storj.io/storj/satellite"
|
||||
"storj.io/storj/satellite/console"
|
||||
"storj.io/storj/satellite/satellitedb/satellitedbtest"
|
||||
)
|
||||
|
||||
func TestProjectFromDbx(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
func TestProjectsGetByPublicID(t *testing.T) {
|
||||
satellitedbtest.Run(t, func(ctx *testcontext.Context, t *testing.T, db satellite.DB) {
|
||||
projects := db.Console().Projects()
|
||||
|
||||
t.Run("can't create dbo from nil dbx model", func(t *testing.T) {
|
||||
project, err := projectFromDBX(ctx, nil)
|
||||
|
||||
assert.Nil(t, project)
|
||||
assert.NotNil(t, err)
|
||||
assert.Error(t, err)
|
||||
prj, err := projects.Insert(ctx, &console.Project{
|
||||
Name: "ProjectName",
|
||||
Description: "projects description",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, prj)
|
||||
|
||||
t.Run("can't create dbo from dbx model with invalid ID", func(t *testing.T) {
|
||||
dbxProject := dbx.Project{
|
||||
Id: []byte("qweqwe"),
|
||||
}
|
||||
pubID := prj.PublicID
|
||||
require.NotNil(t, pubID)
|
||||
require.False(t, pubID.IsZero())
|
||||
|
||||
project, err := projectFromDBX(ctx, &dbxProject)
|
||||
|
||||
assert.Nil(t, project)
|
||||
assert.NotNil(t, err)
|
||||
assert.Error(t, err)
|
||||
prj, err = projects.GetByPublicID(ctx, pubID)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, pubID, prj.PublicID)
|
||||
})
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user