over naar uuids, policies, predefined mutations aan kunnen passen
This commit is contained in:
@@ -73,25 +73,15 @@ class ActivityService
|
||||
/**
|
||||
* Retrieve all activities for a given entity.
|
||||
*/
|
||||
public function getActivitiesForEntity($entity): array
|
||||
public function getActivitiesForDynamic(Dynamic $dynamic): array
|
||||
{
|
||||
if ($entity instanceof Dynamic) {
|
||||
$chatId = $entity->chat->id;
|
||||
$dynamic = $entity;
|
||||
} elseif ($entity instanceof Ledger) {
|
||||
$dynamic = $entity->dynamic;
|
||||
$chatId = $dynamic->chat->id;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
|
||||
$participants = $dynamic->participants()->withPivot('display_name')->get();
|
||||
$participantsMap = $participants->reduce(function ($acc, $p) {
|
||||
$acc[$p->id] = $p->pivot->display_name ?? $p->name;
|
||||
return $acc;
|
||||
}, []);
|
||||
|
||||
$messages = Message::where('chat_id', $chatId)
|
||||
$messages = Message::where('chat_id', $dynamic->chat->id)
|
||||
->with(['user', 'subject'])
|
||||
->latest()
|
||||
->get();
|
||||
@@ -113,27 +103,25 @@ class ActivityService
|
||||
/**
|
||||
* Get unread activities grouped by active entities (Dynamics, Ledgers) for the given user.
|
||||
*/
|
||||
public function getUnreadEntitiesGrouped(User $user): array
|
||||
public function getUnreadDynamicsGrouped(User $user): array
|
||||
{
|
||||
$groupedEntities = [];
|
||||
$groupedDynamics = [];
|
||||
$participatingDynamics = $user->dynamics()->with('ledgers')->get();
|
||||
|
||||
$entities = $participatingDynamics->concat($participatingDynamics->flatMap(fn ($d) => $d->ledgers));
|
||||
foreach ($participatingDynamics as $dynamic) {
|
||||
$readAt = $this->getCursorReadAt($user, $dynamic);
|
||||
$activities = $this->getActivitiesForDynamic($dynamic);
|
||||
|
||||
foreach ($entities as $entity) {
|
||||
$readAt = $this->getCursorReadAt($user, $entity);
|
||||
$activities = $this->getActivitiesForEntity($entity);
|
||||
|
||||
$this->partitionActivities($activities, $readAt, $entity, get_class($entity), $this->getUrlForEntity($entity), $groupedEntities);
|
||||
$this->partitionAndGroupActivities($activities, $readAt, $dynamic, $groupedDynamics);
|
||||
}
|
||||
|
||||
return $groupedEntities;
|
||||
return $groupedDynamics;
|
||||
}
|
||||
|
||||
/**
|
||||
* Partition activities into read and unread, and construct the grouped entity metadata.
|
||||
*/
|
||||
private function partitionActivities(array $activities, \Carbon\CarbonInterface $readAt, $entity, string $type, string $url, array &$groupedEntities): void
|
||||
private function partitionAndGroupActivities(array $activities, \Carbon\CarbonInterface $readAt, Dynamic $dynamic, array &$groupedDynamics): void
|
||||
{
|
||||
$alreadyRead = [];
|
||||
$unread = [];
|
||||
@@ -149,11 +137,10 @@ class ActivityService
|
||||
if (!empty($unread)) {
|
||||
$context = array_slice($alreadyRead, 0, 2);
|
||||
|
||||
$groupedEntities[] = [
|
||||
'id' => $entity->id,
|
||||
'name' => $entity->name,
|
||||
'type' => Str::afterLast($type, '\\'),
|
||||
'url' => $url,
|
||||
$groupedDynamics[] = [
|
||||
'id' => $dynamic->id,
|
||||
'name' => $dynamic->name,
|
||||
'url' => route('dynamics.show', $dynamic->uuid),
|
||||
'unread_count' => count($unread),
|
||||
'context_activities' => $context,
|
||||
'new_activities' => array_reverse($unread),
|
||||
@@ -164,11 +151,11 @@ class ActivityService
|
||||
private function getUrlForEntity($entity): string
|
||||
{
|
||||
if ($entity instanceof Dynamic) {
|
||||
return route('dynamics.show', $entity->id);
|
||||
return route('dynamics.show', $entity->uuid);
|
||||
}
|
||||
|
||||
if ($entity instanceof Ledger) {
|
||||
return route('dynamics.ledgers.show', [$entity->dynamic_id, $entity->id]);
|
||||
return route('dynamics.ledgers.show', [$entity->dynamic->uuid, $entity->uuid]);
|
||||
}
|
||||
|
||||
return '';
|
||||
|
||||
Reference in New Issue
Block a user