feat: api for mobile > tv > new tv request

v2.0.0
ricky rx 2 years ago
parent fb281607d1
commit 4b56d762f6

@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\api\mobile;
use App\Helper\JSONResponse;
use App\Http\Controllers\Controller;
use App\Models\NewTvRequest;
use App\Models\Tv;
use Illuminate\Http\Request;
class TvController extends Controller {
public function newRequest(Request $request) {
return NewTvRequest::checkOrCreateFromRequest($request);
}
public function updateCondition(Request $request) {
$request->validate(['id' => 'nullable|integer']);
$tv = null;
if($request->id) { $tv = Tv::find($request->id); }
return JSONResponse::Success(['tv' => $tv]);
}
}

@ -61,13 +61,30 @@ class NewTvRequest extends Model {
} }
return $randomDigit; return $randomDigit;
} }
/**
* Rule:
* 1. if it has not been activated for more than the expiry date, deleted it
* 2. if it has been activated & has been responded more than expiry date, delete it
* - case: when has been activated, but intenet connection missing, how can device know
* that the new request tv has been activated?
*/
private static function _getMaxExpiredTime() :Carbon { return Carbon::now()->subHour(); }
public static function deleteExpiredRequests() {
$expiredTime = self::_getMaxExpiredTime()->toDateTimeString();
NewTvRequest::where(function($q) use ($expiredTime) {
$q->whereNull('activated_at')->where('created_at', '<=', $expiredTime);
})->orWhere(function($q) use ($expiredTime) {
$q->where('responded_at', '<=', $expiredTime );
})->delete();
}
// -- END RELATED TO DATA FUNCTION // -- END RELATED TO DATA FUNCTION
//------------------------------------------------------------ //------------------------------------------------------------
//------------------------------------------------------------ //------------------------------------------------------------
// -- RELATED TO FROM REQUEST FUNCTION // -- RELATED TO FROM REQUEST FUNCTION
private static function _checkOrCreateResponse(NewTvRequest $newTvReq) { private static function _checkOrCreateResponse(NewTvRequest $newTvReq) {
if($newTvReq->is_activated) { if($newTvReq->activated_at) {
// make sure waiting tv_device responded before deleted // make sure waiting tv_device responded before deleted
if(empty($newTvReq->responded_at)) { if(empty($newTvReq->responded_at)) {
$newTvReq->responded_at = now(); $newTvReq->responded_at = now();
@ -76,7 +93,6 @@ class NewTvRequest extends Model {
return JSONResponse::Success([ return JSONResponse::Success([
'message' => 'activated', 'message' => 'activated',
'is_active' => true,
'new_tv_request' => $newTvReq, 'new_tv_request' => $newTvReq,
'tv' => $newTvReq->tv 'tv' => $newTvReq->tv
]); ]);
@ -84,11 +100,28 @@ class NewTvRequest extends Model {
return JSONResponse::Success([ return JSONResponse::Success([
'message' => 'not activate', 'message' => 'not activate',
'is_active' => false,
'new_tv_request' => $newTvReq, 'new_tv_request' => $newTvReq,
'tv' => null 'tv' => null
]); ]);
} }
public static function checkOrCreateFromRequest(Request $request) {
$request->validate([
'id' => 'nullable|string|required_with:code|integer',
'code' => 'nullable|string|required_with:id',
'device_info' => 'required|array'
]);
if(!empty($request->id)) {
$checkTvReq = NewTvRequest::where('code', $request->code)->find($request->id);
if($checkTvReq) return self::_checkOrCreateResponse($checkTvReq);
}
$newTvReq = new self;
$newTvReq->code = self::_generateRandomCode();
$newTvReq->device_info = $request->device_info;
$newTvReq->save();
return self::_checkOrCreateResponse($newTvReq);
}
public static function approveFromRequest(Request $request) { public static function approveFromRequest(Request $request) {
$request->validate([ $request->validate([
@ -97,7 +130,7 @@ class NewTvRequest extends Model {
]); ]);
$tvRequest = new Request($request->tv); $tvRequest = new Request($request->tv);
if($tvRequest->filled('code')) $tvRequest->code = strtoupper($tvRequest->code); if($tvRequest->code) $tvRequest->merge(['code' => strtoupper($tvRequest->code)]);
$tvRequest->validate([ $tvRequest->validate([
'code' => 'required|string|unique:App\Models\Tv,code', 'code' => 'required|string|unique:App\Models\Tv,code',
@ -161,23 +194,6 @@ class NewTvRequest extends Model {
return JSONResponse::Success(['data' => $newTvRequest ]); return JSONResponse::Success(['data' => $newTvRequest ]);
} }
/**
* Rule:
* 1. if it has not been activated for more than the expiry date, deleted it
* 2. if it has been activated & has been responded more than expiry date, delete it
* - case: when has been activated, but intenet connection missing, how can device know
* that the new request tv has been activated?
*/
private static function _getMaxExpiredTime() :Carbon { return Carbon::now()->subHour(); }
public static function deleteExpiredRequests() {
$expiredTime = self::_getMaxExpiredTime()->toString();
NewTvRequest::where(function($q) use ($expiredTime) {
$q->whereNull('activated_at')->where('created_at', '<=', $expiredTime);
})->orWhere(function($q) use ($expiredTime) {
$q->where('responded_at', '<=', $expiredTime );
})->delete();
}
// -- END RELATED TO FROM REQUEST FUNCTION // -- END RELATED TO FROM REQUEST FUNCTION
//------------------------------------------------------------ //------------------------------------------------------------
} }

@ -3,13 +3,13 @@
namespace App\Models; namespace App\Models;
use App\Helper\JSONResponse; use App\Helper\JSONResponse;
use AWS\CRT\HTTP\Request;
use Illuminate\Database\Eloquent\Casts\AsArrayObject; use Illuminate\Database\Eloquent\Casts\AsArrayObject;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Http\Request;
class Tv extends Model { class Tv extends Model {
use HasFactory; use HasFactory;
@ -42,13 +42,4 @@ class Tv extends Model {
} }
// -- END RELATED TO DATA FUNCTION // -- END RELATED TO DATA FUNCTION
//------------------------------------------------------------ //------------------------------------------------------------
//------------------------------------------------------------
// -- RELATED TO REQUEST
public static function renewTvInformation(Request $request) {
}
// -- END RELATED TO REQUEST
//------------------------------------------------------------
} }

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