206 lines
7.9 KiB
PHP
206 lines
7.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\Student;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Resources\BannerResource;
|
|
use App\Http\Resources\CategoryNotesResource;
|
|
use App\Http\Resources\CategoryResource;
|
|
use App\Http\Resources\CourseResource;
|
|
use App\Http\Resources\GameResource;
|
|
use App\Http\Resources\NotificationResource;
|
|
use App\Http\Resources\SettingResource;
|
|
use App\Http\Resources\TransactionResource;
|
|
use App\Http\Resources\UserResource;
|
|
use App\Http\Resources\VideoCategoryResource;
|
|
use App\Http\Resources\VideoResource;
|
|
use App\Models\Banner;
|
|
use App\Models\Category;
|
|
use App\Models\CategoryNotes;
|
|
use App\Models\Course;
|
|
use App\Models\Game;
|
|
use App\Models\Notification;
|
|
use App\Models\Setting;
|
|
use App\Models\Transaction;
|
|
use App\Models\User;
|
|
use App\Models\Video;
|
|
use App\Models\VideoCategory;
|
|
use App\Notifications\EmailVerification;
|
|
use App\Traits\ApiResponseHelper;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Support\Str;
|
|
|
|
class GeneralController extends Controller
|
|
{
|
|
use ApiResponseHelper;
|
|
|
|
public function fetch()
|
|
{
|
|
try {
|
|
$user = Auth::user();
|
|
$token = $user->createToken($user->email)->plainTextToken;
|
|
$banners = Banner::where('status', true)->latest()->take(config('custom.HOME_RECORD_LIMIT'))->get();
|
|
$categories = Category::where('status', true)->latest()->take(config('custom.HOME_RECORD_LIMIT'))->get();
|
|
$courses = $user->courses;
|
|
$transactions = $user->transactions;
|
|
$settings = Setting::first();
|
|
|
|
$data = collect([
|
|
'student' => new UserResource($user),
|
|
'banners' => BannerResource::collection($banners),
|
|
'courseCategories' => CategoryResource::collection($categories),
|
|
'courses' => CourseResource::collection($courses),
|
|
'transactions' => TransactionResource::collection($transactions),
|
|
'settings' => new SettingResource($settings),
|
|
'token' => $token
|
|
]);
|
|
$message = 'Data fetched successfully';
|
|
return $this->apiResponse(true, $message, $data);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
public function profileUpdate(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'notification_id' => ['required'],
|
|
]);
|
|
if ($validator->fails()) {
|
|
return $this->apiResponse(false, $validator->errors()->first(), $validator->errors());
|
|
}
|
|
try {
|
|
$user = Auth::user();
|
|
$user->update([
|
|
'notification_id' => $request->notification_id
|
|
]);
|
|
$message = 'Profile updated successfully';
|
|
return $this->apiResponse(true, $message);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function courses()
|
|
{
|
|
try {
|
|
$user = Auth::user();
|
|
$courses = Course::where('student_id', $user->id)->with('allTransactions')->latest()->paginate(config('custom.PAGINATION_SIZE'));
|
|
$data = CourseResource::collection($courses)->response()->getData(true);
|
|
$message = 'Data retrieved successfully';
|
|
return $this->apiResponse(true, $message, $data);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function games()
|
|
{
|
|
try {
|
|
$games = Game::where('status', 1)->latest()->paginate(config('custom.PAGINATION_SIZE'));
|
|
$data = GameResource::collection($games)->response()->getData(true);
|
|
$message = 'Data retrieved successfully';
|
|
return $this->apiResponse(true, $message, $data);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function categories()
|
|
{
|
|
try {
|
|
$categories = Category::where('status', true)->latest()->paginate(config('custom.PAGINATION_SIZE'));
|
|
$data = CategoryResource::collection($categories)->response()->getData(true);
|
|
$message = 'Data retrieved successfully';
|
|
return $this->apiResponse(true, $message, $data);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function transactions()
|
|
{
|
|
try {
|
|
$user = Auth::user();
|
|
$transactions = Transaction::where('student_id', $user->id)->latest()->paginate(config('custom.PAGINATION_SIZE'));
|
|
$data = TransactionResource::collection($transactions)->response()->getData(true);
|
|
$message = 'Data retrieved successfully';
|
|
return $this->apiResponse(true, $message, $data);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function notifications()
|
|
{
|
|
try {
|
|
$notifications = Notification::latest()->paginate(config('custom.PAGINATION_SIZE'));
|
|
$data = NotificationResource::collection($notifications)->response()->getData(true);
|
|
$message = 'Data retrieved successfully';
|
|
return $this->apiResponse(true, $message, $data);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function videoCategories()
|
|
{
|
|
try {
|
|
$videoCategories = VideoCategory::where('status', 1)->latest()->paginate(config('custom.PAGINATION_SIZE'));
|
|
$data = VideoCategoryResource::collection($videoCategories)->response()->getData(true);
|
|
$message = 'Data retrieved successfully';
|
|
return $this->apiResponse(true, $message, $data);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function randomVideos()
|
|
{
|
|
try {
|
|
$randomVideos = Video::latest()
|
|
->whereHas('videoCategory', function ($query) {
|
|
$query->where('status', 1);
|
|
})
|
|
->paginate(config('custom.PAGINATION_SIZE'));
|
|
$data = VideoResource::collection($randomVideos)->response()->getData(true);
|
|
$message = 'Data retrieved successfully';
|
|
return $this->apiResponse(true, $message, $data);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function categoryVideos($category_id)
|
|
{
|
|
try {
|
|
$categoryVideos = Video::where('video_category_id', $category_id)
|
|
->whereHas('videoCategory', function ($query) {
|
|
$query->where('status', 1);
|
|
})
|
|
->latest()->paginate(config('custom.PAGINATION_SIZE'));
|
|
$data = VideoResource::collection($categoryVideos)->response()->getData(true);
|
|
$message = 'Data retrieved successfully';
|
|
return $this->apiResponse(true, $message, $data);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function categoryNotes($category_id)
|
|
{
|
|
try {
|
|
$categoryNotes = CategoryNotes::where('category_id', $category_id)->latest()->paginate(config('custom.PAGINATION_SIZE'));
|
|
$data = CategoryNotesResource::collection($categoryNotes)->response()->getData(true);
|
|
$message = 'Data retrieved successfully';
|
|
return $this->apiResponse(true, $message, $data);
|
|
} catch (\Throwable $exception) {
|
|
return $this->apiResponse(false, $exception->getMessage());
|
|
}
|
|
}
|
|
}
|