Passed
Branch master (182172)
by Matthew
04:03 queued 01:23
created

TradeController::GetAssets()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 23
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 23
rs 9.0856
c 0
b 0
f 0
cc 3
eloc 14
nc 3
nop 2
1
<?php
2
3
namespace PhpDraft\Controllers\Commish;
4
5
use \Silex\Application;
6
use Symfony\Component\HttpFoundation\Request;
7
use Symfony\Component\HttpFoundation\Response;
8
use PhpDraft\Domain\Entities\Trade;
9
use PhpDraft\Domain\Entities\TradeAsset;
10
use PhpDraft\Domain\Entities\Manager;
11
use PhpDraft\Domain\Models\PhpDraftResponse;
12
13
class TradeController {
14
  public function GetAssets(Application $app, Request $request) {
15
    $draftId = (int)$request->get('draft_id');
16
    $draft = $app['phpdraft.DraftRepository']->Load($draftId);
17
18
    $managerId = (int)$request->get('manager_id');
19
20
    try {
21
      $manager = $app['phpdraft.ManagerRepository']->Load($managerId);
22
    } catch(\Exception $e) {
23
      $response = new PhpDraftResponse(false, array());
24
      $response->errors[] = "Unable to load manager #$managerId";
25
      return $app->json($response, Response::HTTP_BAD_REQUEST);
26
    }
27
28
    $validity = $app['phpdraft.TradeValidator']->IsManagerValidForAssetRetrieval($draft, $manager);
29
30
    if(!$validity->success) {
31
      return $app->json($validity, Response::HTTP_BAD_REQUEST);
32
    }
33
34
    $assets = $app['phpdraft.TradeService']->GetManagerAssets($draft, $manager->manager_id);
35
36
    return $app->json($assets, Response::HTTP_OK);
37
  }
38
39
  public function Create(Application $app, Request $request) {
40
    $draftId = (int)$request->get('draft_id');
41
    $draft = $app['phpdraft.DraftRepository']->Load($draftId);
42
43
    $newTrade = new Trade();
44
    $newTrade->draft_id = $draftId;
45
    $newTrade->manager1_id = $request->get('manager1_id');
46
    $newTrade->manager2_id = $request->get('manager2_id');
47
48
    $newTrade->trade_round = $draft->draft_current_round;
0 ignored issues
show
Bug introduced by
The property trade_round does not exist on PhpDraft\Domain\Entities\Trade. Did you mean trade_id?
Loading history...
49
50
    $assets_json = $request->get('trade_assets');
51
52
    try {
53
      $newTrade->manager1 = $app['phpdraft.ManagerRepository']->Load($newTrade->manager1_id);
54
      $newTrade->manager2 = $app['phpdraft.ManagerRepository']->Load($newTrade->manager2_id);
55
56
      foreach($assets_json as $asset_id) {
57
        $newTradeAsset = new TradeAsset();
58
        $newTradeAsset->player = $app['phpdraft.PickRepository']->Load($asset_id);
59
        $newTradeAsset->was_drafted = $app['phpdraft.PickService']->PickHasBeenSelected($newTradeAsset->player);
60
61
        if($newTradeAsset->player->manager_id == $newTrade->manager1_id) {
62
          $newTradeAsset->oldmanager_id = $newTrade->manager1_id;
63
          $newTradeAsset->newmanager_id = $newTrade->manager2_id;
64
          $newTradeAsset->oldmanager = $newTrade->manager1;
65
          $newTradeAsset->newmanager = $newTrade->manager2;
66
        } else if($newTradeAsset->player->manager_id == $newTrade->manager2_id) {
67
          $newTradeAsset->oldmanager_id = $newTrade->manager2_id;
68
          $newTradeAsset->newmanager_id = $newTrade->manager1_id;
69
          $newTradeAsset->oldmanager = $newTrade->manager2;
70
          $newTradeAsset->newmanager = $newTrade->manager1;
71
        } else {
72
          throw new \Exception("Invalid trade data.");
73
        }
74
75
        $newTrade->trade_assets[] = $newTradeAsset;
76
      }
77
    } catch(\Exception $e) {
78
      $response = new PhpDraftResponse(false, array());
79
      $message = $e->getMessage();
80
      $response->errors[] = "Unable to build trade: $message";
81
82
      return $app->json($response, Response::HTTP_BAD_REQUEST);
83
    }
84
85
    $validity = $app['phpdraft.TradeValidator']->IsTradeValid($draft, $newTrade);
86
87
    if(!$validity->success) {
88
      return $app->json($validity, Response::HTTP_BAD_REQUEST);
89
    }
90
91
    $response = $app['phpdraft.TradeService']->EnterTrade($draft, $newTrade);
92
93
    return $app->json($response, $response->responseType(Response::HTTP_CREATED));
94
  }
95
}