HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/comfama.sports-crowd.com/app/Core/User/Application/UserService.php
<?php

declare(strict_types=1);

namespace App\Core\User\Application;

use App\Address;
use App\Core\Payment\Entities\Customer;
use App\Models\MembershipSubscriber;
use App\User;

class UserService
{
    public function find(int $id)
    {
        $user = User::find($id);
        if(!$user){
            $user = User::where('id', $id)->withTrashed()->first();
        }
        return $user;
    }

    public function buildCustomerFromUser($user): Customer
    {
        return new Customer(
            (int) $user->id,
            $user->document,
            $user->documentType->alias,
            $user->first_name,
            $user->last_name,
            $user->email,
            $user->phone
        );
    }

    public function buildCustomerFromUserId($id): Customer
    {
        $user = $this->find((int)$id);
        return $this->buildCustomerFromUser($user);
    }

    public function addTags(User $user, array $tags)
    {
        $user->tags()->syncWithoutDetaching($tags);
    }

    public function removeTags(User $user, array $tags)
    {
        $user->tags()->detach($tags);
    }

    public function getLastUsedAddress(User $user)
    {
        return Address::where('user_id', $user->id)
            ->where('last_used', 1)
            ->first();
    }

    public function setLastUsedAddress(User $user, Address $address)
    {
        Address::where('user_id', $user->id)
            ->update(['last_used' => 0]);

        Address::where('user_id', $user->id)
            ->where('id', $address->id)
            ->update(['last_used' => 1]);
    }

    public function getMemberships(User $user)
    {
        return $user->memberships;
    }

    public function getActiveMemberships(User $user)
    {
        $user = User::with('memberships')
            ->whereHas('memberships', function ($query) {
                $query->where('membership_subscribers.status', '=', "CONFIRMED");
                $query->orderBy('id', 'desc');
            });

        return $user->get();
    }

    public function hasMembership(User $user, MembershipSubscriber $membershipSubscriber)
    {
        $result = MembershipSubscriber::where('membership_subscribers.user_id', '=', $user->id)
            ->where('membership_subscribers.membership_id', '=', $membershipSubscriber->membership_id)
            ->where('membership_subscribers.status', '=', "CONFIRMED")
            ->first();

        return $result;
    }

    public function getExpiredMemberships(User $user)
    {
        $user = User::with('memberships')
            ->whereHas('memberships', function ($query) {
                $query->where('membership_subscribers.status', '=', "EXPIRED");
                $query->orderBy('id', 'desc');
            });

        return $user->get();
    }
}