Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CUR-3854 implement crud apis for media sources feature. #1492

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 148 additions & 0 deletions app/Http/Controllers/Api/V1/MediaSourceController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
<?php

namespace App\Http\Controllers\Api\V1;

use App\Http\Controllers\Controller;
use App\Http\Requests\V1\MediaSource\SearchMediaSourceRequest;
use App\Http\Requests\V1\MediaSource\StoreMediaSourceRequest;
use App\Http\Requests\V1\MediaSource\UpdateMediaSourceRequest;
use App\Http\Resources\V1\MediaSource\MediaSourceCollection;
use App\Http\Resources\V1\MediaSource\MediaSourceResource;
use App\Repositories\MediaSources\MediaSourcesInterface;

/**
* @authenticated
*
* @group 31. Admin/MediaSource
* APIs for MediaSource on admin panel.
*/
class MediaSourceController extends Controller
{
private $mediaSourceRepository;

/**
* MediaSourceController constructor.
* @param mediaSourceRepository $mediaSourceRepository
*/
public function __construct(MediaSourcesInterface $mediaSourceRepository)
{
$this->mediaSourceRepository = $mediaSourceRepository;
}

/**
* Get All Media Source for listing.
*
* @urlParam query string Query to search media sources settings against name or media type Example: Kaltura or Video/Image
* @urlParam size integer Size to show per page records Example: 10
* @urlParam order_by_column string To sort data with specific column Example: name
* @urlParam order_by_type string To sort data in ascending or descending order Example: asc
* @urlParam filter string to search media sources by Image or Video Example: Video/Image
*
* @responseFile responses/admin/mediasources/media-source-settings-list.json
*
* @param SearchMediaSourceRequest $request
* @return MediaSourceCollection
*/
public function index(SearchMediaSourceRequest $request)
{
$collections = $this->mediaSourceRepository->getAll($request->all());
return new MediaSourceCollection($collections);
}

/**
* Get Media Source
*
* Get the specified media source details.
*
* @urlParam id required The Id of a media source Example: 1
*
* @responseFile responses/admin/mediasources/media-source-settings-show.json
*
* @response 500 {
* "errors": [
* "Media Source not found!"
* ]
* }
*
* @param $id int
* @return MediaSourceResource
*/
public function show($id)
{
$setting = $this->mediaSourceRepository->find($id);
return new MediaSourceResource($setting);
}

/**
* Create Media Source
*
* Creates the new media source in database
*
* @bodyParam name string required Media Source name Example: Kaltura
* @bodyParam media_type string required Media Source Type Example: Video/Image
*
* @responseFile 200 responses/admin/mediasources/media-source-settings-create.json
*
* @response 500 {
* "errors": [
* "Unable to create media source, please try again later!"
* ]
* }
*
* @param StoreMediaSourceRequest $request
* @return MediaSourceResource
*/
public function store(StoreMediaSourceRequest $request)
{
$response = $this->mediaSourceRepository->create($request->all());
return response(['message' => $response['message'], 'data' => new MediaSourceResource($response['data'])], 200);
}

/**
* Update Media Source
*
* Update the specific media source record
*
* @bodyParam name string required Media Source name Example: Kaltura
* @bodyParam media_type string required Media Source Type Example: Video/Image
*
* @responseFile 200 responses/admin/mediasources/media-source-settings-update.json
*
* @response 500 {
* "errors": [
* "Unable to update media source, please try again later!"
* ]
* }
*
* @param UpdateMediaSourceRequest $request
* @param $id int
* @return MediaSourceResource
*/
public function update(UpdateMediaSourceRequest $request, $id)
{
$response = $this->mediaSourceRepository->update($id, $request->all());
return response(['message' => $response['message'], 'data' => new MediaSourceResource($response['data'])], 200);
}

/**
* Delete Media Source
*
* Delete the specific media source record
*
* @urlParam id required The Id of a Media Source Example: 1
*
* @param $id int
*
* @responseFile 200 responses/admin/mediasources/media-source-settings-destory.json
*
* @response 500 {
* "errors": [
* "Unable to delete media source, please try again later!"
* ]
* }
*/
public function destroy($id)
{
return response(['message' => $this->mediaSourceRepository->destroy($id)], 200);
}
}
48 changes: 48 additions & 0 deletions app/Http/Requests/V1/MediaSource/SearchMediaSourceRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

namespace App\Http\Requests\V1\MediaSource;

use Illuminate\Foundation\Http\FormRequest;

class SearchMediaSourceRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'query' => 'string|max:255',
'size' => 'integer|max:100',
'order_by_column' => 'string|in:name,media_type',
'order_by_type' => 'string|in:asc,desc',
'filter' => 'string|in:Video,Image'
];
}

/**
* Get custom messages for validator errors.
*
* @return array
*/
public function messages()
{
return [
'order_by_column.in' => 'The selected order by column should be name OR media type only',
'order_by_type.in' => 'The selected order by type should be asc OR desc only',
'order_by_type.in' => 'The selected filter should be Video OR Image only'
];
}
}
48 changes: 48 additions & 0 deletions app/Http/Requests/V1/MediaSource/StoreMediaSourceRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

namespace App\Http\Requests\V1\MediaSource;

use Illuminate\Foundation\Http\FormRequest;

/**
* Description Validation request class for create media sources
* class StoreMediaSource
*/
class StoreMediaSourceRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$mediaType = request('media_type');
return [
'name' => 'required|string|max:255|unique:media_sources,name,NULL,id,deleted_at,NULL,media_type,' . $mediaType,
'media_type' => 'required|in:Video,Image'
];
}

/**
* Get custom messages for validator errors.
*
* @return array
*/
public function messages()
{
return [
'name.unique' => 'The name has already been taken with the mentioned media_type.'
];
}
}
49 changes: 49 additions & 0 deletions app/Http/Requests/V1/MediaSource/UpdateMediaSourceRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php

namespace App\Http\Requests\V1\MediaSource;

use Illuminate\Foundation\Http\FormRequest;

/**
* Description Validation request class for update media sources
* class UpdateMediaSource
*/
class UpdateMediaSourceRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$id = $this->route('media_source_setting');
$mediaType = request('media_type');
return [
'name' => 'required|string|max:255|unique:media_sources,name, ' . $id . ' ,id,deleted_at,NULL,media_type,' . $mediaType,
'media_type' => 'required|in:Video,Image'
];
}

/**
* Get custom messages for validator errors.
*
* @return array
*/
public function messages()
{
return [
'name.unique' => 'The name has already been taken with the mentioned media_type.'
];
}
}
18 changes: 18 additions & 0 deletions app/Http/Resources/V1/MediaSource/MediaSourceCollection.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace App\Http\Resources\V1\MediaSource;

use Illuminate\Http\Resources\Json\ResourceCollection;

class MediaSourceCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return ['data' => $this->collection];
}
}
18 changes: 18 additions & 0 deletions app/Http/Resources/V1/MediaSource/MediaSourceResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace App\Http\Resources\V1\MediaSource;

use Illuminate\Http\Resources\Json\JsonResource;

class MediaSourceResource extends JsonResource
{
/**
* Transform the resource into an array
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
}
9 changes: 9 additions & 0 deletions app/Models/MediaSource.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,13 @@ class MediaSource extends Model
'name',
'media_type'
];

/**
* Detail Define belongs to many relationship with organization_media_sources table,
* @return Relationship
*/
public function mediaSourcesOrg()
{
return $this->belongsToMany('App\Models\Organization', 'organization_media_sources');
}
}
Loading