6
6
namespace App \Http \Controllers ;
7
7
8
8
use App \Jobs \RenumberUserScorePins ;
9
- use App \Libraries \MorphMap ;
10
- use App \Models \Beatmap ;
11
9
use App \Models \ScorePin ;
12
10
use App \Models \Solo ;
13
11
use Exception ;
@@ -23,29 +21,31 @@ public function __construct()
23
21
24
22
public function destroy ()
25
23
{
26
- auth ()-> user ()->scorePins ()->where ( $ this -> getScoreParams (request ()-> all ( )))->delete ();
24
+ \Auth:: user ()->scorePins ()->whereKey ( get_int (request (' score_id ' )))->delete ();
27
25
28
26
return response ()->noContent ();
29
27
}
30
28
31
29
public function reorder ()
32
30
{
33
- $ rawParams = request ()-> all ();
34
- $ targetParams = $ this -> getScoreParams ($ rawParams );
31
+ $ rawParams = \Request:: all ();
32
+ $ targetId = get_int ($ rawParams[ ' score_id ' ] ?? null );
35
33
36
- $ pinsQuery = auth ()->user ()->scorePins ();
37
- $ target = $ pinsQuery ->clone ()->where ($ targetParams )->firstOrFail ();
34
+ $ pinsQuery = \Auth::user ()->scorePins ();
35
+ $ target = $ pinsQuery ->clone ()->findOrFail ($ targetId );
36
+ $ rulesetId = $ target ->ruleset_id ;
37
+ $ pinsQuery ->where ('ruleset_id ' , $ rulesetId );
38
38
39
39
$ adjacentScores = [];
40
40
foreach (['order1 ' , 'order3 ' ] as $ position ) {
41
- $ adjacentScores [$ position ] = $ this -> getScoreParams ( get_arr ( $ rawParams [$ position ] ?? null ) ?? [] );
41
+ $ adjacentScoreIds [$ position ] = get_int ( $ rawParams [$ position ][ ' score_id ' ] ?? null );
42
42
}
43
43
44
- $ order1Item = isset ($ adjacentScores ['order1 ' ][ ' score_id ' ])
45
- ? $ pinsQuery ->clone ()->where ( $ adjacentScores ['order1 ' ])-> first ( )
44
+ $ order1Item = isset ($ adjacentScoreIds ['order1 ' ])
45
+ ? $ pinsQuery ->clone ()->find ( $ adjacentScoreIds ['order1 ' ])
46
46
: null ;
47
- $ order3Item = $ order1Item === null && isset ($ adjacentScores ['order3 ' ][ ' score_id ' ])
48
- ? $ pinsQuery ->clone ()->where ( $ adjacentScores ['order3 ' ])-> first ( )
47
+ $ order3Item = $ order1Item === null && isset ($ adjacentScoreIds ['order3 ' ])
48
+ ? $ pinsQuery ->clone ()->find ( $ adjacentScoreIds ['order3 ' ])
49
49
: null ;
50
50
51
51
abort_if ($ order1Item === null && $ order3Item === null , 422 , 'no valid pinned score reference is specified ' );
@@ -63,7 +63,7 @@ public function reorder()
63
63
$ order2 = ($ order1 + $ order3 ) / 2 ;
64
64
65
65
if ($ order3 - $ order1 < 0.1 ) {
66
- dispatch (new RenumberUserScorePins ($ target ->user_id , $ target ->score_type ));
66
+ dispatch (new RenumberUserScorePins ($ target ->user_id , $ target ->ruleset_id ));
67
67
}
68
68
69
69
$ target ->update (['display_order ' => $ order2 ]);
@@ -73,33 +73,36 @@ public function reorder()
73
73
74
74
public function store ()
75
75
{
76
- $ params = $ this ->getScoreParams (request ()->all ());
77
-
78
- abort_if (!ScorePin::isValidType ($ params ['score_type ' ]), 422 , 'invalid score_type ' );
79
-
80
- $ score = MorphMap::getClass ($ params ['score_type ' ])::find ($ params ['score_id ' ]);
76
+ $ id = get_int (request ('score_id ' ));
77
+ $ score = Solo \Score::find ($ id );
81
78
82
79
abort_if ($ score === null , 422 , "specified score couldn't be found " );
83
80
84
- $ user = auth ()-> user ();
81
+ $ user = \Auth:: user ();
85
82
86
- $ pin = ScorePin:: where ([ ' user_id ' => $ user ->getKey ()])-> whereMorphedTo ( ' score ' , $ score )-> first ( );
83
+ $ pin = $ user ->scorePins ()-> find ( $ id );
87
84
88
85
if ($ pin === null ) {
89
86
priv_check ('ScorePin ' , $ score )->ensureCan ();
90
87
91
- $ rulesetId = Beatmap:: MODES [ $ score ->getMode ()] ;
88
+ $ rulesetId = $ score ->ruleset_id ;
92
89
$ currentMinDisplayOrder = $ user ->scorePins ()->where ('ruleset_id ' , $ rulesetId )->min ('display_order ' ) ?? 2500 ;
93
90
94
- $ soloScore = $ score instanceof Solo \Score
95
- ? $ score
96
- : Solo \Score::firstWhere (['ruleset_id ' => $ rulesetId , 'legacy_score_id ' => $ score ->getKey ()]);
97
-
98
91
try {
99
92
(new ScorePin ([
100
93
'display_order ' => $ currentMinDisplayOrder - 100 ,
101
94
'ruleset_id ' => $ rulesetId ,
102
- 'new_score_id ' => $ soloScore ?->getKey(),
95
+
96
+ /**
97
+ * TODO:
98
+ * 1. update score_id = new_score_id
99
+ * 2. remove duplicated score_id
100
+ * 3. use score_id as primary key (both model and database)
101
+ * 4. remove setting score_type below
102
+ * 5. remove new_score_id and score_type columns
103
+ */
104
+ 'score_id ' => $ score ->getKey (),
105
+ 'score_type ' => $ score ->getMorphClass (),
103
106
]))->user ()->associate ($ user )
104
107
->score ()->associate ($ score )
105
108
->saveOrExplode ();
@@ -109,19 +112,9 @@ public function store()
109
112
}
110
113
}
111
114
112
- if ($ score instanceof Solo \Score) {
113
- $ score ->update (['preserve ' => true ]);
114
- }
115
+ $ score ->update (['preserve ' => true ]);
115
116
}
116
117
117
118
return response ()->noContent ();
118
119
}
119
-
120
- private function getScoreParams (array $ form )
121
- {
122
- return get_params ($ form , null , [
123
- 'score_type:string ' ,
124
- 'score_id:int ' ,
125
- ], ['null_missing ' => true ]);
126
- }
127
120
}
0 commit comments