File size: 4,328 Bytes
1251c2f
 
 
 
 
60c127b
 
 
 
dd18d72
1251c2f
 
 
 
 
 
60c127b
2b70216
 
 
60c127b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dd18d72
60c127b
 
 
 
 
 
 
dd18d72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1251c2f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\CustomUser;
use App\Models\Skill;
use App\Models\Task;
use Auth;
use Carbon\Carbon;

class DashboardController extends Controller
{
    public function home(){
        return view('dashboard.home');
    }

    public function explore(){
        return view('dashboard.explore');
    }

    public function myskills(){
        $skills = Skill::where(
            'belongs_to',
            Auth::guard('customuser')->user()->username
        )->get();

        return view('dashboard.myskills',[
            'skills'=>$skills,
        ]);
    }

    public function createSkill(Request $request){
        // request includes title
        // validate
        $request->validate([
            'title' => ['required',
                        'string',
            ]
        ]);

        // save data for current user
        $skill = new Skill();
        $skill->title = $request->title;
        $skill->belongs_to = Auth::guard('customuser')->user()->username; // username of current logged in user

        $skill->save();

        return redirect(route('dashboard.myskills'));

    }

    public function skill($id){
        // returns the view for current user's skill which has the given id
        $current_skill = Skill::where(
                            'belongs_to',
                            Auth::guard('customuser')->user()->username)->where(
                            'id',
                            $id
        )->first();

        if($current_skill==null){
            return redirect(route('dashboard.myskills'));   // skill not found
        }

        // get the list of tasks which belongs to this particular skill
        $tasks = Task::where('skill_id',$current_skill->id)->orderby('updated_at',"DESC")->get();

        return view('dashboard.skill',[
            'skill' => $current_skill,
            'tasks' => $tasks,
        ]);

    }

    public function createTask(Request $request,$skill_id){
        // $request includes title, task_type

        // validate
        $request->validate([
            'title' => [
                'required',
                'string',
            ],
            'task_type' => [
                'required',
                'string',
                'in:basic,sub,app'
            ],
        ]);

        //
        $current_skill = Skill::where(
                    'belongs_to',
                    Auth::guard('customuser')->user()->username)->where(
                    'id',
                    $skill_id
        )->first();

        if($current_skill==null){
        return redirect(route('dashboard.myskills'));   // skill not found
        }

        // create task
        $task = new Task();
        $task->title = $request->title;
        $task->type = $request->task_type;
        $task->skill_id = $skill_id;

        $task->save();

        return redirect()->back();
        // return redirect(route('dashboard.skill',$id));
    }

    public function taskDetail($task_id){
        $task = Task::where("id",$task_id)->first();
        if($task==null){
            abort(404);
        }
        return $task->toArray();
    }
    public function taskPracticed(Request $request){
        // $request includes task_id

        // validate
        $request->validate([
            'task_id'=>[
                'required',
                'string',
                'exists:App\Models\Task,id',
            ]
        ]);

        // check if it has been a given amount of time since they last practiced
        $minutes = 2;
        $task = Task::where('id',$request->task_id);
        $task = $task->first();

        // do this except the first time
        if($task->practice_count>0){
            $task = Task::where('id',$request->task_id);
            $task = $task->where('updated_at','<=',Carbon::now()->subMinutes($minutes)->toDateTimeString());    // only those who are old
            $task = $task->first();
        }

        if($task==null){
            // try again later in some time
            return redirect()->back()->withErrors([
                'message'=>"you can only practice a task again after $minutes minutes",
            ]);
        }

        $task->practice_count+=1;
        $task->save();


        return redirect()->back();

    }
}