Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
4 / 6
CRAP
85.71% covered (success)
85.71%
36 / 42
SponsorController
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
4 / 6
12.42
85.71% covered (success)
85.71%
36 / 42
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 index
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
6 / 6
 store
0.00% covered (danger)
0.00%
0 / 1
4.59
66.67% covered (warning)
66.67%
6 / 9
 show
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
 update
0.00% covered (danger)
0.00%
0 / 1
4.06
84.21% covered (success)
84.21%
16 / 19
 getValidator
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
1<?php
2
3namespace Qmp\Laravel\SiteGeneratorSponsors\Controllers;
4
5use App\Http\Controllers\Controller;
6use Illuminate\Http\Response;
7use Illuminate\Http\Request;
8use Illuminate\Support\Facades\Log;
9use Illuminate\Support\Facades\Redis;
10use Qmp\Laravel\ApiDigitalV2\Api\DigitalV2InterfaceProvider;
11use Qmp\Laravel\MicroService\Controllers\AbstractMicroServiceController;
12use Qmp\Laravel\SiteGeneratorSponsors\Models\Sponsor;
13use Qmp\Laravel\MicroService\Client\Tools\Request as ClientRequest;
14use Qmp\Laravel\MicroService\Client\Client;
15
16class SponsorController extends AbstractMicroServiceController
17{
18    protected $serviceSiteDetail = 'service_site_generator_detail';
19    protected $resourceNameSiteDetailSponsorSites = 'sponsor-sites';
20    protected $resourceNameSiteDetailSponsors = 'site/sponsor';
21
22    public function __construct(Request $request)
23    {
24        parent::__construct($request);
25    }
26
27    /**
28     * Display a listing of the resource.
29     *
30     * @return \Illuminate\Http\Response
31     */
32    public function index()
33    {
34        $sponsor = Sponsor::where('id', 'exists', true)
35            ->where('text', 'exists', true)
36            ->project(['_id' => 0, 'digitalv2' => 0])
37            ->orderBy('text')
38            ->get();
39
40        return response()->json($sponsor);
41    }
42
43    /**
44     * Store a newly created resource in storage.
45     *
46     * @param  \Illuminate\Http\Request  $request
47     * @return \Illuminate\Http\Response
48     */
49    public function store(Request $request)
50    {
51        if(!$request->has('id') || $request->id === 0) {
52            $request->merge(['id' => uniqid()]);
53        }
54
55        $request->validate($this->getValidator());
56
57        try {
58            $sponsor = Sponsor::create($request->all());
59            Redis::publish('site-generator-config', json_encode(['action' => 'update-sponsors', 'sponsorId' => $sponsor->id]));
60            return response()->json(["status" => "ok", "datas" => $sponsor->toArray()], Response::HTTP_CREATED);
61        } catch (\Exception $e) {
62            Log::debug('Unable to store entity:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
63            return response()->json(["status" => "ko", "message" => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
64        }
65    }
66
67    /**
68     * Display the specified resource.
69     *
70     * @return \Illuminate\Http\Response
71     */
72    public function show(Sponsor $sponsor)
73    {
74        $request = ClientRequest::createObject($this->serviceSiteDetail, $this->resourceNameSiteDetailSponsorSites);
75        $response = Client::get($request, $sponsor->id);
76
77        $sponsor = $sponsor->toArray();
78        $sponsor['sites'] = $response->content;
79
80        return response()->json(['status' => 'Ok', 'sponsor' => $sponsor], Response::HTTP_OK);
81    }
82
83    /**
84     * Update the specified resource in storage.
85     *
86     * @param  \Illuminate\Http\Request  $request
87     * @return \Illuminate\Http\Response
88     */
89    public function update(Request $request, $sponsor)
90    {
91        $request->validate(array_merge($this->getValidator(), ['sites' => 'required|array']));
92
93        try {
94
95            $sponsor = Sponsor::findOrFail($sponsor);
96
97            foreach ($request->sites as $action => $items) {
98                foreach ($items as $item) {
99
100                    $ws = resolve(DigitalV2InterfaceProvider::class)->createSponsorWebservice($item, $sponsor->id);
101                    $requestBetweenServices = ClientRequest::createObject(
102                        $this->serviceSiteDetail,
103                        $this->resourceNameSiteDetailSponsors,
104                        [
105                            'body' => [
106                                'action' => $action,
107                                'sponsor' => [
108                                    'id' => $sponsor->id,
109                                    'text' => $sponsor->text,
110                                    'partner' => false,
111                                    'ws' => $ws['ws']
112                                ]
113                            ]
114                        ]
115                    );
116
117                    Client::put($requestBetweenServices, $item);
118
119                }
120            }
121
122
123            $sponsor->update($request->except('id', 'sites'));
124            Redis::publish('site-generator-config', json_encode(['action' => 'update-sponsors', 'sponsorId' => $sponsor->id]));
125            return response()->json(["status" => "ok", "datas" => $sponsor->toArray()], Response::HTTP_OK);
126        } catch (\Exception $e) {
127            Log::debug('Unable to update entity:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
128            return response()->json(["status" => "ko", "message" => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
129        }
130    }
131
132    protected function getValidator()
133    {
134        return [
135            'id' => 'required',
136            'segmentation' => 'required|array',
137        ];
138    }
139}