trying to implement database backend
This commit is contained in:
parent
4a6a3ac8ae
commit
b5cd90df6f
80
lib/Controller/StationApiController.php
Normal file
80
lib/Controller/StationApiController.php
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<?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 $title, string $content): DataResponse {
|
||||||
|
return new DataResponse($this->service->create($title, $content,
|
||||||
|
$this->userId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @CORS
|
||||||
|
* @NoCSRFRequired
|
||||||
|
* @NoAdminRequired
|
||||||
|
*/
|
||||||
|
public function update(int $id, string $title,
|
||||||
|
string $content): DataResponse {
|
||||||
|
return $this->handleNotFound(function () use ($id, $title, $content) {
|
||||||
|
return $this->service->update($id, $title, $content, $this->userId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @CORS
|
||||||
|
* @NoCSRFRequired
|
||||||
|
* @NoAdminRequired
|
||||||
|
*/
|
||||||
|
public function destroy(int $id): DataResponse {
|
||||||
|
return $this->handleNotFound(function () use ($id) {
|
||||||
|
return $this->service->delete($id, $this->userId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
70
lib/Controller/StationController.php
Normal file
70
lib/Controller/StationController.php
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\Radio\Controller;
|
||||||
|
|
||||||
|
use OCA\Radio\AppInfo\Application;
|
||||||
|
use OCA\Radio\Service\RadioService;
|
||||||
|
use OCP\AppFramework\Controller;
|
||||||
|
use OCP\AppFramework\Http\DataResponse;
|
||||||
|
use OCP\IRequest;
|
||||||
|
|
||||||
|
class RadioController extends Controller {
|
||||||
|
/** @var RadioService */
|
||||||
|
private $service;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $userId;
|
||||||
|
|
||||||
|
use Errors;
|
||||||
|
|
||||||
|
public function __construct(IRequest $request,
|
||||||
|
RadioService $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 $title, string $content): DataResponse {
|
||||||
|
return new DataResponse($this->service->create($title, $content,
|
||||||
|
$this->userId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
*/
|
||||||
|
public function update(int $id, string $title,
|
||||||
|
string $content): DataResponse {
|
||||||
|
return $this->handleNotFound(function () use ($id, $title, $content) {
|
||||||
|
return $this->service->update($id, $title, $content, $this->userId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
*/
|
||||||
|
public function destroy(int $id): DataResponse {
|
||||||
|
return $this->handleNotFound(function () use ($id) {
|
||||||
|
return $this->service->delete($id, $this->userId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
21
lib/Db/Station.php
Normal file
21
lib/Db/Station.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\Radio\Db;
|
||||||
|
|
||||||
|
use JsonSerializable;
|
||||||
|
|
||||||
|
use OCP\AppFramework\Db\Entity;
|
||||||
|
|
||||||
|
class Station extends Entity implements JsonSerializable {
|
||||||
|
protected $title;
|
||||||
|
protected $content;
|
||||||
|
protected $userId;
|
||||||
|
|
||||||
|
public function jsonSerialize(): array {
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'title' => $this->title,
|
||||||
|
'content' => $this->content
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
45
lib/Db/StationMapper.php
Normal file
45
lib/Db/StationMapper.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\Radio\Db;
|
||||||
|
|
||||||
|
use OCP\AppFramework\Db\DoesNotExistException;
|
||||||
|
use OCP\AppFramework\Db\Entity;
|
||||||
|
use OCP\AppFramework\Db\QBMapper;
|
||||||
|
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||||
|
use OCP\IDBConnection;
|
||||||
|
|
||||||
|
class StationMapper extends QBMapper {
|
||||||
|
public function __construct(IDBConnection $db) {
|
||||||
|
parent::__construct($db, 'radio', Station::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $id
|
||||||
|
* @param string $userId
|
||||||
|
* @return Entity|Station
|
||||||
|
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
|
||||||
|
* @throws DoesNotExistException
|
||||||
|
*/
|
||||||
|
public function find(int $id, string $userId): Station {
|
||||||
|
/* @var $qb IQueryBuilder */
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$qb->select('*')
|
||||||
|
->from('radio')
|
||||||
|
->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)))
|
||||||
|
->andWhere($qb->expr()->eq('user_id', $qb->createNamedParameter($userId)));
|
||||||
|
return $this->findEntity($qb);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $userId
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function findAll(string $userId): array {
|
||||||
|
/* @var $qb IQueryBuilder */
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$qb->select('*')
|
||||||
|
->from('radio')
|
||||||
|
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId)));
|
||||||
|
return $this->findEntities($qb);
|
||||||
|
}
|
||||||
|
}
|
6
lib/Service/StationNotFound.php
Normal file
6
lib/Service/StationNotFound.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\Radio\Service;
|
||||||
|
|
||||||
|
class StationNotFound extends \Exception {
|
||||||
|
}
|
48
lib/Service/StationService.php
Normal file
48
lib/Service/StationService.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace OCA\Radio\Migration;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use OCP\DB\ISchemaWrapper;
|
||||||
|
use OCP\Migration\SimpleMigrationStep;
|
||||||
|
use OCP\Migration\IOutput;
|
||||||
|
|
||||||
|
class Version000000Date20181013124731 extends SimpleMigrationStep {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param IOutput $output
|
||||||
|
* @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
|
||||||
|
* @param array $options
|
||||||
|
* @return null|ISchemaWrapper
|
||||||
|
*/
|
||||||
|
public function changeSchema(IOutput $output, Closure $schemaClosure, array $options) {
|
||||||
|
/** @var ISchemaWrapper $schema */
|
||||||
|
$schema = $schemaClosure();
|
||||||
|
|
||||||
|
if (!$schema->hasTable('radio')) {
|
||||||
|
$table = $schema->createTable('radio');
|
||||||
|
$table->addColumn('id', 'integer', [
|
||||||
|
'autoincrement' => true,
|
||||||
|
'notnull' => true,
|
||||||
|
]);
|
||||||
|
$table->addColumn('title', 'string', [
|
||||||
|
'notnull' => true,
|
||||||
|
'length' => 200
|
||||||
|
]);
|
||||||
|
$table->addColumn('user_id', 'string', [
|
||||||
|
'notnull' => true,
|
||||||
|
'length' => 200,
|
||||||
|
]);
|
||||||
|
$table->addColumn('content', 'text', [
|
||||||
|
'notnull' => true,
|
||||||
|
'default' => ''
|
||||||
|
]);
|
||||||
|
|
||||||
|
$table->setPrimaryKey(['id']);
|
||||||
|
$table->addIndex(['user_id'], 'radio_user_id_index');
|
||||||
|
}
|
||||||
|
return $schema;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user