api.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. use Illuminate\Http\Request;
  3. use Illuminate\Support\Facades\Route;
  4. use Illuminate\Support\Facades\Hash;
  5. use Illuminate\Validation\ValidationException;
  6. use Illuminate\Support\Facades\DB;
  7. use App\Models\User;
  8. use App\Models\Message;
  9. use App\Models\Blog;
  10. use App\Models\Comment;
  11. /*
  12. |--------------------------------------------------------------------------
  13. | API Routes
  14. |--------------------------------------------------------------------------
  15. |
  16. | Here is where you can register API routes for your application. These
  17. | routes are loaded by the RouteServiceProvider within a group which
  18. | is assigned the "api" middleware group. Enjoy building your API!
  19. |
  20. */
  21. Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
  22. return $request->user();
  23. });
  24. Route::post('/login', function (Request $request) {
  25. $request->validate([
  26. 'email' => 'required|email',
  27. 'password' => 'required',
  28. ]);
  29. $user = User::where('email', $request->email)->first();
  30. if (!$user || !Hash::check($request->password, $user->password)) {
  31. throw ValidationException::withMessages([
  32. 'email' => ['The provided credentials are incorrect.'],
  33. ]);
  34. }
  35. return [
  36. 'token' => $user->createToken('login')->plainTextToken,
  37. 'userData' => json_encode($user),
  38. ];
  39. });
  40. Route::middleware('auth:sanctum')->post('/logout', function (Request $request) {
  41. $user = $request->user();
  42. $user->tokens()->delete();
  43. return $user;
  44. });
  45. Route::middleware('auth:sanctum')->post('/comment/post', function (Request $request) {
  46. $request->validate([
  47. 'comment' => 'required',
  48. 'blogId' => 'required',
  49. ]);
  50. Comment::insert([
  51. 'writer' => $request->user()->id,
  52. 'comment' => $request->comment,
  53. 'blogId' => $request->blogId,
  54. 'created_at' => now(),
  55. 'updated_at' => now(),
  56. ]);
  57. return 'success';
  58. });
  59. Route::middleware('auth:sanctum')->post('/comment/delete', function (Request $request) {
  60. $request->validate([
  61. 'commentID' => 'required',
  62. ]);
  63. Comment::where('id', '=', $request->commentID)->delete();
  64. return 'success';
  65. });
  66. Route::middleware('auth:sanctum')->post('/get_blog/list', function (Request $request) {
  67. $blogList = DB::select("SELECT
  68. blogs.id,
  69. title,
  70. content AS excerpt,
  71. tags, users.id AS userId,
  72. users.name AS userFullName,
  73. blogs.created_at AS blogPosted,
  74. t.total AS comment
  75. FROM [laravel_kevin].[dbo].[blogs]
  76. RIGHT JOIN [dbo].[users] ON [blogs].[writer] = [users].[id]
  77. LEFT JOIN (
  78. SELECT [blogId],COUNT(*) AS total
  79. FROM [laravel_kevin].[dbo].[comments]
  80. GROUP BY [blogId]) as t ON [blogs].[id] = [t].[blogId]
  81. ORDER BY blogs.id DESC");
  82. return $blogList;
  83. });
  84. Route::middleware('auth:sanctum')->post('/get_blog/list/perpage', function (Request $request) {
  85. $request->validate([
  86. 'offset' => 'required',
  87. 'rows' => 'required',
  88. ]);
  89. $blogList = DB::select("SELECT
  90. blogs.id,
  91. title,
  92. content AS excerpt,
  93. tags, users.id AS userId,
  94. users.name AS userFullName,
  95. blogs.created_at AS blogPosted,
  96. t.total AS comment
  97. FROM [laravel_kevin].[dbo].[blogs]
  98. RIGHT JOIN [dbo].[users] ON [blogs].[writer] = [users].[id]
  99. LEFT JOIN (
  100. SELECT [blogId],COUNT(*) AS total
  101. FROM [laravel_kevin].[dbo].[comments]
  102. GROUP BY [blogId]) as t ON [blogs].[id] = [t].[blogId]
  103. ORDER BY blogs.id DESC
  104. OFFSET " . $request->offset . " ROW
  105. FETCH NEXT " . $request->rows . " ROWS ONLY");
  106. return $blogList;
  107. });
  108. Route::middleware('auth:sanctum')->post('/get_blog/list/total', function (Request $request) {
  109. $blogList = DB::select("SELECT COUNT(*) AS total
  110. FROM [laravel_kevin].[dbo].[blogs]");
  111. return $blogList[0]->total;
  112. });
  113. Route::middleware('auth:sanctum')->post('/get_blog/detail', function (Request $request) {
  114. $request->validate([
  115. 'blogId' => 'required',
  116. ]);
  117. $blog = DB::select("SELECT
  118. title,
  119. content,
  120. tags,
  121. users.id AS userId,
  122. users.name AS userFullName,
  123. blogs.created_at AS createdTime,
  124. bookmarked,
  125. t.total AS comments
  126. FROM [laravel_kevin].[dbo].[blogs]
  127. RIGHT JOIN [dbo].[users] ON [blogs].[writer] = [users].[id]
  128. LEFT JOIN (
  129. SELECT [blogId],COUNT(*) AS total
  130. FROM [laravel_kevin].[dbo].[comments]
  131. GROUP BY [blogId]) as t ON [blogs].[id] = [t].[blogId]
  132. WHERE blogs.id=" . $request->blogId);
  133. $comments = DB::select("SELECT comment AS commentText, comments.created_at AS commentedAt, users.id AS userId, users.name AS userFullName
  134. FROM [laravel_kevin].[dbo].[comments]
  135. RIGHT JOIN [dbo].[users] ON [comments].[writer] = [users].[id]
  136. WHERE [blogId]=" . $request->blogId);
  137. return ['blog' => $blog[0], 'comments' => $comments];
  138. });
  139. Route::middleware('auth:sanctum')->post('/get_blog/sidebar', function (Request $request) {
  140. $recentPosts = DB::select("SELECT TOP(4) blogs.id, title, blogs.created_at AS createdTime, t.total AS comments
  141. FROM [laravel_kevin].[dbo].[blogs]
  142. RIGHT JOIN [dbo].[users] ON [blogs].[writer] = [users].[id]
  143. LEFT JOIN (
  144. SELECT [blogId],COUNT(*) AS total
  145. FROM [laravel_kevin].[dbo].[comments]
  146. GROUP BY [blogId]) as t ON [blogs].[id] = [t].[blogId]
  147. ORDER BY comments DESC");
  148. $categories = [
  149. ['category' => 'Fashion', 'icon' => 'WatchIcon'],
  150. ['category' => 'Food', 'icon' => 'ShoppingCartIcon'],
  151. ['category' => 'Gaming', 'icon' => 'CommandIcon'],
  152. ['category' => 'Quote', 'icon' => 'HashIcon'],
  153. ['category' => 'Video', 'icon' => 'VideoIcon'],
  154. ];
  155. return ['recentPosts' => $recentPosts, 'categories' => $categories];
  156. });