Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions app/Http/Controllers/DevicesController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Http;

class DevicesController extends Controller
{
protected string $baseUrl = 'https://gateway.apibrasil.io/api/v2';

public function index()
{
$user = Auth::user();

if (!$user || !$user->bearer_apibrasil) {
return response()->json([
'error' => true,
'message' => 'Token API Brasil não configurado',
], 400);
}

$response = Http::withHeaders([
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $user->bearer_apibrasil,
])->get("{$this->baseUrl}/devices");

return response()->json($response->json(), $response->status());
}

public function store(Request $request)
{
$user = Auth::user();

if (!$user || !$user->bearer_apibrasil) {
return response()->json([
'error' => true,
'message' => 'Token API Brasil não configurado',
], 400);
}

$response = Http::withHeaders([
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $user->bearer_apibrasil,
])->post("{$this->baseUrl}/devices/store", $request->all());

return response()->json($response->json(), $response->status());
}
}

1 change: 0 additions & 1 deletion app/Http/Controllers/RequestsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ public function defaultRequest(String $urlRequest, array $headers, array $data,
$user = User::findOrFail(Auth::user()->id);

$bearerAPIBrasil = $user->bearer_apibrasil; // token da API Brasil salvo no usuário
$devicetoken = $user->device_token; // device token salvo no usuário

// Define headers básicos da requisição

Expand Down
2 changes: 1 addition & 1 deletion app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public function transaction(string $type, float $amount)
'cellphone',
'bearer_apibrasil',
'is_admin',
'balance',
'balance',
];


Expand Down
5 changes: 5 additions & 0 deletions routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use App\Http\Controllers\RequestsController;
use App\Http\Controllers\TransactionsController;
use App\Http\Controllers\UsersController;
use App\Http\Controllers\DevicesController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Expand All @@ -29,6 +30,10 @@
Route::post('/add-balance', [TransactionsController::class, 'addBalance']);
Route::post('/users/{id}/add-balance', [TransactionsController::class, 'addBalanceToUser']);

// devices
Route::get('/devices', [DevicesController::class, 'index']);
Route::post('/devices/store', [DevicesController::class, 'store']);

// preços - acesso restrito a administradores
Route::middleware('admin')->apiResource('prices', PricesController::class);

Expand Down
66 changes: 66 additions & 0 deletions tests/Feature/DevicesTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php

namespace Tests\Feature;

use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
use Tests\TestCase;

class DevicesTest extends TestCase
{
use RefreshDatabase;

public function test_store_device_token_proxies_response(): void
{
Http::fake([
'https://gateway.apibrasil.io/api/v2/devices/store' => Http::response([
'device' => ['device_token' => 'abc123'],
], 200),
]);

$user = User::create([
'name' => 'User',
'email' => 'user@example.com',
'password' => bcrypt('password'),
'cellphone' => '123456789',
'balance' => 0,
'bearer_apibrasil' => 'token',
]);

$response = $this->actingAs($user, 'sanctum')
->postJson('/api/devices/store', ['device_name' => 'teste']);

$response->assertStatus(200)
->assertJson([
'device' => ['device_token' => 'abc123'],
]);
}

public function test_index_returns_devices_from_api(): void
{
Http::fake([
'https://gateway.apibrasil.io/api/v2/devices' => Http::response([
'devices' => [],
], 200),
]);

$user = User::create([
'name' => 'User2',
'email' => 'user2@example.com',
'password' => bcrypt('password'),
'cellphone' => '987654321',
'balance' => 0,
'bearer_apibrasil' => 'token',
]);

$response = $this->actingAs($user, 'sanctum')
->getJson('/api/devices');

$response->assertStatus(200)
->assertJson([
'devices' => [],
]);
}
}