This commit is contained in:
User
2024-12-28 22:41:16 -05:00
parent 55414d56a4
commit 2b52f7f15a
8 changed files with 163 additions and 40 deletions

View File

@@ -77,15 +77,9 @@ class ComicController extends Controller
]);
}
public function index(Request $request): Response
{
$params = [];
if ($request->has('tag')) {
$params['theme'] = $request->get('tag');
}
$comics = $this->copyManga->comics(30, $request->header('offset', 0), $request->get('top', 'all'), $params);
// Internal function for Upsert comics to db
protected function comicsUpsert($comics): void
{
// Prep the array for upsert
$comicsUpsertArray = [];
$authorsUpsertArray = [];
@@ -98,7 +92,7 @@ class ComicController extends Controller
'alias' => '{}',
'description' => '',
'cover' => $comic['cover'],
'upstream_updated_at' => $comic['datetime_updated'],
'upstream_updated_at' => $comic['datetime_updated'] ?? null,
];
foreach ($comic['author'] as $author) {
@@ -122,6 +116,17 @@ class ComicController extends Controller
$comicObj->authors()->sync($authorObj);
}
}
}
public function index(Request $request): Response
{
$params = [];
if ($request->has('tag')) {
$params['theme'] = $request->get('tag');
}
$comics = $this->copyManga->comics(30, $request->header('offset', 0), $request->get('top', 'all'), $params);
$this->comicsUpsert($comics);
return Inertia::render('Comic/Index', [
'comics' => $comics,
@@ -129,18 +134,57 @@ class ComicController extends Controller
]);
}
public function author(Request $request, string $author): Response
{
$params = [];
$params['author'] = $author;
$comics = $this->copyManga->comics(30, $request->header('offset', 0), $request->get('top', 'all'), $params);
$this->comicsUpsert($comics);
return Inertia::render('Comic/Index', [
'comics' => $comics,
'offset' => $request->header('offset', 0)
]);
}
public function search(Request $request, string $search): Response
{
$comics = $this->copyManga->search($search, 30, $request->header('offset', 0));
// Seacrh API is limited, no upsert
return Inertia::render('Comic/Index', [
'comics' => $comics,
'offset' => $request->header('offset', 0)
]);
}
public function chapters(Request $request, string $pathword = ''): Response
{
$comic = $this->copyManga->comic($pathword);
$chapters = $this->copyManga->chapters($pathword, 200, 0, [], $request->get('group', 'default'));
// Get the comic object and fill other parameters
$comicObject = Comic::where('pathword', $pathword)->first();
$comicObject->uuid = $comic['comic']['uuid'];
$comicObject->alias = explode(',', $comic['comic']['alias']);
$comicObject->description = $comic['comic']['brief'];
$comicObject->metadata = $comic;
$comicObject->save();
try {
$comicObject = Comic::where('pathword', $pathword)->firstOrFail();
$comicObject->uuid = $comic['comic']['uuid'];
$comicObject->alias = explode(',', $comic['comic']['alias']);
$comicObject->description = $comic['comic']['brief'];
$comicObject->metadata = $comic;
$comicObject->save();
} catch (ModelNotFoundException $e) {
$comicObject = Comic::create([
'name' => $comic['comic']['name'],
'pathword' => $comic['comic']['path_word'],
'cover' => $comic['comic']['cover'],
'upstream_updated_at' => $comic['comic']['datetime_updated'],
'uuid' => $comic['comic']['uuid'],
'alias' => explode(',', $comic['comic']['alias']),
'description' => $comic['comic']['brief'],
'metadata' => $comic
]);
}
// Get the authors and update the pathword
foreach ($comic['comic']['author'] as $author) {

View File

@@ -8,6 +8,18 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
class Comic extends Model
{
protected $fillable = [
'pathword',
'uuid',
'name',
'alias',
'description',
'cover',
'upstream_updated_at',
'metadata',
];
protected function casts(): array
{
return [

View File

@@ -209,9 +209,33 @@ class CopyManga
$parameters['limit'] = $limit;
$parameters['offset'] = $offset;
$parameters['top'] = $top;
//OPTIONS
// https://api.mangacopy.com/api/v3/comics?format=json&platform=1&q=x&limit=30&offset=0&top=all"
// https://api.mangacopy.com/api/v3/search/comic?platform=1&q=x&limit=20&offset=0&q_type=&_update=true
return $this->execute($this->buildUrl("comics", $parameters));
}
/**
* Search comic by name
*
* @param string $item
* @param int $limit
* @param int $offset
* @return mixed|string
* @throws GuzzleException
*/
public function search(string $item = '', int $limit = 28, int $offset = 0)
{
$parameters['q'] = $item;
$parameters['q_type'] = "";
$parameters['_update'] = true;
$parameters['limit'] = $limit;
$parameters['offset'] = $offset;
return $this->execute($this->buildUrl("search/comic", $parameters));
}
/**
* Get comic info
*