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 9f048b739e
commit 39118d63e5
11 changed files with 84 additions and 31 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -154,9 +154,9 @@ class Anime extends BaseController {
$this->redirect("anime/add", 303); $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->set_flash_message('Added new anime to list', 'success');
// $this->cache->purge(); // $this->cache->purge();

View File

@ -137,12 +137,12 @@ class Manga extends Controller {
$this->redirect("manga/add", 303); $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->set_flash_message('Added new manga to list', 'success');
$this->cache->purge(); // $this->cache->purge();
} }
else else
{ {
@ -243,12 +243,14 @@ class Manga extends Controller {
*/ */
public function delete() 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->set_flash_message("Successfully deleted manga.", 'success');
$this->cache->purge(); //$this->cache->purge();
} }
else else
{ {

View File

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

View File

@ -52,6 +52,11 @@ class Manga extends API
'dropped' => self::DROPPED 'dropped' => self::DROPPED
]; ];
/**
* @var Aviat\AnimeClient\API\Kitsu\KitsuModel
*/
protected $kitsuModel;
public function __construct(ContainerInterface $container) public function __construct(ContainerInterface $container)
{ {
parent::__construct($container); parent::__construct($container);
@ -83,6 +88,17 @@ class Manga extends API
return $this->kitsuModel->getManga($manga_id); 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 * Get information about a specific list item
* for editing/updating that item * for editing/updating that item
@ -106,6 +122,17 @@ class Manga extends API
return $this->kitsuModel->updateListItem($data); 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 * Search for anime by name
* *