visuddhinanda 2 سال پیش
والد
کامیت
ec9211e827
3فایلهای تغییر یافته به همراه149 افزوده شده و 0 حذف شده
  1. 108 0
      app/Http/Controllers/ArticleNavController.php
  2. 19 0
      app/Http/Resources/ArticleNavResource.php
  3. 22 0
      tests/Feature/ArticleNavTest.php

+ 108 - 0
app/Http/Controllers/ArticleNavController.php

@@ -0,0 +1,108 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use App\Http\Resources\ArticleNavResource;
+use App\Models\PaliText;
+
+class ArticleNavController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+        switch ($request->get('type')) {
+            case 'chapter':
+                $para = explode('-',$request->get('id'));
+                $prev = PaliText::where('book',$para[0])
+                                ->where('paragraph','<',$para[1])
+                                ->where('level','<',8)
+                                ->orderBy('paragraph','desc')
+                                ->first();
+                $next = PaliText::where('book',$para[0])
+                                ->where('paragraph','>',$para[1])
+                                ->where('level','<',8)
+                                ->orderBy('paragraph','asc')
+                                ->first();
+                $nav['prev']['id'] = $prev->book . '-' . $prev->paragraph;
+                $nav['prev']['title'] = $prev->toc;
+                $nav['prev']['subtitle'] = $prev->toc;
+                $nav['next']['id'] = $next->book . '-' . $next->paragraph;
+                $nav['next']['title'] = $next->toc;
+                $nav['next']['subtitle'] = $next->toc;
+                break;
+            case 'para':
+                $para = explode('-',$request->get('id'));
+                $prev = PaliText::where('book',$para[0])
+                                ->where('paragraph','<',$para[1])
+                                ->orderBy('paragraph','desc')
+                                ->first();
+                $next = PaliText::where('book',$para[0])
+                                ->where('paragraph','>',$para[1])
+                                ->orderBy('paragraph','asc')
+                                ->first();
+                $nav['prev']['id'] = $prev->book . '-' . $prev->paragraph;
+                $nav['prev']['title'] = $prev->text;
+                $nav['prev']['subtitle'] = $prev->text;
+                $nav['next']['id'] = $next->book . '-' . $next->paragraph;
+                $nav['next']['title'] = $next->text;
+                $nav['next']['subtitle'] = $next->text;
+                break;
+            default:
+                $this->error('type?');
+                break;
+        }
+        return $this->ok(new ArticleNavResource($nav));
+
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function show($id)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, $id)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy($id)
+    {
+        //
+    }
+}

+ 19 - 0
app/Http/Resources/ArticleNavResource.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class ArticleNavResource extends JsonResource
+{
+    /**
+     * Transform the resource into an array.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
+     */
+    public function toArray($request)
+    {
+        return parent::toArray($request);
+    }
+}

+ 22 - 0
tests/Feature/ArticleNavTest.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace Tests\Feature;
+
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class ArticleNavTest extends TestCase
+{
+    /**
+     * A basic feature test example.
+     *
+     * @return void
+     */
+    public function test_index()
+    {
+        $response = $this->get('/api/v2/article-nav?type=chapter&id=178-603');
+
+        $response->assertStatus(200);
+    }
+}