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();
}
}