Commit 377724af authored by Guy Thouret's avatar Guy Thouret

Boost Campaigns API Endpoint - #1201

1 merge request!417WIP: Boost Campaigns
Pipeline #102434744 passed with stages
in 6 minutes and 58 seconds
......@@ -139,9 +139,9 @@ abstract class AbstractApi implements Interfaces\Api
$this->sendError(500);
}
protected function sendBadRequest(): void
protected function sendBadRequest(string $message = null): void
{
$this->sendError(400);
$this->sendError(400, $message);
}
protected function sendNotImplemented(): void
......@@ -154,9 +154,9 @@ abstract class AbstractApi implements Interfaces\Api
$this->sendError(304);
}
protected function sendNotAcceptable(): void
protected function sendNotAcceptable(string $message = null): void
{
$this->sendError(406);
$this->sendError(406, $message);
}
protected function sendUnauthorised(): void
......
......@@ -199,6 +199,9 @@ class ElasticRepository
->setImpressionsMet($doc['_source']['impressions_met'])
->setBid($doc['_source']['bid'])
->setBidType($doc['_source']['bid_type']);
if (isset($doc['_source']['boost_type'])) {
$boost->setBoostType($doc['_source']['boost_type']);
}
$offset = $boost->getCreatedTimestamp();
$response[] = $boost;
}
......@@ -236,7 +239,7 @@ class ElasticRepository
'owner_guid' => $boost->getOwnerGuid(),
'rating' => $boost->getRating(),
'type' => $boost->getType(),
'priority' => (bool) $boost->isPriority(),
'boost_type' => $boost->getBoostType(),
],
'doc_as_upsert' => true,
];
......
......@@ -3,11 +3,14 @@
namespace Minds\Core\Boost\Network;
use Minds\Common\Repository\Response;
use Minds\Core\Boost\Checksum;
use Minds\Core\Boost\Delegates\ValidateCampaignDatesDelegate;
use Minds\Core\Di\Di;
use Minds\Core\EntitiesBuilder;
use Minds\Core\GuidBuilder;
use Minds\Core\Events\Dispatcher;
use Minds\Entities\Entity;
use Minds\Entities\User;
class Manager
{
......@@ -265,4 +268,63 @@ class Manager
return $offchainBoosts;
}
public function getCampaigns(array $opts)
{
$opts = array_merge($opts, [
'owner_guid' => $this->actor->getGUID(),
'boost_type' => Boost::BOOST_TYPE_CAMPAIGN
]);
return $this->elasticRepository->getList($opts);
}
public function setActor(User $user): self
{
$this->actor = $user;
return $this;
}
public function createCampaign(Campaign $campaign): Campaign
{
$campaign = $this->campaignUrnDelegate->onCreate($campaign);
$campaign->setOwner($this->actor);
if (!$campaign->getOwnerGuid()) {
throw new CampaignException('Campaign should have an owner');
}
if (!$campaign->getName()) {
throw new CampaignException('Campaign should have a name');
}
$validTypes = ['newsfeed', 'content', 'banner', 'video'];
if (!in_array($campaign->getType(), $validTypes, true)) {
throw new CampaignException('Invalid campaign type');
}
/** TODO: Checksum Verification */
$checksum = (new Checksum())->setGuid($campaign->getGuid())->setEntity($campaign->getEntityGuid())->generate();
if (!$campaign->getChecksum() || ($campaign->getChecksum() !== $checksum)) {
throw new CampaignException('Invalid checksum value');
}
$campaign = (new ValidateCampaignDatesDelegate())->onCreate($campaign);
$this->sync($campaign);
return $campaign;
}
public function updateCampaign(Campaign $campaign): Campaign
{
// TODO: Implement this...
return $campaign;
}
public function cancelCampaign(Campaign $campaign): Campaign
{
// TODO: Implement this...
return $campaign;
}
}
......@@ -56,8 +56,7 @@ class ElasticRepositorySpec extends ObjectBehavior
&& $body['doc']['impressions'] === 10000
&& $body['doc']['impressions_met'] === 10
&& $body['doc']['owner_guid'] === 456
&& $body['doc']['type'] === 'newsfeed'
&& $body['doc']['priority'] === false;
&& $body['doc']['type'] === 'newsfeed';
}))
->shouldBeCalled()
->willReturn(true);
......
Please register or to comment