First Commit (API Project)
This commit is contained in:
131
app/Helpers/ApiResponse.php
Normal file
131
app/Helpers/ApiResponse.php
Normal file
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
namespace App\Helpers;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class ApiResponse
|
||||
{
|
||||
|
||||
function normalizeFiles(array $laravelFiles): array {
|
||||
$files = ['name' => [], 'type' => [], 'tmp_name' => [], 'size' => [], 'fileType' => []];
|
||||
foreach ($laravelFiles as $file) {
|
||||
$files['name'][] = $file->getClientOriginalName();
|
||||
$files['type'][] = $file->getClientMimeType();
|
||||
$files['tmp_name'][] = $file->getPathname();
|
||||
$files['size'][] = $file->getSize();
|
||||
$files['fileType'][] = '';
|
||||
}
|
||||
return $files;
|
||||
}
|
||||
|
||||
# DebugQuery Helper
|
||||
public static function debugQueryLog(): array
|
||||
{
|
||||
$logs = DB::getQueryLog();
|
||||
|
||||
return collect($logs)->map(function ($log) {
|
||||
$query = $log['query'];
|
||||
foreach ($log['bindings'] as $binding) {
|
||||
$binding = is_numeric($binding) ? $binding : "'" . addslashes($binding) . "'";
|
||||
$query = preg_replace('/\\?/', $binding, $query, 1);
|
||||
}
|
||||
|
||||
// \n 제거
|
||||
$query = str_replace(["\n", "\r"], ' ', $query);
|
||||
return trim($query);
|
||||
})->toArray();
|
||||
}
|
||||
|
||||
# ApiResponse Helper
|
||||
public static function success(
|
||||
$data = null,
|
||||
string $message = '요청 성공',
|
||||
array $debug = []
|
||||
): JsonResponse {
|
||||
$response = [
|
||||
'success' => true,
|
||||
'message' => $message,
|
||||
'data' => $data,
|
||||
];
|
||||
if(!empty($debug)) $response['query'] = $debug;
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
public static function error(
|
||||
string $message = '요청 실패',
|
||||
int $code = 400,
|
||||
array $error = []
|
||||
): JsonResponse {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => $message,
|
||||
'error' => [
|
||||
'code' => $code,
|
||||
'details' => $error['details'] ?? null,
|
||||
],
|
||||
], $code);
|
||||
}
|
||||
|
||||
public static function validate(
|
||||
bool $condition,
|
||||
string $message = 'Validation failed',
|
||||
int $code = 422,
|
||||
array $extra = []
|
||||
): ?JsonResponse {
|
||||
return $condition ? null : self::error($message, $code, $extra);
|
||||
}
|
||||
|
||||
public static function response($type = '', $query = '', $debug = false, $key = ''): array
|
||||
{
|
||||
if ($debug && $type != 'success') DB::enableQueryLog(); // 쿼리 추적
|
||||
|
||||
$result = match ($type) {
|
||||
'get' => $key ? $query->get()->keyBy($key) : $query->get(),
|
||||
'getSub' => $query->get(),
|
||||
'count' => $query->count(),
|
||||
'first' => $query->first(),
|
||||
'success' => 'Success',
|
||||
'result' => $query,
|
||||
default => null,
|
||||
};
|
||||
|
||||
if($type=='getSub'){
|
||||
$array = $result->map(function ($item) {
|
||||
return (array) $item;
|
||||
})->toArray();
|
||||
foreach ($array as $row) {
|
||||
$data[$row[$key]][] = $row;
|
||||
}
|
||||
$result = $data ?? [];
|
||||
}
|
||||
|
||||
$response['data'] = $result;
|
||||
$response['query'] = ($debug) ? self::debugQueryLog() : [];
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
public static function handle(
|
||||
callable $callback,
|
||||
string $successMessage = '요청 성공',
|
||||
string $errorMessage = '요청 실패'
|
||||
): JsonResponse {
|
||||
try {
|
||||
$result = $callback();
|
||||
|
||||
if ($result instanceof JsonResponse) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
return self::success(
|
||||
$result['data'] ?? null, $successMessage, $result['query'] ?? []
|
||||
);
|
||||
} catch (\Throwable $e) {
|
||||
return self::error($errorMessage, 500, [
|
||||
'details' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user