Skip to content
This repository has been archived by the owner on Nov 5, 2021. It is now read-only.

Commit

Permalink
Merge pull request #11 from epigra/CU-9mr1tm
Browse files Browse the repository at this point in the history
CU-9mr1tm - Add core structure and api endpoint
  • Loading branch information
akingundogdu committed Oct 28, 2020
2 parents dff218c + 96bf702 commit 2f90942
Show file tree
Hide file tree
Showing 21 changed files with 325 additions and 38 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Expand Up @@ -11,8 +11,10 @@ Homestead.yaml
npm-debug.log
yarn-error.log
.idea
/.idea
/src/.idea
.env.dusk.local
.env.testing
/public/mix-manifest.json
.DS_Store
vendor
vendor
7 changes: 3 additions & 4 deletions composer.json
Expand Up @@ -9,7 +9,8 @@
}
],
"require": {
"akaunting/setting": "^1.1"
"akaunting/setting": "^1.1",
"epigra/core": "dev-master"
},
"autoload": {
"psr-4": {
Expand All @@ -18,9 +19,7 @@
},
"extra": {
"laravel": {
"providers": [
"Epigra\\NovaSettings\\Providers\\NovaSettingsServiceProvider"
],
"providers": [],
"aliases": []
}
}
Expand Down
10 changes: 10 additions & 0 deletions src/Config/config.php
@@ -0,0 +1,10 @@
<?php

return [
/*
* Reload the entire page on save. Useful when updating any Nova UI related settings.
*/

'reload_page_on_save' => false,

];
Empty file added src/DTO/.gitkeep
Empty file.
54 changes: 54 additions & 0 deletions src/DTO/NovaSetting/NovaSettingDTO.php
@@ -0,0 +1,54 @@
<?php

namespace Epigra\NovaSettings\DTO\NovaSetting;

use Carbon\Carbon;
use Epigra\Core\DTO\Base\BaseDTO;
use Illuminate\Validation\Rule;

/**
* Class NovaSettingDTO
*/
class NovaSettingDTO extends BaseDTO
{
/**
* SlideDTO constructor.
* @param array $parameters
*/
public function __construct(array $parameters = [])
{
parent::__construct($parameters, self::class);
}

/**
* @var int
*/
public int $id;

/**
* @var string
*/
public string $key;

/**
* @var string
*/
public string $value;

public function mapToDTO($dto, array $originalData): BaseDTO
{
return parent::mapToDTO($dto, $originalData); // TODO: Change the autogenerated stub
}

/**
* @param array $parameters
* @param bool $updateMode
* @return array
*/
public function validate(array $parameters, bool $updateMode)
{
return $this->validator($parameters, [
//'title' => 'required|string|max:255',
]);
}
}
23 changes: 23 additions & 0 deletions src/Http/Controllers/Api/SettingsApiController.php
@@ -0,0 +1,23 @@
<?php

namespace Epigra\NovaSettings\Http\Controllers\Api;

use Epigra\Core\Controller\BaseApiController;
use Epigra\NovaSettings\DTO\NovaSetting\NovaSettingDTO;
use Epigra\NovaSettings\Services\NovaSetting\NovaSettingServiceInterface;
use Illuminate\Http\Request;

class SettingsApiController extends BaseApiController
{
public function __construct(NovaSettingServiceInterface $service)
{
$this->service = $service;
$this->dtoClass = NovaSettingDTO::class;
}

public function findByKey(string $key)
{
$result = $this->service->findByKey($key);
return $this->ok($result);
}
}
15 changes: 15 additions & 0 deletions src/Models/NovaSetting.php
@@ -0,0 +1,15 @@
<?php

namespace Epigra\NovaSettings\Models;

use Illuminate\Database\Eloquent\Model;

class NovaSetting extends Model
{
protected $table = "settings";

protected $fillable = [
'key',
'value'
];
}
2 changes: 1 addition & 1 deletion src/NovaSettingsTool.php
Expand Up @@ -16,7 +16,7 @@ public function boot()

public function renderNavigation()
{
return view('nova-settings::navigation');
return view('novasettings::navigation');
}

/**
Expand Down
32 changes: 7 additions & 25 deletions src/Providers/NovaSettingsServiceProvider.php
Expand Up @@ -2,13 +2,14 @@

namespace Epigra\NovaSettings\Providers;

use Epigra\Core\Providers\BaseServiceProvider;
use Epigra\NovaSettings\Http\Middleware\Authorize;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;
use Laravel\Nova\Nova;

class NovaSettingsServiceProvider extends ServiceProvider
class NovaSettingsServiceProvider extends BaseServiceProvider
{
/**
* Bootstrap any application services.
Expand All @@ -17,33 +18,14 @@ class NovaSettingsServiceProvider extends ServiceProvider
*/
public function boot()
{
$this->loadViewsFrom(__DIR__.'/../Resources/views', 'nova-settings');

$this->registerRoutes();

if ($this->app->runningInConsole()) {
// Publish config
$this->publishes([
__DIR__.'/../Config/' => config_path(),
], 'nova-settings');
}
$this->setModuleName('NovaSettings');
parent::boot();
}

public function register()
{
$this->mergeConfigFrom(
__DIR__.'/../Config/nova-settings.php',
'nova-settings'
);
}

protected function registerRoutes()
{
if ($this->app->routesAreCached()) {
return;
}

Route::middleware(['nova', Authorize::class])
->group(__DIR__.'/../Routes/api.php');
$this->app->register(RouteServiceProvider::class);
$this->app->register(RepositoryServiceProvider::class);
parent::register();
}
}
36 changes: 36 additions & 0 deletions src/Providers/RepositoryServiceProvider.php
@@ -0,0 +1,36 @@
<?php

namespace Epigra\NovaSettings\Providers;

use Epigra\NovaSettings\Repositories\NovaSetting\NovaSettingRepository;
use Epigra\NovaSettings\Repositories\NovaSetting\NovaSettingRepositoryInterface;
use Epigra\NovaSettings\Services\NovaSetting\NovaSettingService;
use Epigra\NovaSettings\Services\NovaSetting\NovaSettingServiceInterface;
use Illuminate\Support\ServiceProvider;

class RepositoryServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//repositories
$this->app->bind(NovaSettingRepositoryInterface::class, NovaSettingRepository::class);

//services
$this->app->bind(NovaSettingServiceInterface::class, NovaSettingService::class);
}

/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
15 changes: 15 additions & 0 deletions src/Providers/RouteServiceProvider.php
@@ -0,0 +1,15 @@
<?php

namespace Epigra\NovaSettings\Providers;

use Epigra\Core\Providers\BaseRouteServiceProvider;

class RouteServiceProvider extends BaseRouteServiceProvider
{
public function boot()
{
$this->setModuleName('NovaSettings');
parent::boot();
}
}

Empty file added src/Repositories/.gitkeep
Empty file.
30 changes: 30 additions & 0 deletions src/Repositories/NovaSetting/NovaSettingRepository.php
@@ -0,0 +1,30 @@
<?php

namespace Epigra\NovaSettings\Repositories\NovaSetting;

use Epigra\NovaSettings\Models\NovaSetting;
use Epigra\Core\Repositories\Base\BaseEloquentRepository;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;

class NovaSettingRepository extends BaseEloquentRepository implements NovaSettingRepositoryInterface
{
/**
* SlideRepository constructor.
*/
public function __construct()
{
parent::__construct(NovaSetting::class);
}

/**
* @inherit
*/
public function findByKey(string $key): ?Model
{
return $this->model::where('key', $key)
->first();
}


}
18 changes: 18 additions & 0 deletions src/Repositories/NovaSetting/NovaSettingRepositoryInterface.php
@@ -0,0 +1,18 @@
<?php

namespace Epigra\NovaSettings\Repositories\NovaSetting;

use Epigra\NovaSettings\Models\NovaSetting;
use Epigra\Core\Repositories\Base\BaseRepositoryInterface;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;

interface NovaSettingRepositoryInterface extends BaseRepositoryInterface
{
/**
* Returns a setting by key.
* @param string $key
* @return ?Model
*/
public function findByKey(string $key): ?Model;
}
11 changes: 4 additions & 7 deletions src/Routes/api.php
Expand Up @@ -13,11 +13,8 @@
|
*/

Route::namespace('\Epigra\NovaSettings\Http\Controllers')->group(function () {
Route::prefix('nova-vendor/nova-settings')->group(function () {
Route::get('/settings', 'SettingsController@get');
Route::post('/settings', 'SettingsController@save');
});

Route::delete('/nova-api/nova-settings/settings/field/{fieldName}', 'SettingsController@deleteImage');
Route::middleware('api')->name('api::')->group(function () {
Route::get('settings/{key}', 'SettingsApiController@findByKey');
});


25 changes: 25 additions & 0 deletions src/Routes/web.php
@@ -0,0 +1,25 @@
<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Tool API Routes
|--------------------------------------------------------------------------
|
| Here is where you may register API routes for your tool. These routes
| are loaded by the ServiceProvider of your tool. They are protected
| by your tool's "Authorize" middleware by default. Now, go build!
|
*/

Route::namespace('\Epigra\NovaSettings\Http\Controllers')->group(function () {
Route::prefix('nova-vendor/nova-settings')->group(function () {
Route::get('/settings', 'SettingsController@get');
Route::post('/settings', 'SettingsController@save');
});

Route::delete('/nova-api/nova-settings/settings/field/{fieldName}', 'SettingsController@deleteImage');
});


Empty file added src/Services/.gitkeep
Empty file.
35 changes: 35 additions & 0 deletions src/Services/NovaSetting/NovaSettingService.php
@@ -0,0 +1,35 @@
<?php

namespace Epigra\NovaSettings\Services\NovaSetting;

use Epigra\NovaSettings\DTO\NovaSetting\NovaSettingDTO;
use Epigra\NovaSettings\Repositories\NovaSetting\NovaSettingRepositoryInterface;
use Epigra\Core\Services\Base\BaseService;
use Illuminate\Database\Eloquent\Model;

class NovaSettingService extends BaseService implements NovaSettingServiceInterface
{
/**
* @var NovaSettingRepositoryInterface
*/
private NovaSettingRepositoryInterface $repository;


/**
* NovaSettingService constructor.
* @param NovaSettingRepositoryInterface $repository
*/
public function __construct(NovaSettingRepositoryInterface $repository)
{
parent::__construct($repository, NovaSettingDTO::class);
$this->repository = $repository;
}

/**
* @inherit
*/
public function findByKey(string $key): ?Model
{
return $this->repository->findByKey($key);
}
}

0 comments on commit 2f90942

Please sign in to comment.