api.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  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. use App\Models\BlogImage;
  12. /*
  13. |--------------------------------------------------------------------------
  14. | API Routes
  15. |--------------------------------------------------------------------------
  16. |
  17. | Here is where you can register API routes for your application. These
  18. | routes are loaded by the RouteServiceProvider within a group which
  19. | is assigned the "api" middleware group. Enjoy building your API!
  20. |
  21. */
  22. Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
  23. return $request->user();
  24. });
  25. Route::post('/login', function (Request $request) {
  26. $request->validate([
  27. 'email' => 'required|email',
  28. 'password' => 'required',
  29. ]);
  30. $user = User::where('email', $request->email)->first();
  31. if (!$user || !Hash::check($request->password, $user->password)) {
  32. throw ValidationException::withMessages([
  33. 'email' => ['The provided credentials are incorrect.'],
  34. ]);
  35. }
  36. return [
  37. 'token' => $user->createToken('login')->plainTextToken,
  38. 'userData' => json_encode($user),
  39. ];
  40. });
  41. Route::middleware('auth:sanctum')->post('/logout', function (Request $request) {
  42. $user = $request->user();
  43. $user->tokens()->delete();
  44. return $user;
  45. });
  46. Route::middleware('auth:sanctum')->post('/comment/post', function (Request $request) {
  47. $request->validate([
  48. 'comment' => 'required',
  49. 'blogId' => 'required',
  50. ]);
  51. Comment::insert([
  52. 'writer' => $request->user()->id,
  53. 'comment' => $request->comment,
  54. 'blogId' => $request->blogId,
  55. 'created_at' => now(),
  56. 'updated_at' => now(),
  57. ]);
  58. return 'success';
  59. });
  60. Route::middleware('auth:sanctum')->post('/comment/delete', function (Request $request) {
  61. $request->validate([
  62. 'commentID' => 'required',
  63. ]);
  64. Comment::where('id', '=', $request->commentID)->delete();
  65. return 'success';
  66. });
  67. Route::middleware('auth:sanctum')->post('/get_blog/list', function (Request $request) {
  68. $blogList = DB::select("SELECT
  69. blogs.id,
  70. title,
  71. content AS excerpt,
  72. tags,
  73. users.id AS userId,
  74. users.name AS userFullName,
  75. blogs.created_at AS blogPosted,
  76. t.total AS comment,
  77. path
  78. FROM [laravel_kevin].[dbo].[blogs]
  79. LEFT JOIN [dbo].[users] ON [blogs].[writer] = [users].[id]
  80. LEFT JOIN (
  81. SELECT [blogId],COUNT(*) AS total
  82. FROM [laravel_kevin].[dbo].[comments]
  83. GROUP BY [blogId]) as t ON [blogs].[id] = [t].[blogId]
  84. LEFT JOIN [dbo].[blog_images] ON [blogs].[id] = [blog_images].[blogId]
  85. ORDER BY blogs.id DESC");
  86. foreach($blogList as $blog) {
  87. $blog->tags = json_decode($blog->tags);
  88. }
  89. return $blogList;
  90. });
  91. Route::middleware('auth:sanctum')->post('/get_blog/list/perpage', function (Request $request) {
  92. $request->validate([
  93. 'offset' => 'required',
  94. 'rows' => 'required',
  95. ]);
  96. $blogList = DB::select("SELECT
  97. blogs.id,
  98. title,
  99. content AS excerpt,
  100. tags,
  101. users.id AS userId,
  102. users.name AS userFullName,
  103. blogs.created_at AS blogPosted,
  104. t.total AS comment,
  105. path
  106. FROM [laravel_kevin].[dbo].[blogs]
  107. LEFT JOIN [dbo].[users] ON [blogs].[writer] = [users].[id]
  108. LEFT JOIN (
  109. SELECT [blogId],COUNT(*) AS total
  110. FROM [laravel_kevin].[dbo].[comments]
  111. GROUP BY [blogId]) as t ON [blogs].[id] = [t].[blogId]
  112. LEFT JOIN [dbo].[blog_images] ON [blogs].[id] = [blog_images].[blogId]
  113. ORDER BY blogs.id DESC
  114. OFFSET " . $request->offset . " ROW
  115. FETCH NEXT " . $request->rows . " ROWS ONLY");
  116. foreach($blogList as $blog) {
  117. $blog->tags = json_decode($blog->tags);
  118. }
  119. return $blogList;
  120. });
  121. Route::middleware('auth:sanctum')->post('/get_blog/list/total', function (Request $request) {
  122. $blogList = DB::select("SELECT COUNT(*) AS total
  123. FROM [laravel_kevin].[dbo].[blogs]");
  124. return $blogList[0]->total;
  125. });
  126. Route::middleware('auth:sanctum')->post('/get_blog/detail', function (Request $request) {
  127. $request->validate([
  128. 'blogId' => 'required',
  129. ]);
  130. $blog = DB::select("SELECT
  131. title,
  132. content,
  133. tags,
  134. users.id AS userId,
  135. users.name AS userFullName,
  136. blogs.created_at AS createdTime,
  137. bookmarked,
  138. t.total AS comments,
  139. path
  140. FROM [laravel_kevin].[dbo].[blogs]
  141. LEFT JOIN [dbo].[users] ON [blogs].[writer] = [users].[id]
  142. LEFT JOIN (
  143. SELECT [blogId],COUNT(*) AS total
  144. FROM [laravel_kevin].[dbo].[comments]
  145. GROUP BY [blogId]) as t ON [blogs].[id] = [t].[blogId]
  146. LEFT JOIN [dbo].[blog_images] ON [blogs].[id] = [blog_images].[blogId]
  147. WHERE blogs.id=" . $request->blogId);
  148. $blog[0]->tags = json_decode($blog[0]->tags);
  149. $comments = DB::select("SELECT comment AS commentText, comments.created_at AS commentedAt, users.id AS userId, users.name AS userFullName
  150. FROM [laravel_kevin].[dbo].[comments]
  151. RIGHT JOIN [dbo].[users] ON [comments].[writer] = [users].[id]
  152. WHERE [blogId]=" . $request->blogId);
  153. return ['blog' => $blog[0], 'comments' => $comments];
  154. });
  155. Route::middleware('auth:sanctum')->post('/get_blog/sidebar', function (Request $request) {
  156. $recentPosts = DB::select("SELECT TOP(4)
  157. blogs.id,
  158. title,
  159. blogs.created_at AS createdTime,
  160. t.total AS comments,
  161. path
  162. FROM [laravel_kevin].[dbo].[blogs]
  163. LEFT JOIN [dbo].[users] ON [blogs].[writer] = [users].[id]
  164. LEFT JOIN (
  165. SELECT [blogId],COUNT(*) AS total
  166. FROM [laravel_kevin].[dbo].[comments]
  167. GROUP BY [blogId]) as t ON [blogs].[id] = [t].[blogId]
  168. LEFT JOIN [dbo].[blog_images] ON [blogs].[id] = [blog_images].[blogId]
  169. ORDER BY comments DESC");
  170. $categories = [
  171. ['category' => 'Fashion', 'icon' => 'WatchIcon'],
  172. ['category' => 'Food', 'icon' => 'ShoppingCartIcon'],
  173. ['category' => 'Gaming', 'icon' => 'CommandIcon'],
  174. ['category' => 'Quote', 'icon' => 'HashIcon'],
  175. ['category' => 'Video', 'icon' => 'VideoIcon'],
  176. ];
  177. return ['recentPosts' => $recentPosts, 'categories' => $categories];
  178. });
  179. Route::middleware('auth:sanctum')->post('/get_blog/edit', function (Request $request) {
  180. $request->validate([
  181. 'blogId' => 'required',
  182. ]);
  183. $data = DB::select("SELECT
  184. title AS blogTitle,
  185. content AS excerpt,
  186. tags AS blogCategories,
  187. users.id AS userId,
  188. users.name AS userFullName,
  189. blogs.created_at AS createdTime
  190. FROM [laravel_kevin].[dbo].[blogs]
  191. RIGHT JOIN [dbo].[users] ON [blogs].[writer] = [users].[id]
  192. WHERE blogs.id=" . $request->blogId);
  193. $data[0]->blogCategories = json_decode($data[0]->blogCategories);
  194. return $data[0];
  195. });
  196. Route::middleware('auth:sanctum')->post('/get_blog/image_insert', function (Request $request) {
  197. $request->validate([
  198. 'blogId' => 'required',
  199. 'path' => 'required',
  200. 'name' => 'required',
  201. ]);
  202. BlogImage::insert([
  203. 'blogId' => $request->blogId,
  204. 'path' => $request->path,
  205. 'name' => $request->name,
  206. 'created_at' => now(),
  207. 'updated_at' => now(),
  208. ]);
  209. // for ( $i=$request->blogId ; $i<11 ; $i++ ) {
  210. // BlogImage::insert([
  211. // 'blogId' => $i,
  212. // 'path' => 'banner/banner-'.$i.'.jpg',
  213. // 'name' => 'banner-'.$i,
  214. // 'created_at' => now(),
  215. // 'updated_at' => now(),
  216. // ]);
  217. // }
  218. return 'success';
  219. });