Skip to content

Commit e057381

Browse files
committed
Create SurveyResourceDashboard.php
1 parent 8054ace commit e057381

File tree

3 files changed

+63
-16
lines changed

3 files changed

+63
-16
lines changed

app/Http/Controllers/DashboardController.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace App\Http\Controllers;
44

55
use App\Http\Resources\SurveyAnswerResource;
6-
use App\Http\Resources\SurveyResource;
6+
use App\Http\Resources\SurveyResourceDashboard;
77
use App\Models\Survey;
88
use App\Models\SurveyAnswer;
99
use Illuminate\Http\Request;
@@ -13,13 +13,20 @@ class DashboardController extends Controller
1313
public function index(Request $request)
1414
{
1515
$user = $request->user();
16+
17+
// Total Number of Surveys
1618
$total = Survey::query()->where('user_id', $user->id)->count();
19+
20+
// Latest Survey
1721
$latest = Survey::query()->where('user_id', $user->id)->latest('created_at')->first();
22+
23+
// Total Number of answers
1824
$totalAnswers = SurveyAnswer::query()
1925
->join('surveys', 'survey_answers.survey_id', '=', 'surveys.id')
2026
->where('surveys.user_id', $user->id)
2127
->count();
2228

29+
// Latest 5 answer
2330
$latestAnswers = SurveyAnswer::query()
2431
->join('surveys', 'survey_answers.survey_id', '=', 'surveys.id')
2532
->where('surveys.user_id', $user->id)
@@ -29,7 +36,7 @@ public function index(Request $request)
2936

3037
return [
3138
'totalSurveys' => $total,
32-
'latestSurvey' => $latest ? new SurveyResource($latest) : null,
39+
'latestSurvey' => $latest ? new SurveyResourceDashboard($latest) : null,
3340
'totalAnswers' => $totalAnswers,
3441
'latestAnswers' => SurveyAnswerResource::collection($latestAnswers)
3542
];
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace App\Http\Resources;
4+
5+
use Illuminate\Http\Resources\Json\JsonResource;
6+
use Illuminate\Support\Facades\URL;
7+
use Nette\Utils\DateTime;
8+
9+
class SurveyResourceDashboard extends JsonResource
10+
{
11+
/**
12+
* Transform the resource into an array.
13+
*
14+
* @param \Illuminate\Http\Request $request
15+
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
16+
*/
17+
public function toArray($request)
18+
{
19+
return [
20+
'id' => $this->id,
21+
'image_url' => $this->image ? URL::to($this->image) : null,
22+
'title' => $this->title,
23+
'slug' => $this->slug,
24+
'status' => $this->status !== 'draft',
25+
'created_at' => (new DateTime($this->created_at))->format('Y-m-d H:i:s'),
26+
'expire_date' => $this->expire_date,
27+
'questions' => $this->questions()->count(),
28+
'answers' => $this->answers()->count()
29+
];
30+
}
31+
}

vue/src/views/Dashboard.vue

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
v-else
66
class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 text-gray-700"
77
>
8-
<!-- <pre>{{data}}</pre> -->
98
<div
109
class="bg-white shadow-md p-3 text-center flex flex-col animate-fade-in-down order-1 lg:order-2"
1110
style="animation-delay: 0.1s"
@@ -39,12 +38,24 @@
3938
/>
4039
<h3 class="font-bold text-xl mb-3">{{ data.latestSurvey.title }}</h3>
4140
<div class="flex justify-between text-sm mb-1">
42-
<div>Upload Date:</div>
41+
<div>Create Date:</div>
4342
<div>{{ data.latestSurvey.created_at }}</div>
4443
</div>
44+
<div class="flex justify-between text-sm mb-1">
45+
<div>Expire Date:</div>
46+
<div>{{ data.latestSurvey.expire_date }}</div>
47+
</div>
48+
<div class="flex justify-between text-sm mb-1">
49+
<div>Status:</div>
50+
<div>{{ data.latestSurvey.status ? 'Active' : 'Draft' }}</div>
51+
</div>
52+
<div class="flex justify-between text-sm mb-1">
53+
<div>Questions:</div>
54+
<div>{{ data.latestSurvey.questions }}</div>
55+
</div>
4556
<div class="flex justify-between text-sm mb-3">
4657
<div>Answers:</div>
47-
<div>{{ data.totalAnswers }}</div>
58+
<div>{{ data.latestSurvey.answers }}</div>
4859
</div>
4960
<div class="flex justify-between">
5061
<router-link
@@ -87,8 +98,6 @@
8798
View Answers
8899
</button>
89100
</div>
90-
91-
<!-- <SurveyListItem :survey="data.latestSurvey" class="row-span-2"/> -->
92101
</div>
93102
<div
94103
class="bg-white shadow-md p-3 row-span-2 order-4 lg:order-3 animate-fade-in-down"
@@ -100,31 +109,31 @@
100109
<a
101110
href="javascript:void(0)"
102111
class="text-sm text-blue-500 hover:decoration-blue-500"
103-
>View all</a
104112
>
113+
View all
114+
</a>
105115
</div>
106116
<a
107117
href="#"
108118
v-for="answer of data.latestAnswers"
109119
:key="answer.id"
110-
class="block p-2 hover:bg-gray-100/90 cursor-pointer :bg-gray-200"
120+
class="block p-2 hover:bg-gray-100/90"
111121
>
112122
<div class="font-semibold">{{ answer.survey.title }}</div>
113-
<small
114-
>Answer Made at:
115-
<i class="font-semibold">{{ answer.end_date }}</i></small
116-
>
123+
<small>
124+
Answer Made at:
125+
<i class="font-semibold">{{ answer.end_date }}</i>
126+
</small>
117127
</a>
118128
</div>
119129
</div>
120130
</PageComponent>
121131
</template>
122132

123133
<script setup>
124-
import { computed } from "@vue/reactivity";
125-
import { useStore } from "vuex";
126134
import PageComponent from "../components/PageComponent.vue";
127-
import SurveyListItem from "../components/SurveyListItem.vue";
135+
import { computed } from "vue";
136+
import { useStore } from "vuex";
128137
129138
const store = useStore();
130139

0 commit comments

Comments
 (0)