orderByDesc('id'); if (isset($filters['active']) && $filters['active'] !== '') { $q->where('is_active', (int)$filters['active']); } if (!empty($filters['q'])) { $kw = '%' . (string)$filters['q'] . '%'; $q->where(function ($w) use ($kw) { $w->where('code', 'like', $kw) ->orWhere('title', 'like', $kw) ->orWhere('body', 'like', $kw); }); } return $q->paginate($perPage)->withQueryString(); } public function find(int $id): ?object { return DB::table('admin_sms_templates')->where('id', $id)->first(); } public function insert(array $data): int { $now = now(); return (int) DB::table('admin_sms_templates')->insertGetId([ 'code' => (string)($data['code'] ?? ''), 'title' => (string)($data['title'] ?? ''), 'body' => (string)($data['body'] ?? ''), 'description' => $data['description'] ?? null, 'is_active' => (int)($data['is_active'] ?? 1), 'created_by' => $data['created_by'] ?? null, 'created_at' => $now, 'updated_at' => $now, ]); } public function update(int $id, array $data): int { $data['updated_at'] = now(); return (int) DB::table('admin_sms_templates')->where('id', $id)->update($data); } public function listActive(int $limit = 200): array { return DB::table('admin_sms_templates') ->select(['id','code','title','body']) ->where('is_active', 1) ->orderBy('title') ->limit($limit) ->get() ->all(); } }