implementing favorite stations db backend

This commit is contained in:
Jonas Heinrich 2020-11-07 10:41:25 +01:00
parent ebf8da0198
commit caaa3e9ad6
6 changed files with 13 additions and 159 deletions

View File

@ -23,8 +23,10 @@
return [ return [
'resources' => [ 'resources' => [
'station' => ['url' => '/stations'], 'favorite' => ['url' => '/api/favorites'],
'station_api' => ['url' => '/api/0.1/stations'] 'favorite_api' => ['url' => '/api/0.1/favorites'],
'recent' => ['url' => '/api/recents'],
'recent_api' => ['url' => '/api/0.1/recents']
], ],
'routes' => [ 'routes' => [

View File

@ -1,80 +0,0 @@
<?php
namespace OCA\Radio\Controller;
use OCA\Radio\AppInfo\Application;
use OCA\Radio\Service\StationService;
use OCP\AppFramework\ApiController;
use OCP\AppFramework\Http\DataResponse;
use OCP\IRequest;
class StationApiController extends ApiController {
/** @var StationService */
private $service;
/** @var string */
private $userId;
use Errors;
public function __construct(IRequest $request,
StationService $service,
$userId) {
parent::__construct(Application::APP_ID, $request);
$this->service = $service;
$this->userId = $userId;
}
/**
* @CORS
* @NoCSRFRequired
* @NoAdminRequired
*/
public function index(): DataResponse {
return new DataResponse($this->service->findAll($this->userId));
}
/**
* @CORS
* @NoCSRFRequired
* @NoAdminRequired
*/
public function show(int $id): DataResponse {
return $this->handleNotFound(function () use ($id) {
return $this->service->find($id, $this->userId);
});
}
/**
* @CORS
* @NoCSRFRequired
* @NoAdminRequired
*/
public function create(string $stationuuid, string $name, string $favicon, string $urlresolved): DataResponse {
return new DataResponse($this->service->create($stationuuid, $name,
$favicon, $urlresolved, $this->userId));
}
/**
* @CORS
* @NoCSRFRequired
* @NoAdminRequired
*/
public function update(int $id, string $title,
string $content): DataResponse {
return $this->handleNotFound(function () use ($id, $stationuuid, $name, $favicon, $urlresolved) {
return $this->service->update($id, $stationuuid, $name, $favicon, $urlresolved, $this->userId);
});
}
/**
* @CORS
* @NoCSRFRequired
* @NoAdminRequired
*/
public function destroy(int $id): DataResponse {
return $this->handleNotFound(function () use ($id) {
return $this->service->delete($id, $this->userId);
});
}
}

View File

@ -1,68 +0,0 @@
<?php
namespace OCA\Radio\Controller;
use OCA\Radio\AppInfo\Application;
use OCA\Radio\Service\StationService;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\DataResponse;
use OCP\IRequest;
class StationController extends Controller {
/** @var StationService */
private $service;
/** @var string */
private $userId;
public function __construct(IRequest $request,
StationService $service,
$userId) {
parent::__construct(Application::APP_ID, $request);
$this->service = $service;
$this->userId = $userId;
}
/**
* @NoAdminRequired
*/
public function index(): DataResponse {
return new DataResponse($this->service->findAll($this->userId));
}
/**
* @NoAdminRequired
*/
public function show(int $id): DataResponse {
return $this->handleNotFound(function () use ($id) {
return $this->service->find($id, $this->userId);
});
}
/**
* @NoAdminRequired
*/
public function create(string $stationuuid, string $name, string $favicon, string $urlresolved = "lol"): DataResponse {
return new DataResponse($this->service->create($stationuuid, $name,
$favicon, $urlresolved, $this->userId));
}
/**
* @NoAdminRequired
*/
public function update(int $id, string $stationuuid,
string $name, string $favicon, string $urlresolved): DataResponse {
return $this->handleNotFound(function () use ($id, $stationuuid, $name, $favicon, $urlresolved) {
return $this->service->update($id, $stationuuid, $name, $favicon, $urlresolved, $this->userId);
});
}
/**
* @NoAdminRequired
*/
public function destroy(int $id): DataResponse {
return $this->handleNotFound(function () use ($id) {
return $this->service->delete($id, $this->userId);
});
}
}

View File

@ -10,7 +10,7 @@ use OCP\IDBConnection;
class StationMapper extends QBMapper { class StationMapper extends QBMapper {
public function __construct(IDBConnection $db) { public function __construct(IDBConnection $db) {
parent::__construct($db, 'radio', Station::class); parent::__construct($db, 'favorites', Station::class);
} }
/** /**
@ -24,7 +24,7 @@ class StationMapper extends QBMapper {
/* @var $qb IQueryBuilder */ /* @var $qb IQueryBuilder */
$qb = $this->db->getQueryBuilder(); $qb = $this->db->getQueryBuilder();
$qb->select('*') $qb->select('*')
->from('radio') ->from('favorites')
->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT))) ->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($userId))); ->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($userId)));
return $this->findEntity($qb); return $this->findEntity($qb);
@ -38,7 +38,7 @@ class StationMapper extends QBMapper {
/* @var $qb IQueryBuilder */ /* @var $qb IQueryBuilder */
$qb = $this->db->getQueryBuilder(); $qb = $this->db->getQueryBuilder();
$qb->select('*') $qb->select('*')
->from('radio') ->from('favorites')
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId))); ->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId)));
return $this->findEntities($qb); return $this->findEntities($qb);
} }

View File

@ -21,8 +21,8 @@ class Version000000Date20181013124731 extends SimpleMigrationStep {
/** @var ISchemaWrapper $schema */ /** @var ISchemaWrapper $schema */
$schema = $schemaClosure(); $schema = $schemaClosure();
if (!$schema->hasTable('radio')) { if (!$schema->hasTable('favorites')) {
$table = $schema->createTable('radio'); $table = $schema->createTable('favorites');
$table->addColumn('id', 'integer', [ $table->addColumn('id', 'integer', [
'autoincrement' => true, 'autoincrement' => true,
'notnull' => true, 'notnull' => true,
@ -40,7 +40,7 @@ class Version000000Date20181013124731 extends SimpleMigrationStep {
$table->addColumn('urlresolved', 'text'); $table->addColumn('urlresolved', 'text');
$table->setPrimaryKey(['id']); $table->setPrimaryKey(['id']);
$table->addIndex(['user_id'], 'radio_user_id_index'); $table->addIndex(['user_id'], 'favorites_user_id_index');
} }
return $schema; return $schema;
} }

View File

@ -97,7 +97,7 @@ export default {
*/ */
async doFavor(station) { async doFavor(station) {
try { try {
await axios.post(generateUrl('/apps/radio/stations'), station) await axios.post(generateUrl('/apps/radio/api/favorites'), station)
} catch (e) { } catch (e) {
showError(t('radio', 'Could not favor station')) showError(t('radio', 'Could not favor station'))
} }
@ -172,7 +172,7 @@ export default {
const searchQuery = vm.$route.params.query const searchQuery = vm.$route.params.query
queryURI = queryBase + '/byname/' + searchQuery queryURI = queryBase + '/byname/' + searchQuery
} else if (menuState === 'FAVORITES') { } else if (menuState === 'FAVORITES') {
queryURI = generateUrl('/apps/radio/stations') queryURI = generateUrl('/apps/radio/api/favorites')
} }
await axios.get(queryURI, { await axios.get(queryURI, {
@ -211,7 +211,7 @@ export default {
this.$store.dispatch('getVolumeState') this.$store.dispatch('getVolumeState')
}, },
async loadFavorites() { async loadFavorites() {
await axios.get(generateUrl('/apps/radio/stations')) await axios.get(generateUrl('/apps/radio/api/favorites'))
.then(function(response) { .then(function(response) {
this.favorites = response.data this.favorites = response.data
}) })