Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
60.00% covered (warning)
60.00%
3 / 5
CRAP
66.67% covered (warning)
66.67%
30 / 45
OfferController
0.00% covered (danger)
0.00%
0 / 1
60.00% covered (warning)
60.00%
3 / 5
15.48
66.67% covered (warning)
66.67%
30 / 45
 __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
6.27
47.83% covered (warning)
47.83%
11 / 23
1<?php
2
3namespace Qmp\Laravel\SiteGeneratorOffers\Controllers;
4
5use Illuminate\Http\Response;
6use Illuminate\Http\Request;
7use Illuminate\Support\Facades\Log;
8use Illuminate\Support\Facades\Redis;
9use Qmp\Laravel\ApiDigitalV2\Api\DigitalV2InterfaceProvider;
10use Qmp\Laravel\MicroService\Controllers\AbstractMicroServiceController;
11use Qmp\Laravel\SiteGeneratorOffers\Models\Offer;
12use Qmp\Laravel\MicroService\Client\Tools\Request as ClientRequest;
13use Qmp\Laravel\MicroService\Client\Client;
14
15
16class OfferController extends AbstractMicroServiceController
17{
18    protected $serviceSiteDetail = 'service_site_generator_detail';
19    protected $resourceNameSiteDetailSlots = 'site-offer-slots';
20    protected $resourceNameSiteDetailOffers = 'site/offer';
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        $offer = Offer::where('id', 'exists', true)
35            ->where('text', 'exists', true)
36            ->project(['_id' => 0, 'digitalv2' => 0])
37            ->orderBy('id', 'desc')
38            ->get();
39
40        return response()->json($offer);
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        $request->validate(['text' => 'required']);
52
53        try {
54            if (!$request->has('id') || $request->id === 0) {
55                $request->merge(['id' => uniqid()]);
56            }
57
58            $offer = Offer::create($request->all());
59            Redis::publish('site-generator-config', json_encode(['action' => 'update-offers', 'offerId' => $offer->id]));
60            return response()->json(["status" => "ok", "datas" => $offer->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(Offer $offer)
73    {
74        $request = ClientRequest::createObject($this->serviceSiteDetail, $this->resourceNameSiteDetailSlots);
75        $response = Client::get($request, $offer->id);
76
77        $offer = $offer->toArray();
78        $offer['activatedBlock'] = $response->content;
79
80        return response()->json(['status' => 'Ok', 'offer' => $offer], 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, $offer)
90    {
91        $request->validate(['id' => 'required:int']);
92        
93        try {
94            $offer = Offer::findOrFail($offer);
95            foreach ($request->offerChangesStack as $action => $items) {
96                foreach ($items as $item) {
97                    $planning = resolve(DigitalV2InterfaceProvider::class)->createOfferPlanning($offer->id, $item['blockId']);
98                    $requestBetweenServices = ClientRequest::createObject(
99                        $this->serviceSiteDetail,
100                        $this->resourceNameSiteDetailOffers,
101                        [
102                            'body' => [
103                                'action' => $action,
104                                'path' => $item,
105                                'offer' => [
106                                    'id' => uniqid(),
107                                    'value' => $offer->id,
108                                    'text' => $offer->text,
109                                    'url' => $planning['url'],
110                                    'img' => $planning['img'],
111                                    'planning' => $planning['id_planning']
112                                ]
113                            ]
114                        ]
115                    );
116
117                    Client::put($requestBetweenServices, $item['siteId']);
118                }
119            }
120            $offer->update($request->except('id', 'offerChangesStack'));
121            Redis::publish('site-generator-config', json_encode(['action' => 'update-offers', 'offerId' => $offer->id]));
122            return response()->json(["status" => "ok", "datas" => $offer->toArray()], Response::HTTP_OK);
123        } catch (\Exception $e) {
124            Log::debug('Unable to update entity:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
125            return response()->json(["status" => "ko", "message" => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
126        }
127    }
128}