Skip to content

Commit 974d5ac

Browse files
committed
integracao com iugu
1 parent 79804fe commit 974d5ac

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+37084
-19941
lines changed

.env.example

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ REDIS_PASSWORD=null
2121
REDIS_PORT=6379
2222

2323
MAIL_DRIVER=smtp
24-
MAIL_HOST=mailtrap.io
24+
MAIL_HOST=smtp.mailtrap.io
2525
MAIL_PORT=2525
26-
MAIL_USERNAME=null
27-
MAIL_PASSWORD=null
26+
MAIL_USERNAME=9687a3d660b548
27+
MAIL_PASSWORD=969942498cbc48
2828
MAIL_ENCRYPTION=null
2929

3030
PUSHER_APP_ID=335093

Procfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
web: vendor/bin/heroku-php-nginx -C nginx.conf public/
1+
web: vendor/bin/heroku-php-apache2 public/

app/Criteria/FindByUserCriteria.php

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace CodeFin\Criteria;
4+
5+
use Illuminate\Support\Facades\Auth;
6+
use Prettus\Repository\Contracts\CriteriaInterface;
7+
use Prettus\Repository\Contracts\RepositoryInterface;
8+
9+
/**
10+
* Class FindByUserCriteria
11+
* @package namespace CodeFin\Criteria;
12+
*/
13+
class FindByUserCriteria implements CriteriaInterface
14+
{
15+
/**
16+
* Apply criteria in query repository
17+
*
18+
* @param $model
19+
* @param RepositoryInterface $repository
20+
*
21+
* @return mixed
22+
*/
23+
public function apply($model, RepositoryInterface $repository)
24+
{
25+
return $model->where('user_id', Auth::user()->id);
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace CodeFin\Criteria;
4+
5+
use Prettus\Repository\Contracts\CriteriaInterface;
6+
use Prettus\Repository\Contracts\RepositoryInterface;
7+
8+
/**
9+
* Class FindSubscriptionByUserClientCriteria
10+
* @package namespace CodeFin\Criteria;
11+
*/
12+
class FindSubscriptionByUserClientCriteria implements CriteriaInterface
13+
{
14+
/**
15+
* @var
16+
*/
17+
private $clientId;
18+
19+
/**
20+
* FindSubscriptionByUserClientCriteria constructor.
21+
* @param $clientId
22+
*/
23+
public function __construct($clientId)
24+
{
25+
$this->clientId = $clientId;
26+
}
27+
28+
/**
29+
* Apply criteria in query repository
30+
*
31+
* @param $model
32+
* @param RepositoryInterface $repository
33+
*
34+
* @return mixed
35+
*/
36+
public function apply($model, RepositoryInterface $repository)
37+
{
38+
return $model
39+
->join('users','users.id','=','subscriptions.user_id')
40+
->join('clients','users.client_id','=','clients.id')
41+
->where('clients.id','=',$this->clientId);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
namespace CodeFin\Events;
4+
5+
use CodeFin\Models\Bank;
6+
use Illuminate\Http\UploadedFile;
7+
8+
class IuguSubscriptionCreatedEvent
9+
{
10+
private $iuguSubscription;
11+
private $userId;
12+
private $planId;
13+
14+
/**
15+
* IuguSubscriptionCreatedEvent constructor.
16+
* @param $iuguSubscription
17+
* @param $userId
18+
* @param $planId
19+
*/
20+
public function __construct($iuguSubscription, $userId, $planId)
21+
{
22+
$this->iuguSubscription = $iuguSubscription;
23+
$this->userId = $userId;
24+
$this->planId = $planId;
25+
}
26+
27+
/**
28+
* @return mixed
29+
*/
30+
public function getIuguSubscription()
31+
{
32+
return $this->iuguSubscription;
33+
}
34+
35+
/**
36+
* @return mixed
37+
*/
38+
public function getUserId()
39+
{
40+
return $this->userId;
41+
}
42+
43+
/**
44+
* @return mixed
45+
*/
46+
public function getPlanId()
47+
{
48+
return $this->planId;
49+
}
50+
51+
52+
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace CodeFin\Http\Controllers\Api;
4+
5+
use CodeFin\Http\Controllers\Controller;
6+
use CodeFin\Iugu\IuguSubscriptionManager;
7+
use CodeFin\Iugu\OrderManager;
8+
use CodeFin\Iugu\SubscriptionManager;
9+
use CodeFin\Mail\FirstSubscriptionPaid;
10+
use CodeFin\Models\Order;
11+
use Illuminate\Http\Request;
12+
use Illuminate\Support\Facades\Mail;
13+
14+
class IuguController extends Controller
15+
{
16+
/**
17+
* @var OrderManager
18+
*/
19+
private $orderManager;
20+
/**
21+
* @var IuguSubscriptionManager
22+
*/
23+
private $subscriptionManager;
24+
25+
/**
26+
* IuguController constructor.
27+
* @param OrderManager $orderManager
28+
* @param IuguSubscriptionManager $subscriptionManager
29+
*/
30+
public function __construct(OrderManager $orderManager, SubscriptionManager $subscriptionManager)
31+
{
32+
$this->orderManager = $orderManager;
33+
$this->subscriptionManager = $subscriptionManager;
34+
}
35+
36+
public function hooks(Request $request)
37+
{
38+
$event = $request->get('event');
39+
$data = $request->get("data", []);
40+
41+
switch ($event) {
42+
case 'invoice.created':
43+
$this->orderManager->create($data);
44+
break;
45+
case 'invoice.status_changed':
46+
if ($data['status'] == 'paid') {
47+
$this->orderManager->paid($data);
48+
}
49+
break;
50+
case 'subscription.renewed':
51+
$subscription = $this->subscriptionManager->renew($data);
52+
if ($subscription && $subscription->orders()->where('status', Order::STATUS_PAID)->count() == 1) {
53+
Mail::to($subscription->user)->send(new FirstSubscriptionPaid($subscription));
54+
}
55+
break;
56+
}
57+
}
58+
}
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,69 @@
11
<?php
22

33
namespace CodeFin\Http\Controllers\Site;
4+
45
use CodeFin\Http\Controllers\Controller;
6+
use CodeFin\Http\Requests\SubscriptionCreateRequest;
7+
use CodeFin\Iugu\Exceptions\AbstractIuguException;
8+
use CodeFin\Iugu\Exceptions\IuguCustomerException;
9+
use CodeFin\Iugu\Exceptions\IuguPaymentMethodException;
10+
use CodeFin\Iugu\Exceptions\IuguSubscriptionException;
11+
use CodeFin\Iugu\IuguSubscriptionManager;
512
use CodeFin\Repositories\Interfaces\PlanRepository;
13+
use Illuminate\Support\Facades\Auth;
614

715
class SubscriptionsController extends Controller
816
{
917
/**
1018
* @var PlanRepository
1119
*/
1220
private $planRepository;
21+
/**
22+
* @var IuguSubscriptionManager
23+
*/
24+
private $iuguSubscriptionManager;
1325

14-
public function __construct(PlanRepository $planRepository)
26+
public function __construct(PlanRepository $planRepository, IuguSubscriptionManager $iuguSubscriptionManager)
1527
{
1628
$this->planRepository = $planRepository;
29+
$this->iuguSubscriptionManager = $iuguSubscriptionManager;
1730
}
1831

1932
public function create()
2033
{
21-
$plan = $this->planRepository->find(1);
34+
$plan = $this->planRepository->all()->first();
2235
return view('site.subscriptions.create', compact('plan'));
2336
}
2437

25-
public function store()
38+
public function store(SubscriptionCreateRequest $request)
39+
{
40+
$plan = $this->planRepository->all()->first();
41+
42+
try {
43+
$this->iuguSubscriptionManager->create(
44+
Auth::user(), $plan, $request->all()
45+
);
46+
} catch (AbstractIuguException $e) {
47+
$request->session()->flash('error',$this->getMessageException($e));
48+
return redirect()->route('site.subscriptions.create');
49+
}
50+
51+
return redirect()->route('site.subscriptions.successfully');
52+
}
53+
54+
public function successfully()
2655
{
56+
return view('site.subscriptions.successfully');
57+
}
2758

59+
protected function getMessageException($exception)
60+
{
61+
if ($exception instanceof IuguCustomerException) {
62+
return 'Erro ao processar cliente. Contacte o atendimento para mais detalhes.';
63+
} elseif ($exception instanceof IuguPaymentMethodException) {
64+
return 'Erro ao salvar método de pagamento. Contacte o atendimento para mais detalhes.';
65+
}elseif ($exception instanceof IuguSubscriptionException) {
66+
return 'Erro ao processar assinatura. Contacte o atendimento para mais detalhes.';
67+
}
2868
}
2969
}

app/Http/Kernel.php

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace CodeFin\Http;
44

55
use CodeFin\Http\Middleware\AddClientTenant;
6+
use CodeFin\Http\Middleware\AuthenticateFromToken;
7+
use CodeFin\Http\Middleware\CheckSubscription;
68
use Illuminate\Foundation\Http\Kernel as HttpKernel;
79

810
class Kernel extends HttpKernel
@@ -54,5 +56,7 @@ class Kernel extends HttpKernel
5456
'can' => \Illuminate\Auth\Middleware\Authorize::class,
5557
'guest' => \CodeFin\Http\Middleware\RedirectIfAuthenticated::class,
5658
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
59+
'auth.from_token' => AuthenticateFromToken::class,
60+
'check-subscription' => CheckSubscription::class
5761
];
5862
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace CodeFin\Http\Middleware;
4+
5+
use Closure;
6+
use Illuminate\Auth\AuthenticationException;
7+
use Illuminate\Support\Facades\Auth;
8+
9+
class AuthenticateFromToken
10+
{
11+
/**
12+
* Handle an incoming request.
13+
*
14+
* @param \Illuminate\Http\Request $request
15+
* @param \Closure $next
16+
* @return mixed
17+
*/
18+
public function handle($request, Closure $next)
19+
{
20+
if(!Auth::guard('web')->check() && Auth::guard('api')->check()){
21+
$id = Auth::guard('api')->user()->id;
22+
Auth::guard('web')->loginUsingId($id);
23+
}
24+
if(!Auth::guard('web')->check()){
25+
throw new AuthenticationException('Unauthenticated.');
26+
}
27+
28+
return $next($request);
29+
}
30+
}

0 commit comments

Comments
 (0)