TequilaOne
@TequilaOne

Как выполняется валидация покупок?

Есть репозиторий https://github.com/panuwattoa/in-app-purchase/

В файле validate.go есть функция func NewValidate() , которая требует sg Storage.
Как правильно описать/реализовать этот Storage, чтоб его туда можно было передать ? Может кто написать пример?

type Storage interface {
	StorePurchases(ctx context.Context, sp []*Purchase) ([]*Purchase, error)
	StoreSubscriptionPurchases(ctx context.Context, sp []*SubscriptionPurchase) ([]*SubscriptionPurchase, error)
}

func NewValidate(sg Storage, applePassword string, gc IAPGoogleConfig) *Validate {
	return &Validate{
		Storage:       sg,
		ApplePassword: applePassword,
		GoogleConfig:  gc,
	}
}


c applePassword и IAPGoogleConfig понятно,

googleConfig := validate.IAPGoogleConfig{
		ClientEmail: "ivan-ivanov@gmail.com",
		PrivateKey:  "123456789abcdefg",
	}

NewValidate(STORAGE,  "",  googleConfig)


как должен выглядеть STORAGE ?
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
Судя по методам интерфейса Storage нужен для того, чтобы эта библиотека имела возможность сохранять в вашу базу данные подписки/оплаты.

Можете начать с того, что сделаете пустую реализацию, посмотрите какие параметры вам будут приходить/какие будут нужны и там уже разберётесь как вам удобнее сохранить данные.
Допустим вы будете хранить данные в MySQL... тогда реализация может выглядеть вот так
type MySQLStorage struct {
    db *sql.DB
}

func NewMySQLStorage(db *sql.DB) *MySQLStorage {
    return &MySQLStorage{
        db: db,
    }
}

func (sg *MySQLStorage) StorePurchases(ctx context.Context, sp []*Purchase) ([]*Purchase, error) {
    for _, p := range sp {
        fmt.Printf("%+v\n", p)
    }

    return sp, nil
}

func (sg *MySQLStorage) StoreSubscriptionPurchases(ctx context.Context, sp []*SubscriptionPurchase) ([]*SubscriptionPurchase, error) {
    for _, p := range sp {
        fmt.Printf("%+v\n", p)
    }

    return sp, nil
}

т.е. вызов может быть таким
db := connectToDB...
sg := NewMySQLStorage(db)
NewValidate(sg  "",  googleConfig)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час