feat: api for check updates mobile

mobile
ricky rx 2 years ago
parent 5567f61f3d
commit 8e1da6c4b1

@ -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]

@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\api\mobile;
use App\Helper\JSONResponse;
use App\Http\Controllers\Controller;
use App\Models\ApkUpdate;
use App\Models\VideoUpdate;
use Illuminate\Http\Request;
class CheckUpdateController extends Controller {
public function videoUpdateLatest(Request $request) {
$lastestVideoUpdate = VideoUpdate::selected()->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]);
}
}

@ -0,0 +1,24 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class MobileMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response {
$serverMobileToken = env('MOBILE_TOKEN', '');
if(!$serverMobileToken) throw new \Exception('Mobile token in server is not found');
$clientMobileToken = $request->header('mobile-token', '');
if($serverMobileToken != $clientMobileToken) throw new \Exception('Invalid Mobile Token');
return $next($request);
}
}

@ -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
// ---------------------------------------------------------------------------------------
}

@ -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
// ---------------------------------------------------------------------------------------
}

@ -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'));
});

@ -0,0 +1,10 @@
<?php
use App\Http\Controllers\api\mobile\CheckUpdateController;
use Illuminate\Support\Facades\Route;
Route::controller(CheckUpdateController::class)->group(function() {
Route::post('/check-update/video-update/latest', 'videoUpdateLatest');
Route::post('/check-update/apk-update/latest', 'apkUpdateLatest');
})
?>
Loading…
Cancel
Save