View file delta_framework-main/core/lib/Core/Models/UserMeta.class.php

File size: 4.5Kb
<?php

    namespace Core\Models;

    use Core\CoreException;
    use Core\DataBases\DB;
    use Core\Helpers\Cache;

    class UserMeta
    {
        /**
         * Таблица с мета полями
         */
        const TABLE = DB_TABLE_PREFIX . 'user_meta';

        /**
         * @var User $user
         */
        private User $user;

        public function __construct(User $user)
        {
            $this->user = $user;
        }

        /**
         * Получение ролей пользователя
         *
         * @return array
         * @throws \Core\CoreException
         */
        public function getAllMeta(): array
        {
            $cacheId = md5('Meta_' . $this->user->getId() . '_getAllMeta');
            if (Cache::check($cacheId)) {
                $userMeta = Cache::get($cacheId);
            } else {
                /** @var  $DB DB */
                $DB = DB::getInstance();

                $res      = $DB->query('SELECT * FROM `' . self::TABLE . '` WHERE user_id=' . $this->user->getId());
                $userMeta = [];
                if (!empty($res)) {
                    foreach ($res as $meta) {
                        $userMeta[] = [
                            'id'    => $meta['id'],
                            'name'  => $meta['name'],
                            'value' => $meta['value'],
                        ];
                    }
                }
                Cache::set($cacheId, $userMeta);
            }
            return $userMeta;
        }

        /**
         * Получает указанные мета данные пользователя
         *
         * @param string $name Имя мета
         *
         * @return array|null
         * @throws \Core\CoreException
         */
        public function getMetaByName(string $name): ?array
        {
            $cacheId = md5('Meta_' . $this->user->getId() . '_getMetaByName');
            if (Cache::check($cacheId)) {
                $userMeta = Cache::get($cacheId);
            } else {
                /** @var  $DB DB */
                $DB  = DB::getInstance();
                $res = $DB->query('SELECT * FROM `' . self::TABLE . '` WHERE user_id=' . $this->user->getId() . ' AND name="' . $name . '"');
                if (!empty($res)) {
                    $userMeta = [];
                    foreach ($res as $meta) {
                        $userMeta[] = [
                            'id'    => $meta['id'],
                            'name'  => $meta['name'],
                            'value' => $meta['value'],
                        ];
                    }
                    Cache::set($cacheId, $userMeta);
                }
            }
            return $userMeta;
        }

        /**
         * Добавляет пользователю указанные мета данные
         *
         * @param string      $name  Имя мета
         * @param string|null $value Значение мета
         * @param string      $type
         *
         * @return int|null
         * @throws \Core\CoreException
         */
        public function addMeta(string $name, ?string $value = null): ?int
        {
            $cacheId = md5('Meta_' . $this->user->getId() . '_getAllMeta');
            Cache::delete($cacheId);

            /** @var  $DB DB */
            $DB = DB::getInstance();
            return $DB->addItem(self::TABLE, ['user_id' => $this->user->getId(), 'name' => $name, 'value' => $value]);
        }


        /**
         * Убирает пользователю указанные мета данные
         *
         * @param int $id ID Мета
         *
         * @return void
         * @throws \Core\CoreException
         */
        public function deleteMeta(int $id): void
        {
            $cacheId = md5('Roles_' . $this->user->getId() . '_getRoles');
            Cache::delete($cacheId);

            /** @var  $DB DB */
            $DB = DB::getInstance();
            $DB->query('DELETE FROM ' . self::TABLE . ' WHERE user_id=' . $this->user->getId() . ' AND id="' . $id . '"');
        }

        /**
         * Получить список мета данных по фильтру
         *
         * @param array $params Параметры
         *
         * @return array|null
         * @throws CoreException
         */
        public static function getListByParams(array $params = []): ?array {
            /** @var  $DB DB */
            $DB = DB::getInstance();
            return $DB->getItems(self::TABLE, $params);
        }
    }