diff --git a/.env.example b/.env.example index e355062..4885627 100644 --- a/.env.example +++ b/.env.example @@ -3,6 +3,7 @@ APP_ENV=local APP_KEY= APP_DEBUG=true APP_URL=http://localhost +MOBILE_TOKEN=Gaobd5OKPdGARLGTD03vSFStrADAxmQ9 # for CORS SANCTUM_STATEFUL_DOMAINS=[http://localhost:3000] diff --git a/app/Http/Controllers/api/mobile/CheckUpdateController.php b/app/Http/Controllers/api/mobile/CheckUpdateController.php new file mode 100644 index 0000000..73e7c42 --- /dev/null +++ b/app/Http/Controllers/api/mobile/CheckUpdateController.php @@ -0,0 +1,20 @@ +latest('updated_at')->first(); + return JSONResponse::Success(['latestVideoUpload' => $lastestVideoUpdate]); + } + public function apkUpdateLatest(Request $request) { + $latestApkUpdate = ApkUpdate::latest('version_code')->first(); + return JSONResponse::Success(['latestApkUpdate' => $latestApkUpdate]); + } +} diff --git a/app/Http/Middleware/MobileMiddleware.php b/app/Http/Middleware/MobileMiddleware.php new file mode 100644 index 0000000..faddb3b --- /dev/null +++ b/app/Http/Middleware/MobileMiddleware.php @@ -0,0 +1,24 @@ +header('mobile-token', ''); + if($serverMobileToken != $clientMobileToken) throw new \Exception('Invalid Mobile Token'); + return $next($request); + } +} diff --git a/app/Models/ApkUpdate.php b/app/Models/ApkUpdate.php index 0168308..da582b0 100644 --- a/app/Models/ApkUpdate.php +++ b/app/Models/ApkUpdate.php @@ -8,6 +8,7 @@ use App\Helper\JSONResponse; use App\Helper\Traits\Models\CanMultiOrderBy; use App\Helper\Traits\Models\CanMultiSearch; use Carbon\Carbon; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -25,6 +26,16 @@ class ApkUpdate extends Model { protected $hidden = ['file']; protected $appends = ['file_url']; + // --------------------------------------------------------------------------------------- + // -- RELATED TO SCOPE + public function scopeNewest(Builder $query){ + return $query->orderByDesc('version_code'); + } + // -- END RELATED TO SCOPE + // --------------------------------------------------------------------------------------- + + // --------------------------------------------------------------------------------------- + // -- RELATED TO MODIFICATION DATA FROM REQUEST public static function upsertFromRequest(Request $request) { $request->validate([ 'id' => 'nullable|integer|exists:App\Models\ApkUpdate,id', @@ -87,8 +98,11 @@ class ApkUpdate extends Model { } } + // -- END RELATED TO MODIFICATION DATA FROM REQUEST + // --------------------------------------------------------------------------------------- - // -- File UTILITIES + // --------------------------------------------------------------------------------------- + // -- FILE UTILITIES protected function fileUrl(): Attribute { return Attribute::make( fn() => $this->file ? Storage::disk('s3')->url($this->file) : '' @@ -114,5 +128,6 @@ class ApkUpdate extends Model { return "$name.$extension"; } public static function deleteFile($dbUrl) { Storage::disk('s3')->delete($dbUrl); } - // -- END File UTILITIES + // -- END FILE UTILITIES + // --------------------------------------------------------------------------------------- } diff --git a/app/Models/VideoUpdate.php b/app/Models/VideoUpdate.php index 630026d..30b480c 100644 --- a/app/Models/VideoUpdate.php +++ b/app/Models/VideoUpdate.php @@ -26,6 +26,16 @@ class VideoUpdate extends Model { protected $hidden = ['file']; protected $appends = ['file_url']; + // --------------------------------------------------------------------------------------- + // -- RELATED TO SCOPE + public function scopeSelected(Builder $query){ + return $query->where('is_selected', true); + } + // -- END RELATED TO SCOPE + // --------------------------------------------------------------------------------------- + + // --------------------------------------------------------------------------------------- + // -- RELATED TO MODIFICATION DATA FROM REQUEST public static function upsertFromRequest(Request $request) { $request->validate([ 'id' => 'nullable|integer|exists:App\Models\VideoUpdate,id', @@ -121,8 +131,11 @@ class VideoUpdate extends Model { throw $th; } } + // -- END RELATED MODIFICATION DATA FROM REQUEST + // --------------------------------------------------------------------------------------- - // -- File UTILITIES + // --------------------------------------------------------------------------------------- + // -- FILE UTILITIES protected function fileUrl(): Attribute { return Attribute::make( fn() => $this->file ? Storage::disk('s3')->url($this->file) : '' @@ -148,5 +161,6 @@ class VideoUpdate extends Model { return "$name.$extension"; } public static function deleteFile($dbUrl) { Storage::disk('s3')->delete($dbUrl); } - // -- END File UTILITIES + // -- END FILE UTILITIES + // --------------------------------------------------------------------------------------- } diff --git a/routes/api.php b/routes/api.php index 84739d1..316c694 100644 --- a/routes/api.php +++ b/routes/api.php @@ -32,4 +32,8 @@ Route::controller(AuthController::class )->group(function() { Route::middleware(USER_MIDDLEWARES)->group(function() { Route::prefix('/superadmin')->group(base_path('routes/api/superadmin.php')); +}); + +Route::middleware(MobileMiddleware::class)->group(function() { + Route::prefix('/mobile')->group(base_path('routes/api/mobile.php')); }); \ No newline at end of file diff --git a/routes/api/mobile.php b/routes/api/mobile.php new file mode 100644 index 0000000..0a5c364 --- /dev/null +++ b/routes/api/mobile.php @@ -0,0 +1,10 @@ +group(function() { + Route::post('/check-update/video-update/latest', 'videoUpdateLatest'); + Route::post('/check-update/apk-update/latest', 'apkUpdateLatest'); +}) +?> \ No newline at end of file