* #132 - added translations * wip * #132 - added translations * #132 - cs fix * #132 - cs fix Co-authored-by: Adrian Hopek <adrian.hopek@blumilk.pl>
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| declare(strict_types=1);
 | |
| 
 | |
| namespace Toby\Infrastructure\Slack\Handlers;
 | |
| 
 | |
| use Illuminate\Validation\ValidationException;
 | |
| use Spatie\SlashCommand\Request;
 | |
| use Spatie\SlashCommand\Response;
 | |
| use Toby\Domain\Notifications\KeyHasBeenGivenNotification;
 | |
| use Toby\Eloquent\Models\Key;
 | |
| use Toby\Infrastructure\Slack\Exceptions\UserNotFoundException;
 | |
| use Toby\Infrastructure\Slack\Rules\SlackUserExistsRule;
 | |
| use Toby\Infrastructure\Slack\Traits\FindsUserBySlackId;
 | |
| 
 | |
| class GiveKeysTo extends SignatureHandler
 | |
| {
 | |
|     use FindsUserBySlackId;
 | |
| 
 | |
|     protected $signature = "toby klucze:dla {user}";
 | |
|     protected $description = "Give the keys to the specified user";
 | |
| 
 | |
|     /**
 | |
|      * @throws UserNotFoundException
 | |
|      * @throws ValidationException
 | |
|      */
 | |
|     public function handle(Request $request): Response
 | |
|     {
 | |
|         ["user" => $from] = $this->validate();
 | |
| 
 | |
|         $authUser = $this->findUserBySlackIdOrFail($request->userId);
 | |
|         $user = $this->findUserBySlackId($from);
 | |
| 
 | |
|         /** @var Key $key */
 | |
|         $key = $authUser->keys()->first();
 | |
| 
 | |
|         if (!$key) {
 | |
|             throw ValidationException::withMessages(["key" => __("You don't have any key to give")]);
 | |
|         }
 | |
| 
 | |
|         if ($user->is($authUser)) {
 | |
|             throw ValidationException::withMessages([
 | |
|                 "key" => __("You can't give the keys to yourself :dzban:"),
 | |
|             ]);
 | |
|         }
 | |
| 
 | |
|         $key->user()->associate($user);
 | |
| 
 | |
|         $key->save();
 | |
| 
 | |
|         $key->notify(new KeyHasBeenGivenNotification($authUser, $user));
 | |
| 
 | |
|         return $this->respondToSlack(
 | |
|             __(":white_check_mark: Key no. :key has been given to <@:user>", ["key" => $key->id, "user" => $user->profile->slack_id]),
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     protected function getRules(): array
 | |
|     {
 | |
|         return [
 | |
|             "user" => ["required", new SlackUserExistsRule()],
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     protected function getMessages(): array
 | |
|     {
 | |
|         return [
 | |
|             "user.required" => "You must specified the user to whom you want to give the keys",
 | |
|         ];
 | |
|     }
 | |
| }
 |