TokensController.php 3.88 KB
<?php

namespace App\Http\Controllers;

use App\Models\Campaigns;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Request;
use Inertia\Inertia;
use phpDocumentor\Reflection\Types\Boolean;
use phpDocumentor\Reflection\Types\Integer;

class TokensController extends Controller
{
    function index(){
        return Inertia::render('Tokens/Index', [
            'filters' => Request::all('api', 'type', 'login'),
            'types' =>  [Tokens::MAIN => 'Основной аккаунт', Tokens::GOAL=> 'Целевой аккаунт'],
            'tokens' => Tokens::filter(Request::only('api', 'type', 'login'))
                ->paginate()
                ->withQueryString()
                ->through(function ($token) {
                    return [
                        'id' => $token->id,
                        'login' => $token->login,
                        'type' => $token->type,
                        'api' => $token->api,
                    ];
                }),
        ]);
    }

    function edit(Tokens $token){
        $mainToken = Tokens::where('type', Tokens::MAIN)->get();
        return Inertia::render('Tokens/Edit', [
            'token' => [
                'id' => $token->id,
                'login' => $token->login,
                'api' => $token->api,
                'token' => $token->token,
                'type' => $token->type,
                'campaigns' => (
                    $token->type === Tokens::MAIN
                        ? $token->campaignsForManaged
                        : []
                ),
                'cities' => ($token->type==Tokens::GOAL?[]:null),
            ],
            'campaigns' => $token->campaignsNotForManaged,
            'types' => $mainToken->count() && $token->type!=Tokens::MAIN
                ? [Tokens::GOAL=> 'Целевой аккаунт'] :
                [Tokens::MAIN => 'Основной аккаунт', Tokens::GOAL=> 'Целевой аккаунт'],
        ]);
    }

    public function update(Tokens $token)
    {
        $token->update(
            Request::validate([
                'type' => ['required', 'in:' . Tokens::MAIN . "," . Tokens::GOAL],
            ])
        );

        return Redirect::back()->with('success', 'Token updated.');
    }

    public function managedCampaign(Tokens $token, $campaign_id, $managed)
    {
        $campaign = $token->campaigns()->find($campaign_id);

        if (!$campaign) {
            return Redirect::back();
        }

        $campaign->update([
            'manage' => !!$managed,
        ]);

        return Redirect::back()->with('success', 'Campaign ' . ($managed ? 'added':'deleted') . '.');
    }

    public function enabledCampaign(Tokens $token, $campaign_id, $enabled)
    {
        $campaign = $token->campaigns()->find($campaign_id);

        if (!$campaign) {
            return Redirect::back();
        }

        $campaign->update([
            'enabled' => !!$enabled,
        ]);

        return Redirect::back()->with('success', 'Campaign ' . ($enabled ? 'enabled':'disabled') . '.');
    }

    public function destroy(Tokens $token)
    {
        $token->delete();

        return Redirect::route('tokens')->with('success', 'Token deleted.');
    }

    function get($api){
        return Inertia::location(API::getInstance( APIRequest::getInstance($api) )->getAuthLink());
    }

    function token($api){
        $token = API::getInstance( APIRequest::getInstance($api) )->getToken(Request::get('code'));

        $tokens = Tokens::firstOrNew(['token'=>$token['token']]);
        $tokens->token = $token['token'];
        $tokens->login = $token['login'];
        $tokens->api = $api;
        $tokens->created_by = Auth::user()->id;
        $tokens->save();

        return Redirect::route('tokens')->with('success', 'Token added.');
    }
}