User.php

1.81 KB
27/04/2025 13:34
PHP
<?php
class User extends Model
{
    /**
     * @var string
     */
    protected $table = 'users';

    /**
     * @param $username
     * @return mixed
     */
    public function findByUsername($username)
    {
        return $this->db->fetch(
            "SELECT * FROM {$this->table} WHERE username = ?",
            [$username]
        );
    }

    /**
     * @param $email
     * @return mixed
     */
    public function findByEmail($email)
    {
        return $this->db->fetch(
            "SELECT * FROM {$this->table} WHERE email = ?",
            [$email]
        );
    }

    /**
     * @param $data
     * @return mixed
     */
    public function create($data)
    {
        // Validate unique username and email
        if ($this->findByUsername($data['username'])) {
            throw new Exception('Username already exists');
        }

        if (isset($data['email']) && $this->findByEmail($data['email'])) {
            throw new Exception('Email already exists');
        }

        // Hash password
        $data['password'] = password_hash($data['password'], PASSWORD_DEFAULT);

        return $this->insert($data);
    }

    /**
     * @param $userId
     * @param $newPassword
     * @return mixed
     */
    public function updatePassword($userId, $newPassword)
    {
        $hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT);

        return $this->update($userId, [
            'password' => $hashedPassword
        ]);
    }

    /**
     * @return mixed
     */
    public function getAllWithLastLogin()
    {
        return $this->db->fetchAll(
            "SELECT u.id, u.username, u.full_name, u.email, u.role, u.status,
             (SELECT MAX(created_at) FROM activity_log WHERE user_id = u.id) as last_login
             FROM {$this->table} u
             ORDER BY u.username ASC"
        );
    }
}