Skip to content
This repository was archived by the owner on Apr 4, 2026. It is now read-only.
Merged
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
15 changes: 15 additions & 0 deletions .idea/php.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions .idea/techdiary-api.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

92 changes: 92 additions & 0 deletions app/Http/Controllers/SeriesController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<?php

namespace App\Http\Controllers;

use App\Http\Requests\Series\SeriesStoreRequest;
use App\Http\Resources\Series\SeriesDetailsResource;
use App\Http\Resources\SeriesResource;
use App\Models\Series;

class SeriesController extends Controller
{
public function __construct()
{
$this->middleware('auth:sanctum')->except(['index', 'show']);
}

/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function index()
{
$series = Series::latest();
return SeriesResource::collection($series->paginate(request()->query('limit', 10)));
}

public function mySeries()
{
$series = auth()->user()->series()->latest()->paginate();
return SeriesResource::collection($series);
}


/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(SeriesStoreRequest $request)
{
return auth()->user()->series()->create([
'name' => $request->name
]);
}

/**
* Display the specified resource.
* @param Series $series
* @return SeriesDetailsResource
*/
public function show(Series $series)
{
return new SeriesDetailsResource($series);
}


/**
* Update the specified resource in storage.
* @param SeriesStoreRequest $request
* @param Series $series
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function update(SeriesStoreRequest $request, Series $series)
{
$this->authorize('update', $series);
$series->update($request->all());

return response()->json([
'message' => 'Updated successfully',
'data' => $series
]);
}

/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function destroy(Series $series)
{
$this->authorize('delete', $series);
$series->delete();

return response()->json([
'message' => 'Deleted successfully'
]);
}
}
30 changes: 30 additions & 0 deletions app/Http/Requests/Series/SeriesStoreRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace App\Http\Requests\Series;

use Illuminate\Foundation\Http\FormRequest;

class SeriesStoreRequest 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 [
'name' => ['required', 'max:255']
];
}
}
30 changes: 30 additions & 0 deletions app/Http/Requests/Series/SeriesUpdateRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace App\Http\Requests\Series;

use Illuminate\Foundation\Http\FormRequest;

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

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
27 changes: 27 additions & 0 deletions app/Http/Resources/Series/SeriesDetailsResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace App\Http\Resources\Series;

use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Facades\DB;

class SeriesDetailsResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'name' => $this->name,
'cover' => $this->cover,
'icon' => $this->icon,
'description' => $this->description,
'owner' => $this->user,
'articles' => DB::table('article_series')->orderBy('series_order')->get()->groupBy('name')
];
}
}
19 changes: 19 additions & 0 deletions app/Http/Resources/SeriesResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class SeriesResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
}
30 changes: 30 additions & 0 deletions app/Models/Series.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Series extends Model
{
use HasFactory;

protected $guarded = ['id'];
protected $casts = [
'id' => 'string'
];

protected $primaryKey = 'id';
protected $keyType = 'string';

public function articles()
{
return $this->belongsToMany(Article::class)
->withPivot('name');
}

public function user()
{
return $this->belongsTo(User::class);
}
}
5 changes: 5 additions & 0 deletions app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@ public function setPasswordAttribute($value)
$this->attributes['password'] = bcrypt($value);
}

public function series()
{
return $this->hasMany(Series::class);
}

// public function isOnline()
// {
// return Cache::has('user-is-online-' . $this->id);
Expand Down
36 changes: 36 additions & 0 deletions app/Policies/SeriesPolicy.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

namespace App\Policies;

use App\Models\Series;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class SeriesPolicy
{
use HandlesAuthorization;

/**
* Determine whether the user can update the model.
*
* @param \App\Models\User $user
* @param \App\Models\Article $article
* @return mixed
*/
public function update(User $user, Series $series)
{
return $series->user_id == $user->id;
}

/**
* Determine whether the user can delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Article $article
* @return mixed
*/
public function delete(User $user, Series $series)
{
return $series->user_id == $user->id;
}
}
2 changes: 1 addition & 1 deletion app/Providers/BroadcastServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class BroadcastServiceProvider extends ServiceProvider
*/
public function boot()
{
Broadcast::routes();
Broadcast::routes(['middleware' => ['auth:sanctum']]);

require base_path('routes/channels.php');
}
Expand Down
2 changes: 2 additions & 0 deletions app/TechDiary/UUIDable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?php

7 changes: 7 additions & 0 deletions bootstrap/cache/packages.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,13 @@
'Agent' => 'Jenssegers\\Agent\\Facades\\Agent',
),
),
'knuckleswtf/scribe' =>
array (
'providers' =>
array (
0 => 'Knuckles\\Scribe\\ScribeServiceProvider',
),
),
'laracasts/generators' =>
array (
'providers' =>
Expand Down
Loading