mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-30 21:21:09 -04:00 
			
		
		
		
	add mail sender crud
This commit is contained in:
		| @ -0,0 +1,24 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Admin\MailSender; | ||||
|  | ||||
| use Crater\Http\Controllers\Controller; | ||||
| use Crater\Http\Resources\MailSenderResource; | ||||
| use Crater\Models\MailSender; | ||||
| use Illuminate\Http\Request; | ||||
|  | ||||
| class GetAllMailSendersController extends Controller | ||||
| { | ||||
|     /** | ||||
|      * Handle the incoming request. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request  $request | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function __invoke(Request $request) | ||||
|     { | ||||
|         $mailSenders = MailSender::whereCompany()->get(); | ||||
|  | ||||
|         return MailSenderResource::collection($mailSenders); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,111 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Admin\MailSender; | ||||
|  | ||||
| use Crater\Http\Controllers\Controller; | ||||
| use Crater\Http\Requests\MailSenderRequest; | ||||
| use Crater\Http\Resources\MailSenderResource; | ||||
| use Crater\Models\MailSender; | ||||
| use Illuminate\Http\Request; | ||||
|  | ||||
| class MailSenderController extends Controller | ||||
| { | ||||
|     /** | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function index(Request $request) | ||||
|     { | ||||
|         $this->authorize('viewAny', MailSender::class); | ||||
|  | ||||
|         $limit = $request->has('limit') ? $request->limit : 10; | ||||
|  | ||||
|         $mailSenders = MailSender::whereCompany() | ||||
|             ->applyFilters($request->all()) | ||||
|             ->paginateData($limit); | ||||
|  | ||||
|         return (MailSenderResource::collection($mailSenders)) | ||||
|             ->additional(['meta' => [ | ||||
|                 'mail_sender_total_count' => MailSender::whereCompany()->count(), | ||||
|             ]]); | ||||
|     } | ||||
|  | ||||
|      /** | ||||
|      * Store a newly created resource in storage. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request  $request | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function store(MailSenderRequest $request) | ||||
|     { | ||||
|         $this->authorize('create', MailSender::class); | ||||
|  | ||||
|         $mailConfiguration = MailSender::where('company_id', $request->header('company')) | ||||
|             ->where('is_default', true) | ||||
|             ->count(); | ||||
|  | ||||
|         if ($mailConfiguration > 0 && $request['is_default'] == true) { | ||||
|             return respondJson('default_record_exists', 'Default mail sender already exist'); | ||||
|         } | ||||
|  | ||||
|         $mailSender = MailSender::createFromRequest($request); | ||||
|  | ||||
|         return new MailSenderResource($mailSender); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Display the specified resource. | ||||
|      * | ||||
|      * @param  \Crater\Models\SenderMail  $senderMail | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function show(MailSender $mailSender) | ||||
|     { | ||||
|         $this->authorize('view', $mailSender); | ||||
|  | ||||
|         return new MailSenderResource($mailSender); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Update the specified resource in storage. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request  $request | ||||
|      * @param  \Crater\Models\SenderMail  $senderMail | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function update(MailSenderRequest $request, MailSender $mailSender) | ||||
|     { | ||||
|         $this->authorize('update', $mailSender); | ||||
|  | ||||
|         $mailConfiguration = MailSender::where('company_id', $request->header('company')) | ||||
|             ->where('is_default', true) | ||||
|             ->where('id', '<>', $mailSender->id) | ||||
|             ->count(); | ||||
|  | ||||
|         if ($mailConfiguration > 0 && $request['is_default'] == true) { | ||||
|             return respondJson('default_record_exists', 'Default mail sender already exist'); | ||||
|         } | ||||
|  | ||||
|         $mailSender->updateFromRequest($request); | ||||
|  | ||||
|         return new MailSenderResource($mailSender); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Remove the specified resource from storage. | ||||
|      * | ||||
|      * @param  \Crater\Models\SenderMail  $senderMail | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function destroy(MailSender $mailSender) | ||||
|     { | ||||
|         $this->authorize('delete', $mailSender); | ||||
|  | ||||
|         $mailSender->delete(); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'success' => true, | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										79
									
								
								app/Http/Requests/MailSenderRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								app/Http/Requests/MailSenderRequest.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,79 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Requests; | ||||
|  | ||||
| use Illuminate\Validation\Rule; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
|  | ||||
| class MailSenderRequest extends FormRequest | ||||
| { | ||||
|     /** | ||||
|      * Determine if the user is authorized to make this request. | ||||
|      * | ||||
|      * @return bool | ||||
|      */ | ||||
|     public function authorize() | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the validation rules that apply to the request. | ||||
|      * | ||||
|      * @return array | ||||
|      */ | ||||
|     public function rules() | ||||
|     { | ||||
|         $rules = [ | ||||
|             'name' => [ | ||||
|                 'required', | ||||
|                 Rule::unique('mail_senders') | ||||
|                 ->where('company_id', $this->header('company')) | ||||
|             ], | ||||
|             'driver' => [ | ||||
|                 'required', | ||||
|             ], | ||||
|             'is_default' => [ | ||||
|                 'nullable' | ||||
|             ], | ||||
|             'bcc' => [ | ||||
|                 'nullable' | ||||
|             ], | ||||
|             'cc' => [ | ||||
|                 'nullable' | ||||
|             ], | ||||
|             'from_address' => [ | ||||
|                 'nullable' | ||||
|             ], | ||||
|             'from_name' => [ | ||||
|                 'nullable' | ||||
|             ], | ||||
|             'settings' => [ | ||||
|                 'nullable' | ||||
|             ], | ||||
|             'settings.*' => [ | ||||
|                 'nullable' | ||||
|             ] | ||||
|         ]; | ||||
|  | ||||
|         if ($this->isMethod('PUT')) { | ||||
|             $rules['name'] = [ | ||||
|                 'nullable', | ||||
|                 Rule::unique('mail_senders') | ||||
|                     ->ignore($this->route('mail_sender')->id) | ||||
|                     ->where('company_id', $this->header('company')) | ||||
|             ]; | ||||
|         } | ||||
|  | ||||
|         return $rules; | ||||
|     } | ||||
|  | ||||
|     public function getMailSenderPayload() | ||||
|     { | ||||
|         return collect($this->validated()) | ||||
|             ->merge([ | ||||
|                 'company_id' => $this->header('company'), | ||||
|             ]) | ||||
|             ->toArray(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										30
									
								
								app/Http/Resources/MailSenderResource.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								app/Http/Resources/MailSenderResource.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Resources; | ||||
|  | ||||
| use Illuminate\Http\Resources\Json\JsonResource; | ||||
|  | ||||
| class MailSenderResource extends JsonResource | ||||
| { | ||||
|     /** | ||||
|      * Transform the resource into an array. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request  $request | ||||
|      * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable | ||||
|      */ | ||||
|     public function toArray($request) | ||||
|     { | ||||
|         return [ | ||||
|             'id' => $this->id, | ||||
|             'name' => $this->name, | ||||
|             'driver' => $this->driver, | ||||
|             'is_default' => $this->is_default, | ||||
|             'bcc' => $this->bcc, | ||||
|             'cc' => $this->cc, | ||||
|             'from_address' => $this->from_address, | ||||
|             'from_name' => $this->from_name, | ||||
|             'company_id' => $this->company_id, | ||||
|             'settings' => $this->settings | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user