InviteController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Invite;
  4. use App\Models\UserInfo;
  5. use Illuminate\Http\Request;
  6. use App\Http\Api\AuthApi;
  7. use App\Http\Api\StudioApi;
  8. use App\Http\Resources\InviteResource;
  9. use Illuminate\Support\Str;
  10. use Mail;
  11. use App\Mail\InviteMail;
  12. class InviteController 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. $table = Invite::select(['id','user_uid','email',
  23. 'status','created_at','updated_at']);
  24. switch ($request->get('view')) {
  25. case 'studio':
  26. $user = AuthApi::current($request);
  27. if(!$user){
  28. return $this->error(__('auth.failed'));
  29. }
  30. //判断当前用户是否有指定的studio的权限
  31. if($user['user_uid'] !== StudioApi::getIdByName($request->get('studio'))){
  32. return $this->error(__('auth.failed'));
  33. }
  34. $table = $table->where('user_uid', $user["user_uid"]);
  35. break;
  36. }
  37. if($request->has('search')){
  38. $table = $table->where('email', 'like', '%'.$request->get('search')."%");
  39. }
  40. $count = $table->count();
  41. $table = $table->orderBy($request->get('order','updated_at'),
  42. $request->get('dir','desc'));
  43. $table = $table->skip($request->get('offset',0))
  44. ->take($request->get('limit',1000));
  45. $result = $table->get();
  46. return $this->ok(["rows"=>InviteResource::collection($result),"count"=>$count]);
  47. }
  48. /**
  49. * Store a newly created resource in storage.
  50. *
  51. * @param \Illuminate\Http\Request $request
  52. * @return \Illuminate\Http\Response
  53. */
  54. public function store(Request $request)
  55. {
  56. //
  57. $user = AuthApi::current($request);
  58. if(!$user){
  59. return $this->error(__('auth.failed'));
  60. }
  61. //判断当前用户是否有指定的studio的权限
  62. $studio_id = StudioApi::getIdByName($request->get('studio'));
  63. if($user['user_uid'] !== $studio_id){
  64. return $this->error(__('auth.failed'));
  65. }
  66. //查询是否重复
  67. if(Invite::where('email',$request->get('email'))->exists() ||
  68. UserInfo::where('email',$request->get('email'))->exists()){
  69. return $this->error(__('validation.exists',['email']),[],200);
  70. }
  71. $uuid = Str::uuid();
  72. Mail::to($request->get('email'))
  73. ->locale(strtolower($request->get('lang')))
  74. ->send(new InviteMail($uuid,strtolower($request->get('lang'))));
  75. if(Mail::failures()){
  76. return $this->error('send email fail',[],200);
  77. }else{
  78. $invite = new Invite;
  79. $invite->id = $uuid;
  80. $invite->email = $request->get('email');
  81. $invite->user_uid = $user['user_uid'];
  82. $invite->status = 'invited';
  83. $invite->save();
  84. }
  85. return $this->ok(new InviteResource($invite));
  86. }
  87. /**
  88. * Display the specified resource.
  89. *
  90. * @param \App\Models\Invite $invite
  91. * @return \Illuminate\Http\Response
  92. */
  93. public function show(Invite $invite)
  94. {
  95. //
  96. return $this->ok(new InviteResource($invite));
  97. }
  98. /**
  99. * Update the specified resource in storage.
  100. *
  101. * @param \Illuminate\Http\Request $request
  102. * @param \App\Models\Invite $invite
  103. * @return \Illuminate\Http\Response
  104. */
  105. public function update(Request $request, Invite $invite)
  106. {
  107. //
  108. }
  109. /**
  110. * Remove the specified resource from storage.
  111. *
  112. * @param \App\Models\Invite $invite
  113. * @return \Illuminate\Http\Response
  114. */
  115. public function destroy(Invite $invite)
  116. {
  117. //
  118. }
  119. }