value attribution DB interface Insert & Get method support (#2200)
* value attribution DB interface methods support
This commit is contained in:
parent
8398fae9b5
commit
09940d4e0b
24
pkg/valueattribution/valueattribution.go
Normal file
24
pkg/valueattribution/valueattribution.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Copyright (C) 2019 Storj Labs, Inc.
|
||||||
|
// See LICENSE for copying information.
|
||||||
|
|
||||||
|
package valueattribution
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PartnerInfo describing connector/partner key info in the database
|
||||||
|
type PartnerInfo struct {
|
||||||
|
PartnerID []byte
|
||||||
|
BucketName []byte
|
||||||
|
CreatedAt time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
// DB implements the database for value attribution table
|
||||||
|
type DB interface {
|
||||||
|
// Get retrieves partner id using bucket name
|
||||||
|
Get(ctx context.Context, buckname []byte) (*PartnerInfo, error)
|
||||||
|
// Insert creates and stores new ConnectorKeyInfo
|
||||||
|
Insert(ctx context.Context, info *PartnerInfo) (*PartnerInfo, error)
|
||||||
|
}
|
63
pkg/valueattribution/valueattribution_test.go
Normal file
63
pkg/valueattribution/valueattribution_test.go
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
// Copyright (C) 2019 Storj Labs, Inc.
|
||||||
|
// See LICENSE for copying information.
|
||||||
|
|
||||||
|
package valueattribution_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
"storj.io/storj/internal/testcontext"
|
||||||
|
"storj.io/storj/pkg/valueattribution"
|
||||||
|
"storj.io/storj/satellite"
|
||||||
|
"storj.io/storj/satellite/satellitedb/satellitedbtest"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestValueAttribution(t *testing.T) {
|
||||||
|
satellitedbtest.Run(t, func(t *testing.T, db satellite.DB) {
|
||||||
|
ctx := testcontext.New(t)
|
||||||
|
defer ctx.Cleanup()
|
||||||
|
|
||||||
|
valAttrdb := db.ValueAttribution()
|
||||||
|
|
||||||
|
// unique partner and bucket
|
||||||
|
partnerInfo := &valueattribution.PartnerInfo{
|
||||||
|
PartnerID: []byte("valueattribution testcase partnerID"),
|
||||||
|
BucketName: []byte("valueattribution testcase bucketname"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// same partner and dfferent bucket
|
||||||
|
partnerInfo1 := &valueattribution.PartnerInfo{
|
||||||
|
PartnerID: []byte("valueattribution testcase partnerID"),
|
||||||
|
BucketName: []byte("valueattribution testcase different bucketname"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// different partner and existing bucket
|
||||||
|
partnerInfo2 := &valueattribution.PartnerInfo{
|
||||||
|
PartnerID: []byte("valueattribution testcase different partnerID"),
|
||||||
|
BucketName: []byte("valueattribution testcase different bucketname"),
|
||||||
|
}
|
||||||
|
|
||||||
|
{ // Insert
|
||||||
|
_, err := valAttrdb.Insert(ctx, partnerInfo)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = valAttrdb.Insert(ctx, partnerInfo1)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = valAttrdb.Insert(ctx, partnerInfo2)
|
||||||
|
assert.Error(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
{ // Get
|
||||||
|
info, err := valAttrdb.Get(ctx, partnerInfo.BucketName)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, partnerInfo.PartnerID, info.PartnerID)
|
||||||
|
|
||||||
|
info, err = valAttrdb.Get(ctx, partnerInfo1.BucketName)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, partnerInfo1.PartnerID, info.PartnerID)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
@ -43,6 +43,7 @@ import (
|
|||||||
"storj.io/storj/pkg/server"
|
"storj.io/storj/pkg/server"
|
||||||
"storj.io/storj/pkg/storj"
|
"storj.io/storj/pkg/storj"
|
||||||
"storj.io/storj/pkg/transport"
|
"storj.io/storj/pkg/transport"
|
||||||
|
"storj.io/storj/pkg/valueattribution"
|
||||||
"storj.io/storj/satellite/console"
|
"storj.io/storj/satellite/console"
|
||||||
"storj.io/storj/satellite/console/consoleauth"
|
"storj.io/storj/satellite/console/consoleauth"
|
||||||
"storj.io/storj/satellite/console/consoleweb"
|
"storj.io/storj/satellite/console/consoleweb"
|
||||||
@ -79,6 +80,8 @@ type DB interface {
|
|||||||
CertDB() certdb.DB
|
CertDB() certdb.DB
|
||||||
// OverlayCache returns database for caching overlay information
|
// OverlayCache returns database for caching overlay information
|
||||||
OverlayCache() overlay.DB
|
OverlayCache() overlay.DB
|
||||||
|
// ValueAttribution returns database for partner keys information
|
||||||
|
ValueAttribution() valueattribution.DB
|
||||||
// StoragenodeAccounting returns database for storing information about storagenode use
|
// StoragenodeAccounting returns database for storing information about storagenode use
|
||||||
StoragenodeAccounting() accounting.StoragenodeAccounting
|
StoragenodeAccounting() accounting.StoragenodeAccounting
|
||||||
// ProjectAccounting returns database for storing information about project data use
|
// ProjectAccounting returns database for storing information about project data use
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
"storj.io/storj/pkg/datarepair/irreparable"
|
"storj.io/storj/pkg/datarepair/irreparable"
|
||||||
"storj.io/storj/pkg/datarepair/queue"
|
"storj.io/storj/pkg/datarepair/queue"
|
||||||
"storj.io/storj/pkg/overlay"
|
"storj.io/storj/pkg/overlay"
|
||||||
|
"storj.io/storj/pkg/valueattribution"
|
||||||
"storj.io/storj/satellite"
|
"storj.io/storj/satellite"
|
||||||
"storj.io/storj/satellite/console"
|
"storj.io/storj/satellite/console"
|
||||||
"storj.io/storj/satellite/marketing"
|
"storj.io/storj/satellite/marketing"
|
||||||
@ -97,6 +98,11 @@ func (db *DB) CertDB() certdb.DB {
|
|||||||
return &certDB{db: db.db}
|
return &certDB{db: db.db}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ValueAttribution is a getter for valueattribution repository
|
||||||
|
func (db *DB) ValueAttribution() valueattribution.DB {
|
||||||
|
return &valueattributionDB{db: db.db}
|
||||||
|
}
|
||||||
|
|
||||||
// OverlayCache is a getter for overlay cache repository
|
// OverlayCache is a getter for overlay cache repository
|
||||||
func (db *DB) OverlayCache() overlay.DB {
|
func (db *DB) OverlayCache() overlay.DB {
|
||||||
return &overlaycache{db: db.db}
|
return &overlaycache{db: db.db}
|
||||||
|
@ -7,7 +7,15 @@ model value_attribution (
|
|||||||
field project_id blob
|
field project_id blob
|
||||||
field bucket_name blob
|
field bucket_name blob
|
||||||
field partner_id blob
|
field partner_id blob
|
||||||
field last_updated utimestamp
|
field last_updated utimestamp ( autoinsert, autoupdate )
|
||||||
|
)
|
||||||
|
|
||||||
|
create value_attribution ()
|
||||||
|
delete value_attribution ( where value_attribution.bucket_name = ? )
|
||||||
|
|
||||||
|
read one (
|
||||||
|
select value_attribution
|
||||||
|
where value_attribution.bucket_name = ?
|
||||||
)
|
)
|
||||||
|
|
||||||
//--- containment ---//
|
//--- containment ---//
|
||||||
|
@ -4810,6 +4810,32 @@ type Value_Row struct {
|
|||||||
Value time.Time
|
Value time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj *postgresImpl) Create_ValueAttribution(ctx context.Context,
|
||||||
|
value_attribution_project_id ValueAttribution_ProjectId_Field,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field,
|
||||||
|
value_attribution_partner_id ValueAttribution_PartnerId_Field) (
|
||||||
|
value_attribution *ValueAttribution, err error) {
|
||||||
|
|
||||||
|
__now := obj.db.Hooks.Now().UTC()
|
||||||
|
__project_id_val := value_attribution_project_id.value()
|
||||||
|
__bucket_name_val := value_attribution_bucket_name.value()
|
||||||
|
__partner_id_val := value_attribution_partner_id.value()
|
||||||
|
__last_updated_val := __now.UTC()
|
||||||
|
|
||||||
|
var __embed_stmt = __sqlbundle_Literal("INSERT INTO value_attributions ( project_id, bucket_name, partner_id, last_updated ) VALUES ( ?, ?, ?, ? ) RETURNING value_attributions.project_id, value_attributions.bucket_name, value_attributions.partner_id, value_attributions.last_updated")
|
||||||
|
|
||||||
|
var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt)
|
||||||
|
obj.logStmt(__stmt, __project_id_val, __bucket_name_val, __partner_id_val, __last_updated_val)
|
||||||
|
|
||||||
|
value_attribution = &ValueAttribution{}
|
||||||
|
err = obj.driver.QueryRow(__stmt, __project_id_val, __bucket_name_val, __partner_id_val, __last_updated_val).Scan(&value_attribution.ProjectId, &value_attribution.BucketName, &value_attribution.PartnerId, &value_attribution.LastUpdated)
|
||||||
|
if err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
return value_attribution, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (obj *postgresImpl) Create_PendingAudits(ctx context.Context,
|
func (obj *postgresImpl) Create_PendingAudits(ctx context.Context,
|
||||||
pending_audits_node_id PendingAudits_NodeId_Field,
|
pending_audits_node_id PendingAudits_NodeId_Field,
|
||||||
pending_audits_piece_id PendingAudits_PieceId_Field,
|
pending_audits_piece_id PendingAudits_PieceId_Field,
|
||||||
@ -5472,6 +5498,49 @@ func (obj *postgresImpl) Create_UserCredit(ctx context.Context,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj *postgresImpl) Get_ValueAttribution_By_BucketName(ctx context.Context,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field) (
|
||||||
|
value_attribution *ValueAttribution, err error) {
|
||||||
|
|
||||||
|
var __embed_stmt = __sqlbundle_Literal("SELECT value_attributions.project_id, value_attributions.bucket_name, value_attributions.partner_id, value_attributions.last_updated FROM value_attributions WHERE value_attributions.bucket_name = ? LIMIT 2")
|
||||||
|
|
||||||
|
var __values []interface{}
|
||||||
|
__values = append(__values, value_attribution_bucket_name.value())
|
||||||
|
|
||||||
|
var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt)
|
||||||
|
obj.logStmt(__stmt, __values...)
|
||||||
|
|
||||||
|
__rows, err := obj.driver.Query(__stmt, __values...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
defer __rows.Close()
|
||||||
|
|
||||||
|
if !__rows.Next() {
|
||||||
|
if err := __rows.Err(); err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
return nil, makeErr(sql.ErrNoRows)
|
||||||
|
}
|
||||||
|
|
||||||
|
value_attribution = &ValueAttribution{}
|
||||||
|
err = __rows.Scan(&value_attribution.ProjectId, &value_attribution.BucketName, &value_attribution.PartnerId, &value_attribution.LastUpdated)
|
||||||
|
if err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if __rows.Next() {
|
||||||
|
return nil, tooManyRows("ValueAttribution_By_BucketName")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := __rows.Err(); err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return value_attribution, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (obj *postgresImpl) Get_PendingAudits_By_NodeId(ctx context.Context,
|
func (obj *postgresImpl) Get_PendingAudits_By_NodeId(ctx context.Context,
|
||||||
pending_audits_node_id PendingAudits_NodeId_Field) (
|
pending_audits_node_id PendingAudits_NodeId_Field) (
|
||||||
pending_audits *PendingAudits, err error) {
|
pending_audits *PendingAudits, err error) {
|
||||||
@ -7422,6 +7491,32 @@ func (obj *postgresImpl) Update_Offer_By_Id(ctx context.Context,
|
|||||||
return offer, nil
|
return offer, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj *postgresImpl) Delete_ValueAttribution_By_BucketName(ctx context.Context,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field) (
|
||||||
|
count int64, err error) {
|
||||||
|
|
||||||
|
var __embed_stmt = __sqlbundle_Literal("DELETE FROM value_attributions WHERE value_attributions.bucket_name = ?")
|
||||||
|
|
||||||
|
var __values []interface{}
|
||||||
|
__values = append(__values, value_attribution_bucket_name.value())
|
||||||
|
|
||||||
|
var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt)
|
||||||
|
obj.logStmt(__stmt, __values...)
|
||||||
|
|
||||||
|
__res, err := obj.driver.Exec(__stmt, __values...)
|
||||||
|
if err != nil {
|
||||||
|
return 0, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
count, err = __res.RowsAffected()
|
||||||
|
if err != nil {
|
||||||
|
return 0, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return count, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (obj *postgresImpl) Delete_PendingAudits_By_NodeId(ctx context.Context,
|
func (obj *postgresImpl) Delete_PendingAudits_By_NodeId(ctx context.Context,
|
||||||
pending_audits_node_id PendingAudits_NodeId_Field) (
|
pending_audits_node_id PendingAudits_NodeId_Field) (
|
||||||
deleted bool, err error) {
|
deleted bool, err error) {
|
||||||
@ -8039,6 +8134,35 @@ func (obj *postgresImpl) deleteAll(ctx context.Context) (count int64, err error)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj *sqlite3Impl) Create_ValueAttribution(ctx context.Context,
|
||||||
|
value_attribution_project_id ValueAttribution_ProjectId_Field,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field,
|
||||||
|
value_attribution_partner_id ValueAttribution_PartnerId_Field) (
|
||||||
|
value_attribution *ValueAttribution, err error) {
|
||||||
|
|
||||||
|
__now := obj.db.Hooks.Now().UTC()
|
||||||
|
__project_id_val := value_attribution_project_id.value()
|
||||||
|
__bucket_name_val := value_attribution_bucket_name.value()
|
||||||
|
__partner_id_val := value_attribution_partner_id.value()
|
||||||
|
__last_updated_val := __now.UTC()
|
||||||
|
|
||||||
|
var __embed_stmt = __sqlbundle_Literal("INSERT INTO value_attributions ( project_id, bucket_name, partner_id, last_updated ) VALUES ( ?, ?, ?, ? )")
|
||||||
|
|
||||||
|
var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt)
|
||||||
|
obj.logStmt(__stmt, __project_id_val, __bucket_name_val, __partner_id_val, __last_updated_val)
|
||||||
|
|
||||||
|
__res, err := obj.driver.Exec(__stmt, __project_id_val, __bucket_name_val, __partner_id_val, __last_updated_val)
|
||||||
|
if err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
__pk, err := __res.LastInsertId()
|
||||||
|
if err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
return obj.getLastValueAttribution(ctx, __pk)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (obj *sqlite3Impl) Create_PendingAudits(ctx context.Context,
|
func (obj *sqlite3Impl) Create_PendingAudits(ctx context.Context,
|
||||||
pending_audits_node_id PendingAudits_NodeId_Field,
|
pending_audits_node_id PendingAudits_NodeId_Field,
|
||||||
pending_audits_piece_id PendingAudits_PieceId_Field,
|
pending_audits_piece_id PendingAudits_PieceId_Field,
|
||||||
@ -8767,6 +8891,49 @@ func (obj *sqlite3Impl) Create_UserCredit(ctx context.Context,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj *sqlite3Impl) Get_ValueAttribution_By_BucketName(ctx context.Context,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field) (
|
||||||
|
value_attribution *ValueAttribution, err error) {
|
||||||
|
|
||||||
|
var __embed_stmt = __sqlbundle_Literal("SELECT value_attributions.project_id, value_attributions.bucket_name, value_attributions.partner_id, value_attributions.last_updated FROM value_attributions WHERE value_attributions.bucket_name = ? LIMIT 2")
|
||||||
|
|
||||||
|
var __values []interface{}
|
||||||
|
__values = append(__values, value_attribution_bucket_name.value())
|
||||||
|
|
||||||
|
var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt)
|
||||||
|
obj.logStmt(__stmt, __values...)
|
||||||
|
|
||||||
|
__rows, err := obj.driver.Query(__stmt, __values...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
defer __rows.Close()
|
||||||
|
|
||||||
|
if !__rows.Next() {
|
||||||
|
if err := __rows.Err(); err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
return nil, makeErr(sql.ErrNoRows)
|
||||||
|
}
|
||||||
|
|
||||||
|
value_attribution = &ValueAttribution{}
|
||||||
|
err = __rows.Scan(&value_attribution.ProjectId, &value_attribution.BucketName, &value_attribution.PartnerId, &value_attribution.LastUpdated)
|
||||||
|
if err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if __rows.Next() {
|
||||||
|
return nil, tooManyRows("ValueAttribution_By_BucketName")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := __rows.Err(); err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return value_attribution, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (obj *sqlite3Impl) Get_PendingAudits_By_NodeId(ctx context.Context,
|
func (obj *sqlite3Impl) Get_PendingAudits_By_NodeId(ctx context.Context,
|
||||||
pending_audits_node_id PendingAudits_NodeId_Field) (
|
pending_audits_node_id PendingAudits_NodeId_Field) (
|
||||||
pending_audits *PendingAudits, err error) {
|
pending_audits *PendingAudits, err error) {
|
||||||
@ -10817,6 +10984,32 @@ func (obj *sqlite3Impl) Update_Offer_By_Id(ctx context.Context,
|
|||||||
return offer, nil
|
return offer, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj *sqlite3Impl) Delete_ValueAttribution_By_BucketName(ctx context.Context,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field) (
|
||||||
|
count int64, err error) {
|
||||||
|
|
||||||
|
var __embed_stmt = __sqlbundle_Literal("DELETE FROM value_attributions WHERE value_attributions.bucket_name = ?")
|
||||||
|
|
||||||
|
var __values []interface{}
|
||||||
|
__values = append(__values, value_attribution_bucket_name.value())
|
||||||
|
|
||||||
|
var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt)
|
||||||
|
obj.logStmt(__stmt, __values...)
|
||||||
|
|
||||||
|
__res, err := obj.driver.Exec(__stmt, __values...)
|
||||||
|
if err != nil {
|
||||||
|
return 0, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
count, err = __res.RowsAffected()
|
||||||
|
if err != nil {
|
||||||
|
return 0, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return count, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (obj *sqlite3Impl) Delete_PendingAudits_By_NodeId(ctx context.Context,
|
func (obj *sqlite3Impl) Delete_PendingAudits_By_NodeId(ctx context.Context,
|
||||||
pending_audits_node_id PendingAudits_NodeId_Field) (
|
pending_audits_node_id PendingAudits_NodeId_Field) (
|
||||||
deleted bool, err error) {
|
deleted bool, err error) {
|
||||||
@ -11156,6 +11349,24 @@ func (obj *sqlite3Impl) Delete_ResetPasswordToken_By_Secret(ctx context.Context,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj *sqlite3Impl) getLastValueAttribution(ctx context.Context,
|
||||||
|
pk int64) (
|
||||||
|
value_attribution *ValueAttribution, err error) {
|
||||||
|
|
||||||
|
var __embed_stmt = __sqlbundle_Literal("SELECT value_attributions.project_id, value_attributions.bucket_name, value_attributions.partner_id, value_attributions.last_updated FROM value_attributions WHERE _rowid_ = ?")
|
||||||
|
|
||||||
|
var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt)
|
||||||
|
obj.logStmt(__stmt, pk)
|
||||||
|
|
||||||
|
value_attribution = &ValueAttribution{}
|
||||||
|
err = obj.driver.QueryRow(__stmt, pk).Scan(&value_attribution.ProjectId, &value_attribution.BucketName, &value_attribution.PartnerId, &value_attribution.LastUpdated)
|
||||||
|
if err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
return value_attribution, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (obj *sqlite3Impl) getLastPendingAudits(ctx context.Context,
|
func (obj *sqlite3Impl) getLastPendingAudits(ctx context.Context,
|
||||||
pk int64) (
|
pk int64) (
|
||||||
pending_audits *PendingAudits, err error) {
|
pending_audits *PendingAudits, err error) {
|
||||||
@ -12371,6 +12582,19 @@ func (rx *Rx) Create_UserPayment(ctx context.Context,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rx *Rx) Create_ValueAttribution(ctx context.Context,
|
||||||
|
value_attribution_project_id ValueAttribution_ProjectId_Field,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field,
|
||||||
|
value_attribution_partner_id ValueAttribution_PartnerId_Field) (
|
||||||
|
value_attribution *ValueAttribution, err error) {
|
||||||
|
var tx *Tx
|
||||||
|
if tx, err = rx.getTx(ctx); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return tx.Create_ValueAttribution(ctx, value_attribution_project_id, value_attribution_bucket_name, value_attribution_partner_id)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (rx *Rx) Delete_AccountingRollup_By_Id(ctx context.Context,
|
func (rx *Rx) Delete_AccountingRollup_By_Id(ctx context.Context,
|
||||||
accounting_rollup_id AccountingRollup_Id_Field) (
|
accounting_rollup_id AccountingRollup_Id_Field) (
|
||||||
deleted bool, err error) {
|
deleted bool, err error) {
|
||||||
@ -12503,6 +12727,17 @@ func (rx *Rx) Delete_User_By_Id(ctx context.Context,
|
|||||||
return tx.Delete_User_By_Id(ctx, user_id)
|
return tx.Delete_User_By_Id(ctx, user_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rx *Rx) Delete_ValueAttribution_By_BucketName(ctx context.Context,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field) (
|
||||||
|
count int64, err error) {
|
||||||
|
var tx *Tx
|
||||||
|
if tx, err = rx.getTx(ctx); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return tx.Delete_ValueAttribution_By_BucketName(ctx, value_attribution_bucket_name)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (rx *Rx) Find_AccountingTimestamps_Value_By_Name(ctx context.Context,
|
func (rx *Rx) Find_AccountingTimestamps_Value_By_Name(ctx context.Context,
|
||||||
accounting_timestamps_name AccountingTimestamps_Name_Field) (
|
accounting_timestamps_name AccountingTimestamps_Name_Field) (
|
||||||
row *Value_Row, err error) {
|
row *Value_Row, err error) {
|
||||||
@ -12769,6 +13004,16 @@ func (rx *Rx) Get_User_By_Id(ctx context.Context,
|
|||||||
return tx.Get_User_By_Id(ctx, user_id)
|
return tx.Get_User_By_Id(ctx, user_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rx *Rx) Get_ValueAttribution_By_BucketName(ctx context.Context,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field) (
|
||||||
|
value_attribution *ValueAttribution, err error) {
|
||||||
|
var tx *Tx
|
||||||
|
if tx, err = rx.getTx(ctx); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return tx.Get_ValueAttribution_By_BucketName(ctx, value_attribution_bucket_name)
|
||||||
|
}
|
||||||
|
|
||||||
func (rx *Rx) Limited_BucketUsage_By_BucketId_And_RollupEndTime_Greater_And_RollupEndTime_LessOrEqual_OrderBy_Asc_RollupEndTime(ctx context.Context,
|
func (rx *Rx) Limited_BucketUsage_By_BucketId_And_RollupEndTime_Greater_And_RollupEndTime_LessOrEqual_OrderBy_Asc_RollupEndTime(ctx context.Context,
|
||||||
bucket_usage_bucket_id BucketUsage_BucketId_Field,
|
bucket_usage_bucket_id BucketUsage_BucketId_Field,
|
||||||
bucket_usage_rollup_end_time_greater BucketUsage_RollupEndTime_Field,
|
bucket_usage_rollup_end_time_greater BucketUsage_RollupEndTime_Field,
|
||||||
@ -13188,6 +13433,12 @@ type Methods interface {
|
|||||||
user_payment_customer_id UserPayment_CustomerId_Field) (
|
user_payment_customer_id UserPayment_CustomerId_Field) (
|
||||||
user_payment *UserPayment, err error)
|
user_payment *UserPayment, err error)
|
||||||
|
|
||||||
|
Create_ValueAttribution(ctx context.Context,
|
||||||
|
value_attribution_project_id ValueAttribution_ProjectId_Field,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field,
|
||||||
|
value_attribution_partner_id ValueAttribution_PartnerId_Field) (
|
||||||
|
value_attribution *ValueAttribution, err error)
|
||||||
|
|
||||||
Delete_AccountingRollup_By_Id(ctx context.Context,
|
Delete_AccountingRollup_By_Id(ctx context.Context,
|
||||||
accounting_rollup_id AccountingRollup_Id_Field) (
|
accounting_rollup_id AccountingRollup_Id_Field) (
|
||||||
deleted bool, err error)
|
deleted bool, err error)
|
||||||
@ -13241,6 +13492,10 @@ type Methods interface {
|
|||||||
user_id User_Id_Field) (
|
user_id User_Id_Field) (
|
||||||
deleted bool, err error)
|
deleted bool, err error)
|
||||||
|
|
||||||
|
Delete_ValueAttribution_By_BucketName(ctx context.Context,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field) (
|
||||||
|
count int64, err error)
|
||||||
|
|
||||||
Find_AccountingTimestamps_Value_By_Name(ctx context.Context,
|
Find_AccountingTimestamps_Value_By_Name(ctx context.Context,
|
||||||
accounting_timestamps_name AccountingTimestamps_Name_Field) (
|
accounting_timestamps_name AccountingTimestamps_Name_Field) (
|
||||||
row *Value_Row, err error)
|
row *Value_Row, err error)
|
||||||
@ -13351,6 +13606,10 @@ type Methods interface {
|
|||||||
user_id User_Id_Field) (
|
user_id User_Id_Field) (
|
||||||
user *User, err error)
|
user *User, err error)
|
||||||
|
|
||||||
|
Get_ValueAttribution_By_BucketName(ctx context.Context,
|
||||||
|
value_attribution_bucket_name ValueAttribution_BucketName_Field) (
|
||||||
|
value_attribution *ValueAttribution, err error)
|
||||||
|
|
||||||
Limited_BucketUsage_By_BucketId_And_RollupEndTime_Greater_And_RollupEndTime_LessOrEqual_OrderBy_Asc_RollupEndTime(ctx context.Context,
|
Limited_BucketUsage_By_BucketId_And_RollupEndTime_Greater_And_RollupEndTime_LessOrEqual_OrderBy_Asc_RollupEndTime(ctx context.Context,
|
||||||
bucket_usage_bucket_id BucketUsage_BucketId_Field,
|
bucket_usage_bucket_id BucketUsage_BucketId_Field,
|
||||||
bucket_usage_rollup_end_time_greater BucketUsage_RollupEndTime_Field,
|
bucket_usage_rollup_end_time_greater BucketUsage_RollupEndTime_Field,
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
"storj.io/storj/pkg/overlay"
|
"storj.io/storj/pkg/overlay"
|
||||||
"storj.io/storj/pkg/pb"
|
"storj.io/storj/pkg/pb"
|
||||||
"storj.io/storj/pkg/storj"
|
"storj.io/storj/pkg/storj"
|
||||||
|
"storj.io/storj/pkg/valueattribution"
|
||||||
"storj.io/storj/satellite"
|
"storj.io/storj/satellite"
|
||||||
"storj.io/storj/satellite/console"
|
"storj.io/storj/satellite/console"
|
||||||
"storj.io/storj/satellite/marketing"
|
"storj.io/storj/satellite/marketing"
|
||||||
@ -653,10 +654,10 @@ func (m *lockedOffers) Create(ctx context.Context, offer *marketing.NewOffer) (*
|
|||||||
return m.db.Create(ctx, offer)
|
return m.db.Create(ctx, offer)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *lockedOffers) Finish(ctx context.Context, offerId int) error {
|
func (m *lockedOffers) Finish(ctx context.Context, offerID int) error {
|
||||||
m.Lock()
|
m.Lock()
|
||||||
defer m.Unlock()
|
defer m.Unlock()
|
||||||
return m.db.Finish(ctx, offerId)
|
return m.db.Finish(ctx, offerID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *lockedOffers) GetCurrentByType(ctx context.Context, offerType marketing.OfferType) (*marketing.Offer, error) {
|
func (m *lockedOffers) GetCurrentByType(ctx context.Context, offerType marketing.OfferType) (*marketing.Offer, error) {
|
||||||
@ -671,10 +672,10 @@ func (m *lockedOffers) ListAll(ctx context.Context) ([]marketing.Offer, error) {
|
|||||||
return m.db.ListAll(ctx)
|
return m.db.ListAll(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *lockedOffers) Redeem(ctx context.Context, offerId int) error {
|
func (m *lockedOffers) Redeem(ctx context.Context, offerID int) error {
|
||||||
m.Lock()
|
m.Lock()
|
||||||
defer m.Unlock()
|
defer m.Unlock()
|
||||||
return m.db.Redeem(ctx, offerId)
|
return m.db.Redeem(ctx, offerID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Orders returns database for orders
|
// Orders returns database for orders
|
||||||
@ -1007,3 +1008,30 @@ func (m *lockedStoragenodeAccounting) SaveTallies(ctx context.Context, latestTal
|
|||||||
defer m.Unlock()
|
defer m.Unlock()
|
||||||
return m.db.SaveTallies(ctx, latestTally, nodeData)
|
return m.db.SaveTallies(ctx, latestTally, nodeData)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ValueAttribution returns database for partner keys information
|
||||||
|
func (m *locked) ValueAttribution() valueattribution.DB {
|
||||||
|
m.Lock()
|
||||||
|
defer m.Unlock()
|
||||||
|
return &lockedValueAttribution{m.Locker, m.db.ValueAttribution()}
|
||||||
|
}
|
||||||
|
|
||||||
|
// lockedValueAttribution implements locking wrapper for valueattribution.DB
|
||||||
|
type lockedValueAttribution struct {
|
||||||
|
sync.Locker
|
||||||
|
db valueattribution.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get retrieves partner id using bucket name
|
||||||
|
func (m *lockedValueAttribution) Get(ctx context.Context, buckname []byte) (*valueattribution.PartnerInfo, error) {
|
||||||
|
m.Lock()
|
||||||
|
defer m.Unlock()
|
||||||
|
return m.db.Get(ctx, buckname)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert creates and stores new ConnectorKeyInfo
|
||||||
|
func (m *lockedValueAttribution) Insert(ctx context.Context, info *valueattribution.PartnerInfo) (*valueattribution.PartnerInfo, error) {
|
||||||
|
m.Lock()
|
||||||
|
defer m.Unlock()
|
||||||
|
return m.db.Insert(ctx, info)
|
||||||
|
}
|
||||||
|
48
satellite/satellitedb/valueattribution.go
Normal file
48
satellite/satellitedb/valueattribution.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
// Copyright (C) 2019 Storj Labs, Inc.
|
||||||
|
// See LICENSE for copying information.
|
||||||
|
|
||||||
|
package satellitedb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"storj.io/storj/pkg/valueattribution"
|
||||||
|
dbx "storj.io/storj/satellite/satellitedb/dbx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type valueattributionDB struct {
|
||||||
|
db *dbx.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get reads the partner info
|
||||||
|
func (keys *valueattributionDB) Get(ctx context.Context, bucketname []byte) (info *valueattribution.PartnerInfo, err error) {
|
||||||
|
defer mon.Task()(&ctx)(&err)
|
||||||
|
|
||||||
|
dbxInfo, err := keys.db.Get_ValueAttribution_By_BucketName(ctx, dbx.ValueAttribution_BucketName(bucketname))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &valueattribution.PartnerInfo{
|
||||||
|
PartnerID: dbxInfo.PartnerId,
|
||||||
|
BucketName: dbxInfo.BucketName,
|
||||||
|
CreatedAt: dbxInfo.LastUpdated,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert implements create partner info
|
||||||
|
func (keys *valueattributionDB) Insert(ctx context.Context, partnerinfo *valueattribution.PartnerInfo) (info *valueattribution.PartnerInfo, err error) {
|
||||||
|
defer mon.Task()(&ctx)(&err)
|
||||||
|
|
||||||
|
dbxInfo, err := keys.db.Create_ValueAttribution(ctx, dbx.ValueAttribution_ProjectId(partnerinfo.BucketName[:16]),
|
||||||
|
dbx.ValueAttribution_BucketName(partnerinfo.BucketName), dbx.ValueAttribution_PartnerId(partnerinfo.PartnerID))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &valueattribution.PartnerInfo{
|
||||||
|
PartnerID: dbxInfo.PartnerId,
|
||||||
|
BucketName: dbxInfo.BucketName,
|
||||||
|
CreatedAt: dbxInfo.LastUpdated,
|
||||||
|
}, nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user