2
0

InviteController.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. ->send(new InviteMail($uuid,$request->get('lang')));
  74. if(Mail::failures()){
  75. return $this->error('send email fail',[],200);
  76. }else{
  77. $invite = new Invite;
  78. $invite->id = $uuid;
  79. $invite->email = $request->get('email');
  80. $invite->user_uid = $user['user_uid'];
  81. $invite->status = 'invited';
  82. $invite->save();
  83. }
  84. return $this->ok(new InviteResource($invite));
  85. }
  86. /**
  87. * Display the specified resource.
  88. *
  89. * @param \App\Models\Invite $invite
  90. * @return \Illuminate\Http\Response
  91. */
  92. public function show(Invite $invite)
  93. {
  94. //
  95. return $this->ok(new InviteResource($invite));
  96. }
  97. /**
  98. * Update the specified resource in storage.
  99. *
  100. * @param \Illuminate\Http\Request $request
  101. * @param \App\Models\Invite $invite
  102. * @return \Illuminate\Http\Response
  103. */
  104. public function update(Request $request, Invite $invite)
  105. {
  106. //
  107. }
  108. /**
  109. * Remove the specified resource from storage.
  110. *
  111. * @param \App\Models\Invite $invite
  112. * @return \Illuminate\Http\Response
  113. */
  114. public function destroy(Invite $invite)
  115. {
  116. //
  117. }
  118. }