Files
2024-02-12 22:54:20 -05:00

295 lines
11 KiB
PHP

<?php
namespace Modules\PixelMe\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\PixelMe\Services\CommonService;
use Illuminate\Support\Facades\Log;
use Modules\PixelMe\Entities\UserMeta;
class PixelMeController extends Controller
{
private $common_service;
public function __construct(CommonService $common_service)
{
$this->common_service = $common_service;
}
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index()
{
$profiles_meta = \Modules\PixelMe\Entities\UserMeta::where('user_id', auth()->id())->where('name', 'profiles')->first();
if (!$profiles_meta) {
return redirect()->route('frontend.customer_profile')->with('pixelme', true);
}
return view('pixelme::index');
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('pixelme::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
return view('pixelme::show');
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('pixelme::edit');
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
public function connectAmazon() {
Log::channel('pixelme')->info('Attempting to connect to amazon.');
Log::channel('pixelme')->info('Checking for user workspace.');
$workspace_meta = UserMeta::where('user_id', auth()->id())->where('name', 'workspace')->first();
if ($workspace_meta) {
Log::channel('pixelme')->info('User workspace found.');
return $this->common_service->connectAmazon();
}
Log::channel('pixelme')->info('No existing user workspace found.');
return response()->json([
'message' => 'No current workspace created for the user. Please create one.'
], 403);
}
public function createWorkspace(Request $request)
{
Log::channel('pixelme')->info('Creating workspace.');
$user = auth()->user();
if ($user) {
Log::channel('pixelme')->info('User found.');
Log::channel('pixelme')->info('Checking existing user workspace.');
$workspace_meta = UserMeta::where('user_id', $user->id)->where('name', 'workspace')->first();
if (!$workspace_meta) {
Log::channel('pixelme')->info('User workspace not found.');
$name = $user->first_name . ' ' . $user->last_name;
$workspace = $this->common_service->createWorkspace($name);
if ($workspace) {
Log::channel('pixelme')->info('User workspace has been successfully created.');
$workspace_meta = new UserMeta();
$workspace_meta->user_id = auth()->id();
$workspace_meta->name = 'workspace';
$workspace_meta->meta = json_encode($workspace);
$workspace_meta->save();
Log::channel('pixelme')->info('Workspace meta data has been stored with ID #' . $workspace_meta->id);
return response()->json([
'message' => 'Workspace successfully created.',
'workspace' => $workspace
]);
}
return response()->json([
'message' => 'Failed to create workspace.'
], 400);
}
else {
Log::channel('pixelme')->info('User workspace already created.');
return response()->json([
'message' => 'The user already has workspace.'
], 403);
}
}
Log::channel('pixelme')->info('No logged in user.');
Log::channel('pixelme')->info('Workspace not created.');
return response()->json([
'message' => 'Please log in to create workspace.'
], 404);
}
public function getProducts(Request $request) {
return $this->common_service->getProducts();
}
public function getCampaigns(Request $request) {
return $this->common_service->getCampaigns($request->except('_token'));
}
public function getMetrics(Request $request) {
return $this->common_service->getMetrics($request->except('_token'));
}
public function amazonAuthCallback(Request $request)
{
$connected = false;
$user_id = auth()->id();
$amazon_marketplace_id = 'ATVPDKIKX0DER'; // Amazon US (.com)
Log::channel('pixelme')->info('Redirect to callback from Amazon.');
$code_meta = new UserMeta();
$code_meta->user_id = $user_id;
$code_meta->name = 'auth_code';
$code_meta->value = $request->code;
$code_meta->save();
Log::channel('pixelme')->info('Auth code response from Amazon stored.');
try {
$auth_meta = new UserMeta();
$auth_meta->user_id = $user_id;
$auth_meta->name = 'amazon_auth';
$auth_meta->meta = json_encode($request->all());
$auth_meta->save();
Log::channel('pixelme')->info('Amazon auth response stored.');
}
catch (\Exception $ex) {}
$provider = $this->common_service->validateAmazonAuth($request->code, $amazon_marketplace_id);
if ($provider) {
Log::channel('pixelme')->info('Validation successful.');
$provider_meta = new UserMeta();
$provider_meta->user_id = $user_id;
$provider_meta->name = 'provider';
$provider_meta->meta = json_encode($provider);
$provider_meta->save();
Log::channel('pixelme')->info('Validation response has been stored with ID #' . $provider_meta->id);
Log::channel('pixelme')->info('Checking for user workspace.');
$workspace_meta = UserMeta::where('user_id', $user_id)->where('name', 'workspace')->first();
if ($workspace_meta) {
Log::channel('pixelme')->info('User workspace found.');
Log::channel('pixelme')->info('Decoding workspace meta data.');
$workspace = json_decode($workspace_meta->meta);
$account_id = $workspace->account->id;
Log::channel('pixelme')->info('Workspace account ID #' . $account_id);
$this->common_service->listProfiles($account_id, $provider);
$profiles = $this->common_service->createProductProvider($account_id, $provider);
if ($profiles) {
Log::channel('pixelme')->info('Create product provider was successfull for account ID #' . $account_id);
Log::channel('pixelme')->info('Storing profiles meta data.');
$profiles_meta = new UserMeta();
$profiles_meta->user_id = $user_id;
$profiles_meta->name = 'profiles';
$profiles_meta->meta = json_encode($profiles);
$profiles_meta->save();
Log::channel('pixelme')->info('Profiles meta data has been stored.');
$connected = true;
}
else {
Log::channel('pixelme')->info('Failed to create product provider.');
}
}
}
return redirect()->route('pixelme.index')->with('connected', $connected);
}
public function authCallback(Request $request)
{
Log::channel('pixelme')->info('From authCallback');
Log::channel('pixelme')->info('Validation successful.');
$connected = false;
$user_id = auth()->id();
$provider = $request->all();
if ($provider) {
$provider_meta = new UserMeta();
$provider_meta->user_id = $user_id;
$provider_meta->name = 'provider';
$provider_meta->meta = json_encode($provider);
$provider_meta->save();
Log::channel('pixelme')->info('Validation response has been stored with ID #' . $provider_meta->id);
Log::channel('pixelme')->info('Checking for user workspace.');
$workspace_meta = UserMeta::where('user_id', $user_id)->where('name', 'workspace')->first();
if ($workspace_meta) {
Log::channel('pixelme')->info('User workspace found.');
Log::channel('pixelme')->info('Decoding workspace meta data.');
$workspace = json_decode($workspace_meta->meta);
$account_id = $workspace->account->id;
Log::channel('pixelme')->info('Workspace account ID #' . $account_id);
$this->common_service->listProfiles($account_id, $provider);
$profiles = $this->common_service->createProductProvider($account_id, $provider);
if ($profiles) {
Log::channel('pixelme')->info('Create product provider was successfull for account ID #' . $account_id);
Log::channel('pixelme')->info('Storing profiles meta data.');
$profiles_meta = new UserMeta();
$profiles_meta->user_id = $user_id;
$profiles_meta->name = 'profiles';
$profiles_meta->meta = json_encode($profiles);
$profiles_meta->save();
Log::channel('pixelme')->info('Profiles meta data has been stored.');
$connected = true;
}
else {
Log::channel('pixelme')->info('Failed to create product provider.');
}
}
}
return redirect()->route('pixelme.index')->with('connected', $connected);
}
}