v7.0.0-beta.2 release
This commit is contained in:
1 parent
6595fd0eb5
commit
fa8eba7a0d
1165 files changed
+107118
-762127
No files matched your search
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\Base;
|
||||
|
||||
use App\Contracts\Extension\CacheInterface;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||
@@ -22,6 +23,10 @@ abstract class PublicBaseController extends BaseApiController
|
||||
/**
|
||||
* 캐시된 응답을 반환하거나 새로 생성합니다.
|
||||
*
|
||||
* 주의: 콜백 반환값이 배열이고 `error` 키가 있으면 캐시하지 않는다.
|
||||
* 이는 확장 설치 직후·활성화 전 등의 일시적 상태에서 얻은 "not found" 같은
|
||||
* 에러 응답이 영구 캐시되어 복구 후에도 잘못된 응답을 반환하는 문제를 방지한다.
|
||||
*
|
||||
* @param string $key 캐시 키
|
||||
* @param callable $callback 데이터 생성 콜백
|
||||
* @param int $ttl 캐시 유지 시간 (초)
|
||||
@@ -29,7 +34,21 @@ abstract class PublicBaseController extends BaseApiController
|
||||
*/
|
||||
protected function cached(string $key, callable $callback, int $ttl = 3600)
|
||||
{
|
||||
return cache()->remember($key, $ttl, $callback);
|
||||
$cache = app(CacheInterface::class);
|
||||
|
||||
$cached = $cache->get($key);
|
||||
if ($cached !== null) {
|
||||
return $cached;
|
||||
}
|
||||
|
||||
$result = $callback();
|
||||
|
||||
// 에러 응답은 캐시하지 않음 (일시적 상태 회복 가능성 보장)
|
||||
if (! (is_array($result) && isset($result['error']))) {
|
||||
$cache->put($key, $result, $ttl);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user