All basic API functionality:

* Anime List Item:
	* Creation
	* Updating
	* Retreiving
	* Deletion

* Manga List Item:
	* Creation
	* Updating
	* Retreiving
	* Deletion

* Anime detail page
* Manga detail page
This commit is contained in:
Timothy Warren 2017-01-10 12:35:46 -05:00
parent 5fc70bb4fe
commit a5dd9f0650
11 changed files with 84 additions and 31 deletions

View File

@ -28,6 +28,7 @@
<tr>
<td>&nbsp;</td>
<td>
<input type="hidden" name="type" value="anime" />
<button type="submit">Save</button>
</td>
</tr>

View File

@ -17,13 +17,13 @@
[<a href="<?= $urlGenerator->default_url('manga') ?>">Manga List</a>]
<?php endif ?>
</span>
<?php if ($auth->is_authenticated()): ?>
<?php /* if ($auth->is_authenticated()): ?>
<span class="flex-no-wrap">&nbsp;</span>
<span class="flex-no-wrap small-font">
<button type="button" class="js-clear-cache user-btn">Clear API Cache</button>
</span>
<span class="flex-no-wrap">&nbsp;</span>
<?php endif ?>
<?php endif */ ?>
<span class="flex-no-wrap small-font">
<?php if ($auth->is_authenticated()): ?>
<a class="bracketed" href="<?= $url->generate('logout') ?>">Logout</a>

View File

@ -28,6 +28,7 @@
<tr>
<td>&nbsp;</td>
<td>
<input type="hidden" name="type" value="manga" />
<button type="submit">Save</button>
</td>
</tr>

View File

@ -21,7 +21,7 @@
});
// Clear the api cache
ac.on('.js-clear-cache', 'click', function (event) {
ac.on('.js-clear-cache', 'click', function () {
ac.get('/cache_purge', () => {
ac.showMessage('success', `Sucessfully purged api cache`);
});

View File

@ -38,7 +38,7 @@
}
// Update the total count
data['data']['progress'] = ++completed;
data.data.progress = ++completed;
_.ajax(_.url('/manga/update'), {
data: data,

View File

@ -16,7 +16,6 @@
namespace Aviat\AnimeClient\API\Kitsu;
use Aviat\AnimeClient\AnimeClient;
use Aviat\AnimeClient\API\Kitsu as K;
use Aviat\AnimeClient\API\Kitsu\Transformer\{
AnimeTransformer, AnimeListTransformer, MangaTransformer, MangaListTransformer
@ -24,7 +23,6 @@ use Aviat\AnimeClient\API\Kitsu\Transformer\{
use Aviat\Ion\Di\ContainerAware;
use Aviat\Ion\Json;
use GuzzleHttp\Exception\ClientException;
use PHP_CodeSniffer\Tokenizers\JS;
/**
* Kitsu API Model
@ -77,6 +75,12 @@ class KitsuModel {
$this->mangaListTransformer = new MangaListTransformer();
}
/**
* Get the userid for a username from Kitsu
*
* @param string $username
* @return string
*/
public function getUserIdByUsername(string $username)
{
$data = $this->getRequest('users', [
@ -154,7 +158,7 @@ class KitsuModel {
'include' => 'media,media.genres',
'page' => [
'offset' => 0,
'limit' => 200
'limit' => 1000
],
'sort' => '-updated_at'
]
@ -251,6 +255,12 @@ class KitsuModel {
}
}
public function createListItem(array $data): bool
{
$data['user_id'] = $this->getUserIdByUsername($this->getUsername());
return $this->listItem->create($data);
}
public function updateListItem(array $data)
{
try

View File

@ -37,24 +37,31 @@ class ListItem extends AbstractListItem {
public function create(array $data): bool
{
$response = $this->getResponse('post', 'library-entries', [
'body' => [
'type' => 'libraryEntries',
'attributes' => [
'status' => $data['status'],
'progress' => $data['progress'] ?? 0
],
'relationships' => [
'user' => [
'id' => $data['user_id'],
'type' => 'users'
/*?><pre><?= print_r($data, TRUE) ?></pre><?php */
$response = $this->getResponse('POST', 'library-entries', [
'body' => Json::encode([
'data' => [
'type' => 'libraryEntries',
'attributes' => [
'status' => $data['status'],
'progress' => $data['progress'] ?? 0
],
'media' => [
'id' => $data['id'],
'type' => $data['type']
'relationships' => [
'user' => [
'data' => [
'id' => $data['user_id'],
'type' => 'users'
]
],
'media' => [
'data' => [
'id' => $data['id'],
'type' => $data['type']
]
]
]
]
]
])
]);
return ($response->getStatusCode() === 201);

View File

@ -154,9 +154,9 @@ class Anime extends BaseController {
$this->redirect("anime/add", 303);
}
$result = $this->model->update($data);
$result = $this->model->createLibraryItem($data);
if (intval($result['statusCode']) === 201)
if ($result)
{
$this->set_flash_message('Added new anime to list', 'success');
// $this->cache->purge();

View File

@ -137,12 +137,12 @@ class Manga extends Controller {
$this->redirect("manga/add", 303);
}
$result = $this->model->add($data);
$result = $this->model->createLibraryItem($data);
if ($result['statusCode'] >= 200 && $result['statusCode'] < 300)
if ($result)
{
$this->set_flash_message('Added new manga to list', 'success');
$this->cache->purge();
// $this->cache->purge();
}
else
{
@ -243,12 +243,14 @@ class Manga extends Controller {
*/
public function delete()
{
$response = $this->model->delete($this->request->getParsedBody());
$body = $this->request->getParsedBody();
$id = $body['id'];
$response = $this->model->deleteLibraryItem($id);
if ((bool)$response['body'] === TRUE)
if ($response)
{
$this->set_flash_message("Successfully deleted manga.", 'success');
$this->cache->purge();
//$this->cache->purge();
}
else
{

View File

@ -105,6 +105,11 @@ class Anime extends API {
return $this->kitsuModel->getListItem($itemId);
}
public function createLibraryItem(array $data): bool
{
return $this->kitsuModel->createListItem($data);
}
/**
* Update a list entry
*

View File

@ -52,6 +52,11 @@ class Manga extends API
'dropped' => self::DROPPED
];
/**
* @var Aviat\AnimeClient\API\Kitsu\KitsuModel
*/
protected $kitsuModel;
public function __construct(ContainerInterface $container)
{
parent::__construct($container);
@ -83,6 +88,17 @@ class Manga extends API
return $this->kitsuModel->getManga($manga_id);
}
/**
* Create a new manga list item
*
* @param array $data
* @return bool
*/
public function createLibraryItem(array $data): bool
{
return $this->kitsuModel->createListItem($data);
}
/**
* Get information about a specific list item
* for editing/updating that item
@ -106,6 +122,17 @@ class Manga extends API
return $this->kitsuModel->updateListItem($data);
}
/**
* Remove a list entry
*
* @param string $itemId
* @return bool
*/
public function deleteLibraryItem(string $itemId): bool
{
return $this->kitsuModel->deleteListItem($itemId);
}
/**
* Search for anime by name
*