Skip to content

Commit

Permalink
Migrates processed publishers into db
Browse files Browse the repository at this point in the history
  • Loading branch information
NejcZdovc committed May 15, 2020
1 parent eee3f5b commit 7e9ee37
Show file tree
Hide file tree
Showing 15 changed files with 353 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ index|sqlite_autoindex_creds_batch_1|creds_batch|
index|sqlite_autoindex_creds_batch_2|creds_batch|
index|sqlite_autoindex_media_publisher_info_1|media_publisher_info|
index|sqlite_autoindex_meta_1|meta|
index|sqlite_autoindex_processed_publisher_1|processed_publisher|
index|sqlite_autoindex_promotion_1|promotion|
index|sqlite_autoindex_publisher_info_1|publisher_info|
index|sqlite_autoindex_recurring_donation_1|recurring_donation|
Expand All @@ -48,6 +49,7 @@ table|creds_batch|creds_batch|CREATE TABLE creds_batch (creds_id TEXT PRIMARY KE
table|media_publisher_info|media_publisher_info|CREATE TABLE media_publisher_info (media_key TEXT NOT NULL PRIMARY KEY UNIQUE,publisher_id LONGVARCHAR NOT NULL)
table|meta|meta|CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR)
table|pending_contribution|pending_contribution|CREATE TABLE pending_contribution (pending_contribution_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,publisher_id LONGVARCHAR NOT NULL,amount DOUBLE DEFAULT 0 NOT NULL,added_date INTEGER DEFAULT 0 NOT NULL,viewing_id LONGVARCHAR NOT NULL,type INTEGER NOT NULL)
table|processed_publisher|processed_publisher|CREATE TABLE processed_publisher (publisher_key TEXT PRIMARY KEY NOT NULL,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)
table|promotion|promotion|CREATE TABLE promotion (promotion_id TEXT NOT NULL,version INTEGER NOT NULL,type INTEGER NOT NULL,public_keys TEXT NOT NULL,suggestions INTEGER NOT NULL DEFAULT 0,approximate_value DOUBLE NOT NULL DEFAULT 0,status INTEGER NOT NULL DEFAULT 0,expires_at TIMESTAMP NOT NULL,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, claimed_at TIMESTAMP, claim_id TEXT,PRIMARY KEY (promotion_id))
table|publisher_info|publisher_info|CREATE TABLE publisher_info(publisher_id LONGVARCHAR PRIMARY KEY NOT NULL UNIQUE,excluded INTEGER DEFAULT 0 NOT NULL,name TEXT NOT NULL,favIcon TEXT NOT NULL,url TEXT NOT NULL,provider TEXT NOT NULL)
table|recurring_donation|recurring_donation|CREATE TABLE recurring_donation (publisher_id LONGVARCHAR NOT NULL PRIMARY KEY UNIQUE,amount DOUBLE DEFAULT 0 NOT NULL,added_date INTEGER DEFAULT 0 NOT NULL)
Expand Down
2 changes: 2 additions & 0 deletions vendor/bat-native-ledger/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,8 @@ source_set("ledger") {
"src/bat/ledger/internal/database/database_multi_tables.h",
"src/bat/ledger/internal/database/database_pending_contribution.cc",
"src/bat/ledger/internal/database/database_pending_contribution.h",
"src/bat/ledger/internal/database/database_processed_publisher.cc",
"src/bat/ledger/internal/database/database_processed_publisher.h",
"src/bat/ledger/internal/database/database_promotion.cc",
"src/bat/ledger/internal/database/database_promotion.h",
"src/bat/ledger/internal/database/database_promotion_creds.cc",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,13 @@ void Unverified::OnContributeUnverifiedPublishers(
return;
}

if (!ledger_->WasPublisherAlreadyProcessed(current->publisher_key)) {
ledger_->OnContributeUnverifiedPublishers(
ledger::Result::VERIFIED_PUBLISHER,
current->publisher_key,
current->name);
ledger_->SavePublisherProcessed(current->publisher_key);
}
auto get_callback = std::bind(&Unverified::WasPublisherProcessed,
this,
_1,
current->publisher_key,
current->name);

ledger_->WasPublisherProcessed(current->publisher_key, get_callback);

// Trigger contribution
if (balance >= current->amount) {
Expand Down Expand Up @@ -129,6 +129,38 @@ void Unverified::OnContributeUnverifiedPublishers(
}
}

void Unverified::WasPublisherProcessed(
const ledger::Result result,
const std::string& publisher_key,
const std::string& name) {
if (result == ledger::Result::LEDGER_ERROR) {
BLOG(ledger_, ledger::LogLevel::LOG_ERROR) << "Coudn't get processed data";
return;
}

if (result == ledger::Result::LEDGER_OK) {
// Nothing to do here as publisher was already processed
return;
}

auto save_callback = std::bind(&Unverified::ProcessedPublisherSaved,
this,
_1,
publisher_key,
name);
ledger_->SaveProcessedPublisherList({publisher_key}, save_callback);
}

void Unverified::ProcessedPublisherSaved(
const ledger::Result result,
const std::string& publisher_key,
const std::string& name) {
ledger_->OnContributeUnverifiedPublishers(
ledger::Result::VERIFIED_PUBLISHER,
publisher_key,
name);
}

void Unverified::OnRemovePendingContribution(
ledger::Result result) {
if (result == ledger::Result::LEDGER_OK) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,16 @@ class Unverified {
void OnTimer(uint32_t timer_id);

private:
void WasPublisherProcessed(
const ledger::Result result,
const std::string& publisher_key,
const std::string& name);

void ProcessedPublisherSaved(
const ledger::Result result,
const std::string& publisher_key,
const std::string& name);

void OnRemovePendingContribution(ledger::Result result);

void OnContributeUnverifiedBalance(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include "bat/ledger/internal/database/database_media_publisher_info.h"
#include "bat/ledger/internal/database/database_multi_tables.h"
#include "bat/ledger/internal/database/database_pending_contribution.h"
#include "bat/ledger/internal/database/database_processed_publisher.h"
#include "bat/ledger/internal/database/database_promotion.h"
#include "bat/ledger/internal/database/database_publisher_info.h"
#include "bat/ledger/internal/database/database_recurring_tip.h"
Expand All @@ -41,6 +42,7 @@ Database::Database(bat_ledger::LedgerImpl* ledger) :
multi_tables_ = std::make_unique<DatabaseMultiTables>(ledger_);
pending_contribution_ =
std::make_unique<DatabasePendingContribution>(ledger_);
processed_publisher_ = std::make_unique<DatabaseProcessedPublisher>(ledger_);
promotion_ = std::make_unique<DatabasePromotion>(ledger_);
publisher_info_ = std::make_unique<DatabasePublisherInfo>(ledger_);
recurring_tip_ = std::make_unique<DatabaseRecurringTip>(ledger_);
Expand Down Expand Up @@ -325,6 +327,21 @@ void Database::RemoveAllPendingContributions(ledger::ResultCallback callback) {
pending_contribution_->DeleteAllRecords(callback);
}

/**
* PROCESSED PUBLISHER
*/
void Database::SaveProcessedPublisherList(
const std::vector<std::string>& list,
ledger::ResultCallback callback) {
processed_publisher_->InsertOrUpdateList(list, callback);
}

void Database::WasPublisherProcessed(
const std::string& publisher_key,
ledger::ResultCallback callback) {
processed_publisher_->WasProcessed(publisher_key, callback);
}

/**
* PROMOTION
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class DatabaseContributionQueue;
class DatabaseMediaPublisherInfo;
class DatabaseMultiTables;
class DatabasePendingContribution;
class DatabaseProcessedPublisher;
class DatabasePromotion;
class DatabasePublisherInfo;
class DatabaseRecurringTip;
Expand Down Expand Up @@ -220,6 +221,17 @@ class Database {

void RemoveAllPendingContributions(ledger::ResultCallback callback);

/**
* PROCESSED PUBLISHER
*/
void SaveProcessedPublisherList(
const std::vector<std::string>& list,
ledger::ResultCallback callback);

void WasPublisherProcessed(
const std::string& publisher_key,
ledger::ResultCallback callback);

/**
* PROMOTION
*/
Expand Down Expand Up @@ -385,6 +397,7 @@ class Database {
std::unique_ptr<DatabaseContributionQueue> contribution_queue_;
std::unique_ptr<DatabaseCredsBatch> creds_batch_;
std::unique_ptr<DatabasePendingContribution> pending_contribution_;
std::unique_ptr<DatabaseProcessedPublisher> processed_publisher_;
std::unique_ptr<DatabasePromotion> promotion_;
std::unique_ptr<DatabaseMediaPublisherInfo> media_publisher_info_;
std::unique_ptr<DatabaseMultiTables> multi_tables_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "bat/ledger/internal/database/database_media_publisher_info.h"
#include "bat/ledger/internal/database/database_migration.h"
#include "bat/ledger/internal/database/database_pending_contribution.h"
#include "bat/ledger/internal/database/database_processed_publisher.h"
#include "bat/ledger/internal/database/database_promotion.h"
#include "bat/ledger/internal/database/database_publisher_info.h"
#include "bat/ledger/internal/database/database_recurring_tip.h"
Expand All @@ -39,6 +40,8 @@ DatabaseMigration::DatabaseMigration(bat_ledger::LedgerImpl* ledger) :
media_publisher_info_ = std::make_unique<DatabaseMediaPublisherInfo>(ledger_);
pending_contribution_ =
std::make_unique<DatabasePendingContribution>(ledger_);
processed_publisher_ =
std::make_unique<DatabaseProcessedPublisher>(ledger_);
promotion_ = std::make_unique<DatabasePromotion>(ledger_);
publisher_info_ = std::make_unique<DatabasePublisherInfo>(ledger_);
recurring_tip_ = std::make_unique<DatabaseRecurringTip>(ledger_);
Expand Down Expand Up @@ -124,6 +127,10 @@ bool DatabaseMigration::Migrate(
return false;
}

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

if (!promotion_->Migrate(transaction, target)) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class DatabaseContributionQueue;
class DatabaseCredsBatch;
class DatabaseMediaPublisherInfo;
class DatabasePendingContribution;
class DatabaseProcessedPublisher;
class DatabasePromotion;
class DatabasePublisherInfo;
class DatabaseRecurringTip;
Expand Down Expand Up @@ -50,6 +51,7 @@ class DatabaseMigration {
std::unique_ptr<DatabaseCredsBatch> creds_batch_;
std::unique_ptr<DatabaseMediaPublisherInfo> media_publisher_info_;
std::unique_ptr<DatabasePendingContribution> pending_contribution_;
std::unique_ptr<DatabaseProcessedPublisher> processed_publisher_;
std::unique_ptr<DatabasePromotion> promotion_;
std::unique_ptr<DatabasePublisherInfo> publisher_info_;
std::unique_ptr<DatabaseRecurringTip> recurring_tip_;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
/* 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_processed_publisher.h"
#include "bat/ledger/internal/database/database_util.h"
#include "bat/ledger/internal/ledger_impl.h"

using std::placeholders::_1;

namespace {

const char kTableName[] = "processed_publisher";

} // namespace

namespace braveledger_database {

DatabaseProcessedPublisher::DatabaseProcessedPublisher(
bat_ledger::LedgerImpl* ledger) :
DatabaseTable(ledger) {
}

DatabaseProcessedPublisher::~DatabaseProcessedPublisher() = default;

bool DatabaseProcessedPublisher::CreateTableV22(
ledger::DBTransaction* transaction) {
DCHECK(transaction);

const std::string query = base::StringPrintf(
"CREATE TABLE %s ("
"publisher_key TEXT PRIMARY KEY NOT NULL,"
"created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"
")",
kTableName);

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

return true;
}

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

switch (target) {
case 22: {
return MigrateToV22(transaction);
}
default: {
return true;
}
}
}

bool DatabaseProcessedPublisher::MigrateToV22(
ledger::DBTransaction* transaction) {
DCHECK(transaction);

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

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

return true;
}

void DatabaseProcessedPublisher::InsertOrUpdateList(
const std::vector<std::string>& list,
ledger::ResultCallback callback) {
if (list.empty()) {
callback(ledger::Result::LEDGER_OK);
return;
}

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

const std::string query = base::StringPrintf(
"INSERT OR IGNORE INTO %s (publisher_key) VALUES (?);",
kTableName);

for (const auto& publisher_key : list) {
auto command = ledger::DBCommand::New();
command->type = ledger::DBCommand::Type::RUN;
command->command = query;

BindString(command.get(), 0, publisher_key);

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

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

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

void DatabaseProcessedPublisher::WasProcessed(
const std::string& publisher_key,
ledger::ResultCallback callback) {
if (publisher_key.empty()) {
callback(ledger::Result::LEDGER_ERROR);
return;
}

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

const std::string query = base::StringPrintf(
"SELECT publisher_key FROM %s WHERE publisher_key = ?",
kTableName);

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

BindString(command.get(), 0, publisher_key);

command->record_bindings = {
ledger::DBCommand::RecordBindingType::STRING_TYPE
};

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

auto transaction_callback =
std::bind(&DatabaseProcessedPublisher::OnWasProcessed,
this,
_1,
callback);

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

void DatabaseProcessedPublisher::OnWasProcessed(
ledger::DBCommandResponsePtr response,
ledger::ResultCallback callback) {
if (!response ||
response->status != ledger::DBCommandResponse::Status::RESPONSE_OK) {
callback(ledger::Result::LEDGER_ERROR);
return;
}

if (response->result->get_records().empty()) {
callback(ledger::Result::NOT_FOUND);
return;
}

callback(ledger::Result::LEDGER_OK);
}

} // namespace braveledger_database
Loading

0 comments on commit 7e9ee37

Please sign in to comment.