TokensController.php 5.81 KB
<?php

namespace App\Http\Controllers;

use App\Models\Campaigns;
use App\Models\Dictionary;
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;

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->getKey(),
                        'login' => $token->login,
                        'type' => $token->type,
                        'api' => $token->api,
                    ];
                }),
        ]);
    }

    function edit(Tokens $token)
    {
        $mainToken = Tokens::where('type', Tokens::MAIN)->get()->first();
        return Inertia::render('Tokens/Edit', [
            'token' => [
                'id' => $token->getKey(),
                'login' => $token->login,
                'api' => $token->api,
                'token' => $token->token,
                'type' => $token->type,
                'main' => $token->isMain(),
                'campaigns' => (
                $token->isMain()
                    ? $token->campaignsForManaged
                    : []
                ),
                'cities' => (
                !$token->isMain()
                    ? $token->cities
                    : []
                ),
            ],
            'cities' => (
            !$token->isMain()
                ? Dictionary::where('type', Dictionary::CITY)->defaultOrderBy()->get()
                : []
            ),
            'campaigns' => $token->campaigns,
            'main_token_campaigns' => (
            $mainToken
                ? $mainToken->campaignsForManaged
                : []
            ),
            'types' => $mainToken && !$token->type === Tokens::GOAL
                ? [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)
    {
        if (!$token->isMain()) {
            return Redirect::back();
        }

        $campaign = $token->campaigns()->find($campaign_id);

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

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

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

    public function enabledCampaign(Tokens $token, $campaign_id)
    {
        if (!$token->isMain()) {
            return Redirect::back();
        }

        $campaign = $token->campaigns()->find($campaign_id);

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

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

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

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

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

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

    public 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()->getKey();
        $tokens->save();

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

    public function storeCity(Tokens $token, Dictionary $city)
    {
        if ($token->isMain()) {
            return Redirect::back();
        }

        $city->token()->associate($token->getKey());

        return Redirect::route('token.edit', $token->getKey())->with('success', 'City added.');
    }

    public function updatedCity(Tokens $token, Dictionary $city)
    {
        if ($token->isMain()) {
            return Redirect::back();
        }

        $city = $token->cities()->find($city);

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

        $city->update([
            'updated' => !!request('updated'),
        ]);

        return Redirect::route('token.edit', $token->getKey())->with('success', 'City updated.');
    }

    public function updatedCampaign(Tokens $token, Dictionary $city)
    {
        if ($token->isMain()) {
            return Redirect::back();
        }

        $updated = !!request('updated');

        //

        return Redirect::route('token.edit', $token->getKey())->with('success', 'Campaign updated.');
    }

    public function destroyCity(Tokens $token, Dictionary $city)
    {
        if ($token->isMain()) {
            return Redirect::back();
        }

        $city->token()->associate(null);

        return Redirect::route('token.edit', $token->getKey())->with('success', 'City deleted.');
    }
}