Merge branch 'mobile'

main
ricky rx 2 years ago
commit 2b11a40fb6

@ -3,6 +3,7 @@ APP_ENV=local
APP_KEY= APP_KEY=
APP_DEBUG=true APP_DEBUG=true
APP_URL=http://localhost APP_URL=http://localhost
MOBILE_TOKEN=Gaobd5OKPdGARLGTD03vSFStrADAxmQ9
# for CORS # for CORS
SANCTUM_STATEFUL_DOMAINS=[http://localhost:3000] 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\CanMultiOrderBy;
use App\Helper\Traits\Models\CanMultiSearch; use App\Helper\Traits\Models\CanMultiSearch;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
@ -25,6 +26,16 @@ class ApkUpdate extends Model {
protected $hidden = ['file']; protected $hidden = ['file'];
protected $appends = ['file_url']; 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) { public static function upsertFromRequest(Request $request) {
$request->validate([ $request->validate([
'id' => 'nullable|integer|exists:App\Models\ApkUpdate,id', '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 { protected function fileUrl(): Attribute {
return Attribute::make( return Attribute::make(
fn() => $this->file ? Storage::disk('s3')->url($this->file) : '' fn() => $this->file ? Storage::disk('s3')->url($this->file) : ''
@ -114,5 +128,6 @@ class ApkUpdate extends Model {
return "$name.$extension"; return "$name.$extension";
} }
public static function deleteFile($dbUrl) { Storage::disk('s3')->delete($dbUrl); } 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 $hidden = ['file'];
protected $appends = ['file_url']; 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) { public static function upsertFromRequest(Request $request) {
$request->validate([ $request->validate([
'id' => 'nullable|integer|exists:App\Models\VideoUpdate,id', 'id' => 'nullable|integer|exists:App\Models\VideoUpdate,id',
@ -121,8 +131,11 @@ class VideoUpdate extends Model {
throw $th; throw $th;
} }
} }
// -- END RELATED MODIFICATION DATA FROM REQUEST
// ---------------------------------------------------------------------------------------
// -- File UTILITIES // ---------------------------------------------------------------------------------------
// -- FILE UTILITIES
protected function fileUrl(): Attribute { protected function fileUrl(): Attribute {
return Attribute::make( return Attribute::make(
fn() => $this->file ? Storage::disk('s3')->url($this->file) : '' fn() => $this->file ? Storage::disk('s3')->url($this->file) : ''
@ -148,5 +161,6 @@ class VideoUpdate extends Model {
return "$name.$extension"; return "$name.$extension";
} }
public static function deleteFile($dbUrl) { Storage::disk('s3')->delete($dbUrl); } public static function deleteFile($dbUrl) { Storage::disk('s3')->delete($dbUrl); }
// -- END File UTILITIES // -- END FILE UTILITIES
// ---------------------------------------------------------------------------------------
} }

@ -5,6 +5,7 @@ use App\Http\Controllers\api\superadmin\ApkUploadController;
use App\Http\Controllers\api\superadmin\UserManagementController; use App\Http\Controllers\api\superadmin\UserManagementController;
use App\Http\Controllers\api\superadmin\VideoUploadController; use App\Http\Controllers\api\superadmin\VideoUploadController;
use App\Http\Middleware\Cors; use App\Http\Middleware\Cors;
use App\Http\Middleware\MobileMiddleware;
use App\Http\Middleware\UserAuthMiddleware; use App\Http\Middleware\UserAuthMiddleware;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
@ -29,29 +30,10 @@ Route::controller(AuthController::class )->group(function() {
}); });
}); });
Route::middleware(USER_MIDDLEWARES)->prefix('superadmin')->group(function() { Route::middleware(USER_MIDDLEWARES)->group(function() {
Route::controller(VideoUploadController::class)->group(function() { Route::prefix('/superadmin')->group(base_path('routes/api/superadmin.php'));
Route::post('/video-upload', 'init'); });
Route::post('/video-upload/save', 'save');
Route::post('/video-upload/update', 'update');
Route::post('/video-upload/delete', 'delete');
Route::post('/video-upload/change-selected-video', 'changeSelectedVideo');
});
Route::controller(ApkUploadController::class)->group(function() {
Route::post('/apk-upload', 'init');
Route::post('/apk-upload/save', 'save');
Route::post('/apk-upload/update', 'update');
Route::post('/apk-upload/delete', 'delete');
});
Route::controller(UserManagementController::class)->group(function() { Route::middleware(MobileMiddleware::class)->group(function() {
Route::post('/user-management', 'init'); Route::prefix('/mobile')->group(base_path('routes/api/mobile.php'));
Route::post('/user-management/save', 'save');
Route::post('/user-management/update', 'update');
Route::post('/user-management/change-password', 'changePassword');
Route::post('/user-management/change-status', 'changeStatus');
Route::post('/user-management/delete', 'delete');
});
}); });
// tmux session, tmux attach session -t

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

@ -0,0 +1,32 @@
<?php
use App\Http\Controllers\api\superadmin\ApkUploadController;
use App\Http\Controllers\api\superadmin\UserManagementController;
use App\Http\Controllers\api\superadmin\VideoUploadController;
use Illuminate\Support\Facades\Route;
Route::controller(VideoUploadController::class)->group(function() {
Route::post('/video-upload', 'init');
Route::post('/video-upload/save', 'save');
Route::post('/video-upload/update', 'update');
Route::post('/video-upload/delete', 'delete');
Route::post('/video-upload/change-selected-video', 'changeSelectedVideo');
});
Route::controller(ApkUploadController::class)->group(function() {
Route::post('/apk-upload', 'init');
Route::post('/apk-upload/save', 'save');
Route::post('/apk-upload/update', 'update');
Route::post('/apk-upload/delete', 'delete');
});
Route::controller(UserManagementController::class)->group(function() {
Route::post('/user-management', 'init');
Route::post('/user-management/save', 'save');
Route::post('/user-management/update', 'update');
Route::post('/user-management/change-password', 'changePassword');
Route::post('/user-management/change-status', 'changeStatus');
Route::post('/user-management/delete', 'delete');
});
?>
Loading…
Cancel
Save