Newer
Older
smart-home-server / server / SHServ / Integrations / GAuth / Webhook / Handlers / UserHandler.php
@Eugene Sukhodolskiy Eugene Sukhodolskiy 15 hours ago 1 KB Phase 0: gnexus-auth integration infrastructure
<?php

declare(strict_types=1);

namespace SHServ\Integrations\GAuth\Webhook\Handlers;

use GNexus\GAuth\DTO\WebhookEvent;

final class UserHandler
{
    public function handle(WebhookEvent $event): void
    {
        $data = $event->metadata;
        $user = $data['user'] ?? [];
        $gauthUserId = $user['id'] ?? null;
        if (!$gauthUserId) {
            return;
        }

        $tb = app()->thin_builder;

        switch ($event->eventType) {
            case 'user.updated':
                $tb->update('shserv_users', [
                    'email' => $user['email'] ?? null,
                    'display_name' => $user['display_name'] ?? null,
                    'status' => $user['status'] ?? 'active',
                ], [['gauth_user_id', '=', $gauthUserId]]);
                break;

            case 'user.blocked':
                $tb->update('shserv_users', ['status' => 'blocked'], [['gauth_user_id', '=', $gauthUserId]]);
                // Clear sessions
                $localUser = $tb->select('shserv_users', ['id'], [['gauth_user_id', '=', $gauthUserId]]);
                if ($localUser) {
                    $tb->delete('shserv_sessions', [['user_id', '=', $localUser[0]['id']]]);
                }
                break;

            case 'user.unblocked':
                $tb->update('shserv_users', ['status' => 'active'], [['gauth_user_id', '=', $gauthUserId]]);
                break;

            case 'user.deleted':
                $tb->delete('shserv_users', [['gauth_user_id', '=', $gauthUserId]]);
                break;
        }
    }
}