Passed
Push — master ( 260ede...8de997 )
by Richard
03:29
created

LeaderboardTimescope::getHighscoreRank()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 4
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A LeaderboardTimescope::previous() 0 3 1
1
<?php
2
3
namespace Furic\Leaderboards\Models;
4
5
use Illuminate\Database\Eloquent\Model;
6
7
class LeaderboardTimescope extends Model
8
{
9
10
    protected $guarded = [];
11
12
    public static function findByLeaderboard($leaderboard)
13
    {
14
        $leaderboardTimescope = SELF::where('leaderboard_id', $leaderboard->id)
15
                ->whereDate('start_at', '<=', date('Y-m-d'))
16
                ->whereDate('end_at', '>=', date('Y-m-d'))
17
                ->first();
18
        if (!$leaderboardTimescope) { // Create a new leaderboard timescope entry if not found
19
            $data = [];
20
            $data['leaderboard_id'] = $leaderboard->id;
21
            switch ($leaderboard->timescope) {
22
                case 1: // Daily
23
                    $data['start_at'] = date('Y-m-d');
24
                    $data['end_at'] = date('Y-m-d');
25
                    break;
26
                case 2: // Weekly
27
                    $data['start_at'] = date('Y-m-d', strtotime('monday this week'));
28
                    $data['end_at'] = date('Y-m-d', strtotime('sunday this week'));
29
                    break;
30
                case 3: // Monthly
31
                    $data['start_at'] = date('Y-m-01');
32
                    $data['end_at'] = date('Y-m-t');
33
                    break;
34
                default:
35
                case 0: // All time
36
                    $data['start_at'] = date('Y-m-d');
37
                    $data['end_at'] = date('2099-12-31');
38
                    break;
39
            }
40
            $previousLeaderboardTimescope = SELF::where('start_at', '<', $data['start_at'])->orderBy('start_at', 'desc')->first();
41
            if ($previousLeaderboardTimescope)
42
                $data['previous_id'] = $previousLeaderboardTimescope->id;
43
            $leaderboardTimescope = SELF::create($data);
44
        }
45
        return $leaderboardTimescope;
46
    }
47
48
    public function leaderboard()
49
    {
50
        return $this->belongsTo(Leaderboard::class);
51
    }
52
53
    public function scores()
54
    {
55
        return $this->hasMany(LeaderboardScore::class);
56
    }
57
    
58
    public function highscores()
59
    {
60
        return $this->hasMany(LeaderboardScore::class);
61
    }
62
    
63
    public function orderedScoresByScoreSum()
64
    {
65
        return $this->hasMany(LeaderboardScore::class)->orderBy('score_sum', 'desc');
66
    }
67
    
68
    public function orderedScoresByHighscore()
69
    {
70
        return $this->hasMany(LeaderboardScore::class)->orderBy('highscore', 'desc');
71
    }
72
    
73
    public function previous()
74
    {
75
        return SELF::find($this->previous_id);
76
    }
77
78
}