storj/satellite/payments/localpayments/local.go

121 lines
3.5 KiB
Go
Raw Normal View History

2019-06-03 14:46:57 +01:00
// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package localpayments
import (
"context"
"crypto/rand"
"time"
"github.com/zeebo/errs"
monkit "gopkg.in/spacemonkeygo/monkit.v2"
2019-06-03 14:46:57 +01:00
"storj.io/storj/satellite/payments"
)
var (
// creationDate is a Storj creation date.
creationDate = time.Date(2016, 1, 1, 0, 0, 0, 0, time.UTC)
mon = monkit.Package()
)
2019-06-03 14:46:57 +01:00
// StorjCustomer is a predefined customer
// which is linked with every user by default
var storjCustomer = payments.Customer{
ID: []byte("0"),
Name: "Storj",
Email: "storj@mail.test",
CreatedAt: creationDate,
}
2019-06-03 14:46:57 +01:00
// defaultPaymentMethod represents one and only payment method for local payments,
// which attached to all customers by default
var defaultPaymentMethod = payments.PaymentMethod{
ID: []byte("0"),
CustomerID: []byte("0"),
Card: payments.Card{
Country: "us",
Brand: "visa",
Name: "Storj Labs",
2019-06-03 14:46:57 +01:00
ExpMonth: 12,
ExpYear: 2024,
LastFour: "3567",
2019-06-03 14:46:57 +01:00
},
CreatedAt: creationDate,
2019-06-03 14:46:57 +01:00
}
// internalPaymentsErr is a wrapper for local payments service errors
var internalPaymentsErr = errs.Class("internal payments error")
// DB is internal payment methods storage
type DB interface {
// TODO: add method to retrieve invoice information from project invoice stamp
}
// service is internal payments.Service implementation
type service struct {
db DB
}
// NewService create new instance of local payments service
func NewService(db DB) payments.Service {
return &service{db: db}
}
// CreateCustomer creates new payments.Customer with random id to satisfy unique db constraint
func (*service) CreateCustomer(ctx context.Context, params payments.CreateCustomerParams) (_ *payments.Customer, err error) {
defer mon.Task()(&ctx)(&err)
2019-06-03 14:46:57 +01:00
var b [8]byte
_, err = rand.Read(b[:])
2019-06-03 14:46:57 +01:00
if err != nil {
return nil, internalPaymentsErr.New("error creating customer")
}
return &payments.Customer{
ID: b[:],
}, nil
}
// GetCustomer always returns default storjCustomer
func (*service) GetCustomer(ctx context.Context, id []byte) (_ *payments.Customer, err error) {
defer mon.Task()(&ctx)(&err)
2019-06-03 14:46:57 +01:00
return &storjCustomer, nil
}
// GetCustomerDefaultPaymentMethod always returns defaultPaymentMethod
func (*service) GetCustomerDefaultPaymentMethod(ctx context.Context, customerID []byte) (_ *payments.PaymentMethod, err error) {
defer mon.Task()(&ctx)(&err)
2019-06-03 14:46:57 +01:00
return &defaultPaymentMethod, nil
}
// GetCustomerPaymentsMethods always returns payments.Customer list with defaultPaymentMethod
func (*service) GetCustomerPaymentsMethods(ctx context.Context, customerID []byte) (_ []payments.PaymentMethod, err error) {
defer mon.Task()(&ctx)(&err)
2019-06-03 14:46:57 +01:00
return []payments.PaymentMethod{defaultPaymentMethod}, nil
}
// GetPaymentMethod always returns defaultPaymentMethod or error
func (*service) GetPaymentMethod(ctx context.Context, id []byte) (_ *payments.PaymentMethod, err error) {
defer mon.Task()(&ctx)(&err)
return &defaultPaymentMethod, nil
2019-06-03 14:46:57 +01:00
}
// CreateProjectInvoice creates invoice from provided params
func (*service) CreateProjectInvoice(ctx context.Context, params payments.CreateProjectInvoiceParams) (_ *payments.Invoice, err error) {
defer mon.Task()(&ctx)(&err)
2019-06-03 14:46:57 +01:00
// TODO: fill data
return &payments.Invoice{}, nil
}
// GetInvoice retrieves invoice information from project invoice stamp by invoice id
// and returns invoice
func (*service) GetInvoice(ctx context.Context, id []byte) (_ *payments.Invoice, err error) {
defer mon.Task()(&ctx)(&err)
2019-06-03 14:46:57 +01:00
// TODO: get project invoice stamp by invoice id from the db and fill data
return &payments.Invoice{}, nil
}