AiModelController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\StoreAiModelRequest;
  4. use App\Http\Requests\UpdateAiModelRequest;
  5. use App\Models\AiModel;
  6. use Illuminate\Http\Request;
  7. use App\Http\Api\AuthApi;
  8. use Illuminate\Support\Str;
  9. use Illuminate\Support\Facades\Log;
  10. use App\Http\Api\StudioApi;
  11. use App\Http\Resources\AiModelResource;
  12. class AiModelController extends Controller
  13. {
  14. /**
  15. * Display a listing of the resource.
  16. *
  17. * @return \Illuminate\Http\Response
  18. */
  19. public function index(Request $request)
  20. {
  21. //
  22. $user = AuthApi::current($request);
  23. if (!$user) {
  24. Log::error('notification auth failed {request}', ['request' => $request]);
  25. return $this->error(__('auth.failed'), 401, 401);
  26. }
  27. switch ($request->get('view')) {
  28. case 'all':
  29. $table = AiModel::whereNotNull('owner_id');
  30. break;
  31. case 'studio':
  32. $studioId = StudioApi::getIdByName($request->get('name'));
  33. $table = AiModel::where('owner_id', $studioId);
  34. break;
  35. }
  36. if ($request->has('keyword')) {
  37. $table = $table->where('name', 'like', '%' . $request->get('keyword') . '%');
  38. }
  39. $count = $table->count();
  40. $table = $table->orderBy(
  41. $request->get('order', 'created_at'),
  42. $request->get('dir', 'asc')
  43. );
  44. $table = $table->skip($request->get("offset", 0))
  45. ->take($request->get('limit', 1000));
  46. Log::debug('sql', ['sql' => $table->toSql()]);
  47. $result = $table->get();
  48. return $this->ok(
  49. [
  50. "rows" => AiModelResource::collection(resource: $result),
  51. "count" => $count,
  52. ]
  53. );
  54. }
  55. /**
  56. * Store a newly created resource in storage.
  57. *
  58. * @param \App\Http\Requests\StoreAiModelRequest $request
  59. * @return \Illuminate\Http\Response
  60. */
  61. public function store(StoreAiModelRequest $request)
  62. {
  63. //
  64. $user = AuthApi::current($request);
  65. if (!$user) {
  66. return $this->error(__('auth.failed'), 401, 401);
  67. }
  68. $studioId = StudioApi::getIdByName($request->get('studio_name'));
  69. Log::debug('store', ['studioId' => $studioId, 'user' => $user]);
  70. if (!self::canEdit($user['user_uid'], $studioId)) {
  71. return $this->error(__('auth.failed'), 403, 403);
  72. }
  73. $new = new AiModel();
  74. $new->name = $request->get('name');
  75. $new->uid = Str::uuid();
  76. $new->owner_id = $studioId;
  77. $new->editor_id = $user['user_uid'];
  78. $new->save();
  79. return $this->ok(new AiModelResource($new));
  80. }
  81. /**
  82. * Display the specified resource.
  83. *
  84. * @param \App\Models\AiModel $aiModel
  85. * @return \Illuminate\Http\Response
  86. */
  87. public function show(AiModel $aiModel)
  88. {
  89. //
  90. return $this->ok(new AiModelResource($aiModel));
  91. }
  92. /**
  93. * Update the specified resource in storage.
  94. *
  95. * @param \App\Http\Requests\UpdateAiModelRequest $request
  96. * @param \App\Models\AiModel $aiModel
  97. * @return \Illuminate\Http\Response
  98. */
  99. public function update(UpdateAiModelRequest $request, AiModel $aiModel)
  100. {
  101. //
  102. $user = AuthApi::current($request);
  103. if (!$user) {
  104. return $this->error(__('auth.failed'), 401, 401);
  105. }
  106. if (!self::canEdit($user['user_uid'], $aiModel->owner_id)) {
  107. return $this->error(__('auth.failed'), 403, 403);
  108. }
  109. $aiModel->name = $request->get('name');
  110. $aiModel->description = $request->get('description');
  111. $aiModel->url = $request->get('url');
  112. $aiModel->model = $request->get('model');
  113. $aiModel->key = $request->get('key');
  114. $aiModel->privacy = $request->get('privacy');
  115. $aiModel->editor_id = $user['user_uid'];
  116. $aiModel->save();
  117. return $this->ok(new AiModelResource($aiModel));
  118. }
  119. /**
  120. * Remove the specified resource from storage.
  121. *
  122. * @param \App\Models\AiModel $aiModel
  123. * @return \Illuminate\Http\Response
  124. */
  125. public function destroy(Request $request, AiModel $aiModel)
  126. {
  127. //
  128. $user = AuthApi::current($request);
  129. if (!$user) {
  130. return $this->error(__('auth.failed'), 401, 401);
  131. }
  132. if (!self::canEdit($user['user_uid'], $aiModel->owner_id)) {
  133. return $this->error(__('auth.failed'), 403, 403);
  134. }
  135. $del = $aiModel->delete();
  136. return $this->ok($del);
  137. }
  138. public static function canEdit($user_uid, $owner_uid)
  139. {
  140. return $user_uid === $owner_uid;
  141. }
  142. }