Skip to content

Commit

Permalink
Adds database tables for SKU
Browse files Browse the repository at this point in the history
  • Loading branch information
NejcZdovc committed Mar 23, 2020
1 parent e7b4691 commit 5ca7a4f
Show file tree
Hide file tree
Showing 19 changed files with 669 additions and 3 deletions.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ index|server_publisher_amounts_publisher_key_index|server_publisher_amounts|CREA
index|server_publisher_banner_publisher_key_index|server_publisher_banner|CREATE INDEX server_publisher_banner_publisher_key_index ON server_publisher_banner (publisher_key)
index|server_publisher_info_publisher_key_index|server_publisher_info|CREATE INDEX server_publisher_info_publisher_key_index ON server_publisher_info (publisher_key)
index|server_publisher_links_publisher_key_index|server_publisher_links|CREATE INDEX server_publisher_links_publisher_key_index ON server_publisher_links (publisher_key)
index|sku_order_items_order_id_index|sku_order_items|CREATE INDEX sku_order_items_order_id_index ON sku_order_items (order_id)
index|sku_order_items_order_item_id_index|sku_order_items|CREATE INDEX sku_order_items_order_item_id_index ON sku_order_items (order_item_id)
index|sku_transaction_order_id_index|sku_transaction|CREATE INDEX sku_transaction_order_id_index ON sku_transaction (order_id)
index|sqlite_autoindex_activity_info_1|activity_info|
index|sqlite_autoindex_contribution_info_1|contribution_info|
index|sqlite_autoindex_creds_batch_1|creds_batch|
Expand All @@ -27,6 +30,9 @@ index|sqlite_autoindex_server_publisher_amounts_1|server_publisher_amounts|
index|sqlite_autoindex_server_publisher_banner_1|server_publisher_banner|
index|sqlite_autoindex_server_publisher_info_1|server_publisher_info|
index|sqlite_autoindex_server_publisher_links_1|server_publisher_links|
index|sqlite_autoindex_sku_order_1|sku_order|
index|sqlite_autoindex_sku_order_items_1|sku_order_items|
index|sqlite_autoindex_sku_transaction_1|sku_transaction|
index|unblinded_tokens_creds_id_index|unblinded_tokens|CREATE INDEX unblinded_tokens_creds_id_index ON unblinded_tokens (creds_id)
table|activity_info|activity_info|CREATE TABLE activity_info (publisher_id LONGVARCHAR NOT NULL,duration INTEGER DEFAULT 0 NOT NULL,visits INTEGER DEFAULT 0 NOT NULL,score DOUBLE DEFAULT 0 NOT NULL,percent INTEGER DEFAULT 0 NOT NULL,weight DOUBLE DEFAULT 0 NOT NULL,reconcile_stamp INTEGER DEFAULT 0 NOT NULL,CONSTRAINT activity_unique UNIQUE (publisher_id, reconcile_stamp))
table|contribution_info|contribution_info|CREATE TABLE contribution_info (contribution_id TEXT NOT NULL,amount DOUBLE NOT NULL,type INTEGER NOT NULL,step INTEGER NOT NULL DEFAULT -1,retry_count INTEGER NOT NULL DEFAULT -1,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, processor INTEGER NOT NULL DEFAULT 1,PRIMARY KEY (contribution_id))
Expand All @@ -44,5 +50,8 @@ table|server_publisher_amounts|server_publisher_amounts|CREATE TABLE server_publ
table|server_publisher_banner|server_publisher_banner|CREATE TABLE server_publisher_banner (publisher_key LONGVARCHAR PRIMARY KEY NOT NULL UNIQUE,title TEXT,description TEXT,background TEXT,logo TEXT)
table|server_publisher_info|server_publisher_info|CREATE TABLE server_publisher_info (publisher_key LONGVARCHAR PRIMARY KEY NOT NULL UNIQUE,status INTEGER DEFAULT 0 NOT NULL,excluded INTEGER DEFAULT 0 NOT NULL,address TEXT NOT NULL)
table|server_publisher_links|server_publisher_links|CREATE TABLE server_publisher_links (publisher_key LONGVARCHAR NOT NULL,provider TEXT,link TEXT,CONSTRAINT server_publisher_links_unique UNIQUE (publisher_key, provider))
table|sku_order|sku_order|CREATE TABLE sku_order (order_id TEXT NOT NULL,total_amount DOUBLE,merchant_id TEXT,status INTEGER NOT NULL DEFAULT 0,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (order_id))
table|sku_order_items|sku_order_items|CREATE TABLE sku_order_items (order_item_id TEXT NOT NULL,order_id TEXT NOT NULL,sku TEXT,quantity INTEGER,price DOUBLE,name TEXT,description TEXT,type INTEGER,expires_at TIMESTAMP,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,CONSTRAINT sku_order_items_unique UNIQUE (order_item_id, order_id))
table|sku_transaction|sku_transaction|CREATE TABLE sku_transaction (transaction_id TEXT NOT NULL,order_id TEXT NOT NULL,external_transaction_id TEXT NOT NULL,type INTEGER NOT NULL,amount DOUBLE NOT NULL,status INTEGER NOT NULL,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (transaction_id))
table|sqlite_sequence|sqlite_sequence|CREATE TABLE sqlite_sequence(name,seq)
table|unblinded_tokens|unblinded_tokens|CREATE TABLE unblinded_tokens (token_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,token_value TEXT,public_key TEXT,value DOUBLE NOT NULL DEFAULT 0,creds_id TEXT,expires_at TIMESTAMP NOT NULL DEFAULT 0,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)
6 changes: 6 additions & 0 deletions vendor/bat-native-ledger/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,12 @@ source_set("ledger") {
"src/bat/ledger/internal/database/database_server_publisher_info.h",
"src/bat/ledger/internal/database/database_server_publisher_links.cc",
"src/bat/ledger/internal/database/database_server_publisher_links.h",
"src/bat/ledger/internal/database/database_sku_order.cc",
"src/bat/ledger/internal/database/database_sku_order.h",
"src/bat/ledger/internal/database/database_sku_order_items.cc",
"src/bat/ledger/internal/database/database_sku_order_items.h",
"src/bat/ledger/internal/database/database_sku_transaction.cc",
"src/bat/ledger/internal/database/database_sku_transaction.h",
"src/bat/ledger/internal/database/database_table.cc",
"src/bat/ledger/internal/database/database_table.h",
"src/bat/ledger/internal/database/database_unblinded_token.cc",
Expand Down
16 changes: 16 additions & 0 deletions vendor/bat-native-ledger/include/bat/ledger/mojom_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,22 @@ using ServerPublisherInfoPtr = mojom::ServerPublisherInfoPtr;
using ServerPublisherPartial = mojom::ServerPublisherPartial;
using ServerPublisherPartialPtr = mojom::ServerPublisherPartialPtr;

using SKUOrder = mojom::SKUOrder;
using SKUOrderPtr = mojom::SKUOrderPtr;

using SKUOrderItem = mojom::SKUOrderItem;
using SKUOrderItemPtr = mojom::SKUOrderItemPtr;
using SKUOrderItemList = std::vector<SKUOrderItemPtr>;

using SKUOrderStatus = mojom::SKUOrderStatus;

using SKUTransaction = mojom::SKUTransaction;
using SKUTransactionPtr = mojom::SKUTransactionPtr;

using SKUTransactionStatus = mojom::SKUTransactionStatus;

using SKUTransactionType = mojom::SKUTransactionType;

using TransferFee = mojom::TransferFee;
using TransferFeePtr = mojom::TransferFeePtr;
using TransferFeeList = std::map<std::string, TransferFeePtr>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -454,3 +454,61 @@ struct CredsBatch {
CredsBatchStatus status;
};

enum SKUOrderStatus {
NONE = 0,
CREATED = 1,
SENT = 2,
PAID = 3,
FULFILLED = 4,
CANCELED = 5
};

struct SKUOrder {
string order_id;
double total_amount;
string merchant_id;
SKUOrderStatus status;
uint64 created_at;
array<SKUOrderItem> items;
};

enum SKUOrderItemType {
NONE = 0,
SINGLE_USE = 1
};

struct SKUOrderItem {
string order_item_id;
string order_id;
string sku;
int32 quantity;
double price;
string name;
string description;
SKUOrderItemType type;
uint64 expires_at;
uint64 created_at;
};

enum SKUTransactionType {
NONE = 0,
UPHOLD = 1,
ANONYMOUS_CARD = 2
};

enum SKUTransactionStatus {
NONE = 0,
CREATED = 1,
COMPLETED = 2
};

struct SKUTransaction {
string transaction_id;
string order_id;
string external_transaction_id;
SKUTransactionType type;
double amount;
SKUTransactionStatus status;
uint64 created_at;
};

Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
#include "bat/ledger/internal/database/database_publisher_info.h"
#include "bat/ledger/internal/database/database_recurring_tip.h"
#include "bat/ledger/internal/database/database_server_publisher_info.h"
#include "bat/ledger/internal/database/database_sku_order.h"
#include "bat/ledger/internal/database/database_sku_transaction.h"
#include "bat/ledger/internal/database/database_unblinded_token.h"
#include "bat/ledger/internal/ledger_impl.h"

Expand All @@ -42,6 +44,8 @@ Database::Database(bat_ledger::LedgerImpl* ledger) :
recurring_tip_ = std::make_unique<DatabaseRecurringTip>(ledger_);
server_publisher_info_ =
std::make_unique<DatabaseServerPublisherInfo>(ledger_);
sku_transaction_ = std::make_unique<DatabaseSKUTransaction>(ledger_);
sku_order_ = std::make_unique<DatabaseSKUOrder>(ledger_);
unblinded_token_ =
std::make_unique<DatabaseUnblindedToken>(ledger_);
}
Expand Down Expand Up @@ -387,6 +391,24 @@ void Database::GetServerPublisherInfo(
server_publisher_info_->GetRecord(publisher_key, callback);
}

/**
* SKU ORDER
*/
void Database::SaveSKUOrder(
ledger::SKUOrderPtr order,
ledger::ResultCallback callback) {
sku_order_->InsertOrUpdate(std::move(order), callback);
}

/**
* SKU TRANSACTION
*/
void Database::SaveSKUTransaction(
ledger::SKUTransactionPtr transaction,
ledger::ResultCallback callback) {
sku_transaction_->InsertOrUpdate(std::move(transaction), callback);
}

/**
* UNBLINDED TOKEN
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ class DatabasePromotion;
class DatabasePublisherInfo;
class DatabaseRecurringTip;
class DatabaseServerPublisherInfo;
class DatabaseSKUOrder;
class DatabaseSKUTransaction;
class DatabaseUnblindedToken;

class Database {
Expand Down Expand Up @@ -268,6 +270,18 @@ class Database {
const std::string& publisher_key,
ledger::GetServerPublisherInfoCallback callback);

/**
* SKU ORDER
*/
void SaveSKUOrder(ledger::SKUOrderPtr order, ledger::ResultCallback callback);

/**
* SKU TRANSACTION
*/
void SaveSKUTransaction(
ledger::SKUTransactionPtr transaction,
ledger::ResultCallback callback);

/**
* UNBLINDED TOKEN
*/
Expand Down Expand Up @@ -301,6 +315,8 @@ class Database {
std::unique_ptr<DatabasePublisherInfo> publisher_info_;
std::unique_ptr<DatabaseRecurringTip> recurring_tip_;
std::unique_ptr<DatabaseServerPublisherInfo> server_publisher_info_;
std::unique_ptr<DatabaseSKUOrder> sku_order_;
std::unique_ptr<DatabaseSKUTransaction> sku_transaction_;
std::unique_ptr<DatabaseUnblindedToken> unblinded_token_;
bat_ledger::LedgerImpl* ledger_; // NOT OWNED
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#include "bat/ledger/internal/database/database_publisher_info.h"
#include "bat/ledger/internal/database/database_recurring_tip.h"
#include "bat/ledger/internal/database/database_server_publisher_info.h"
#include "bat/ledger/internal/database/database_sku_order.h"
#include "bat/ledger/internal/database/database_sku_transaction.h"
#include "bat/ledger/internal/database/database_unblinded_token.h"
#include "bat/ledger/internal/database/database_util.h"
#include "bat/ledger/internal/ledger_impl.h"
Expand All @@ -40,6 +42,8 @@ DatabaseMigration::DatabaseMigration(bat_ledger::LedgerImpl* ledger) :
recurring_tip_ = std::make_unique<DatabaseRecurringTip>(ledger_);
server_publisher_info_ =
std::make_unique<DatabaseServerPublisherInfo>(ledger_);
sku_order_ = std::make_unique<DatabaseSKUOrder>(ledger_);
sku_transaction_ = std::make_unique<DatabaseSKUTransaction>(ledger_);
unblinded_token_ =
std::make_unique<DatabaseUnblindedToken>(ledger_);
}
Expand Down Expand Up @@ -108,7 +112,6 @@ bool DatabaseMigration::Migrate(
if (!media_publisher_info_->Migrate(transaction, target)) {
return false;
}

if (!pending_contribution_->Migrate(transaction, target)) {
return false;
}
Expand All @@ -129,6 +132,15 @@ bool DatabaseMigration::Migrate(
return false;
}

if (!sku_order_->Migrate(transaction, target)) {
return false;
}


if (!sku_transaction_->Migrate(transaction, target)) {
return false;
}

if (!unblinded_token_->Migrate(transaction, target)) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ class DatabasePromotion;
class DatabasePublisherInfo;
class DatabaseRecurringTip;
class DatabaseServerPublisherInfo;
class DatabaseSKUOrder;
class DatabaseSKUTransaction;
class DatabaseUnblindedToken;

class DatabaseMigration {
Expand All @@ -50,6 +52,8 @@ class DatabaseMigration {
std::unique_ptr<DatabasePublisherInfo> publisher_info_;
std::unique_ptr<DatabaseRecurringTip> recurring_tip_;
std::unique_ptr<DatabaseServerPublisherInfo> server_publisher_info_;
std::unique_ptr<DatabaseSKUOrder> sku_order_;
std::unique_ptr<DatabaseSKUTransaction> sku_transaction_;
std::unique_ptr<DatabaseUnblindedToken> unblinded_token_;
bat_ledger::LedgerImpl* ledger_; // NOT OWNED
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
/* Copyright (c) 2020 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

#include <map>
#include <utility>

#include "base/strings/stringprintf.h"
#include "bat/ledger/internal/database/database_sku_order.h"
#include "bat/ledger/internal/database/database_util.h"
#include "bat/ledger/internal/ledger_impl.h"

using std::placeholders::_1;

namespace braveledger_database {

namespace {

const char table_name_[] = "sku_order";

} // namespace

DatabaseSKUOrder::DatabaseSKUOrder(
bat_ledger::LedgerImpl* ledger) :
DatabaseTable(ledger),
items_(std::make_unique<DatabaseSKUOrderItems>(ledger)) {
}

DatabaseSKUOrder::~DatabaseSKUOrder() = default;

bool DatabaseSKUOrder::CreateTableV19(ledger::DBTransaction* transaction) {
DCHECK(transaction);

const std::string query = base::StringPrintf(
"CREATE TABLE %s ("
"order_id TEXT NOT NULL,"
"total_amount DOUBLE,"
"merchant_id TEXT,"
"status INTEGER NOT NULL DEFAULT 0,"
"created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,"
"PRIMARY KEY (order_id)"
")",
table_name_);

auto command = ledger::DBCommand::New();
command->type = ledger::DBCommand::Type::EXECUTE;
command->command = query;
transaction->commands.push_back(std::move(command));

return true;
}

bool DatabaseSKUOrder::Migrate(
ledger::DBTransaction* transaction,
const int target) {
DCHECK(transaction);

switch (target) {
case 19: {
return MigrateToV19(transaction);
}
default: {
return true;
}
}
}

bool DatabaseSKUOrder::MigrateToV19(ledger::DBTransaction* transaction) {
DCHECK(transaction);

if (!DropTable(transaction, table_name_)) {
return false;
}

if (!CreateTableV19(transaction)) {
return false;
}

return items_->Migrate(transaction, 19);
}

void DatabaseSKUOrder::InsertOrUpdate(
ledger::SKUOrderPtr order,
ledger::ResultCallback callback) {
if (!order) {
callback(ledger::Result::LEDGER_ERROR);
return;
}

auto transaction = ledger::DBTransaction::New();

const std::string query = base::StringPrintf(
"INSERT OR REPLACE INTO %s "
"(order_id, total_amount, merchant_id, status) "
"VALUES (?, ?, ?, ?)",
table_name_);

auto command = ledger::DBCommand::New();
command->type = ledger::DBCommand::Type::RUN;
command->command = query;

BindString(command.get(), 0, order->order_id);
BindDouble(command.get(), 1, order->total_amount);
BindString(command.get(), 2, order->merchant_id);
BindInt(command.get(), 3, static_cast<int>(order->status));

transaction->commands.push_back(std::move(command));

items_->InsertOrUpdateList(transaction.get(), std::move(order->items));

auto transaction_callback = std::bind(&OnResultCallback,
_1,
callback);

ledger_->RunDBTransaction(std::move(transaction), transaction_callback);
}

} // namespace braveledger_database
Loading

0 comments on commit 5ca7a4f

Please sign in to comment.