PHP 8.2.30
Preview: TicketRepository.php Size: 3.50 KB
/home/byroehnu/easetack.com/app/Repositories/Frontend/TicketRepository.php

<?php

namespace App\Repositories\Frontend;

use App\Helpers\IDGenerator;
use App\Models\Ticket;
use App\Repositories\Traits\ModelRepositoryTraits;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\Auth;

class TicketRepository
{
    use ModelRepositoryTraits;

    /**
     * Object model will be used to modify tickets table
     */
    protected Ticket $model;

    /**
     * Constructor for Ticket repository
     */
    public function __construct(Ticket $ticket)
    {
        $this->model = $ticket;
    }

    /**
     * Get search result with pagination
     */
    public function paginateSearchResult(): LengthAwarePaginator
    {
        $query = $this->model->with(['replies.user', 'user'])->where('user_id', Auth::user()->id)->newQuery();

        return $query->paginate(10);
    }

    /**
     * Create a new ticket
     */
    public function create(Request $request): void
    {
        /** store file **/
        $filePaths = [];

        if ($request->hasFile('documents')) {
            foreach ($request->file('documents') as $file) {
                $originalFileName = $file->getClientOriginalName();
                $fileName = $this->generateFileName($originalFileName);
                $filePath = $file->storeAs('tickets', $fileName);
                $filePaths[] = $filePath;
            }
        }

        /** generate ticket id **/
        $maxId = $this->model->max('id');
        $IDGenerator = new IDGenerator;

        /** assign tickets **/
        $this->model->create([
            'user_id' => Auth::user()->id,
            'generate_id' => $IDGenerator->generate($maxId),
            'subject' => $request->input('subject'),
            'properly' => $request->input('properly'),
            'message' => $request->input('message'),
            'documents' => json_encode($filePaths),
            'is_viewed' => 0,
            'is_client_viewed' => 0,
            'status' => 'pending',
        ]);
    }

    /**
     * Generate File Original name
     */
    public function generateFileName($originalFileName): mixed
    {
        /** check if the file with the same name already exist **/
        if ($this->model->where('original_file_name', $originalFileName)->exists()) {
            $maxSerial = $this->model->where('original_file_name', $originalFileName)->count() + 1;
            $fileName = pathinfo($originalFileName, PATHINFO_FILENAME).'-'.$maxSerial.'.'.pathinfo($originalFileName, PATHINFO_EXTENSION);
        } else {
            $fileName = $originalFileName;
        }

        return $fileName;
    }

    /**
     * Create a reply for a ticket with file attachment
     */
    public function createReply(Request $request, Ticket $ticket): void
    {
        $filePaths = [];

        if ($request->hasFile('documents')) {
            foreach ($request->file('documents') as $file) {
                $originalFileName = $file->getClientOriginalName();
                $fileName = $this->generateFileName($originalFileName);
                $filePath = $file->storeAs('tickets', $fileName);
                $filePaths[] = $filePath;
            }
        }

        $ticket->replies()->create([
            'user_id' => Auth::id(),
            'reply' => $request->input('message'),
            'documents' => json_encode($filePaths),
        ]);
    }

    /**
     * Bulk delete tickets
     */
    public function bulkDelete(Request $request): void
    {
        $ids = explode(',', $request->ids);
        Ticket::whereIn('id', $ids)->delete();
    }
}

Directory Contents

Dirs: 0 × Files: 9

Name Size Perms Modified Actions
2.62 KB lrw-rw-rw- 2025-04-19 04:22:15
Edit Download
8.26 KB lrw-rw-rw- 2025-05-15 11:24:11
Edit Download
1.45 KB lrw-rw-rw- 2025-04-19 04:22:15
Edit Download
6.38 KB lrw-rw-rw- 2025-05-08 12:05:13
Edit Download
2.52 KB lrw-rw-rw- 2025-04-26 11:30:31
Edit Download
1.77 KB lrw-rw-rw- 2025-04-15 10:33:57
Edit Download
829 B lrw-rw-rw- 2025-04-19 04:22:16
Edit Download
5.46 KB lrw-rw-rw- 2025-04-24 11:21:09
Edit Download
3.50 KB lrw-rw-rw- 2025-04-13 07:02:31
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).