| 180 | = '''4. Индекси на {{{orders}}} табела'''\\ |
| 181 | Поради филтрирањата на admin панелот кои ги правиме и делот {{{/admin/reports}}} \\ |
| 182 | кои се филтрираат по order_date (неделно, месечно, годишно) преку следниот ред : |
| 183 | {{{#!sql |
| 184 | // --- Админ API: Извештаи за нарачки --- |
| 185 | app.get('/admin/reports', authenticateToken, authorizeAdmin, async (req, res) => { |
| 186 | const filter = req.query.filter; // weekly, monthly, yearly |
| 187 | let query; |
| 188 | |
| 189 | if (filter === 'weekly') { |
| 190 | query = ` |
| 191 | SELECT COUNT(*) AS total_orders, COALESCE(SUM(total_price), 0) AS total_revenue |
| 192 | FROM orders |
| 193 | WHERE order_date >= NOW() - INTERVAL '7 days' |
| 194 | `; |
| 195 | } else if (filter === 'monthly') { |
| 196 | query = ` |
| 197 | SELECT COUNT(*) AS total_orders, COALESCE(SUM(total_price), 0) AS total_revenue |
| 198 | FROM orders |
| 199 | WHERE order_date >= NOW() - INTERVAL '1 month' |
| 200 | `; |
| 201 | } else if (filter === 'yearly') { |
| 202 | query = ` |
| 203 | SELECT COUNT(*) AS total_orders, COALESCE(SUM(total_price), 0) AS total_revenue |
| 204 | FROM orders |
| 205 | WHERE order_date >= NOW() - INTERVAL '1 year' |
| 206 | `; |
| 207 | } else { |
| 208 | return res.status(400).json({ error: 'Невалиден филтер' }); |
| 209 | } |
| 210 | |
| 211 | try { |
| 212 | const result = await db.pool.query(query); |
| 213 | res.json(result.rows[0]); |
| 214 | } catch (err) { |
| 215 | console.error(err); |
| 216 | res.status(500).json({ error: 'Грешка при вчитување на извештај' }); |
| 217 | } |
| 218 | }); |
| 219 | }}} |
| 220 | \\ |
| 221 | Го додаваме следниов индекс, кој го забрзува времето за филтирањето и посебно ако направиме посложени филтрирања :\\ |
| 222 | {{{#!sql |
| 223 | CREATE INDEX idx_orders_order_date ON orders(order_date); |
| 224 | }}} |
| 225 | \\ |
| 226 | = '''5. Индекси на {{{contains}}} табела'''\\ |
| 227 | Овде често користиме {{{id_order}}} и {{{id_stock}}} за поврзување со '''orders''' и '''stock''' |
| 228 | Затоа ке креираме индекс : |
| 229 | {{{#!sql |
| 230 | CREATE INDEX idx_contains_order ON contains(id_order); |
| 231 | CREATE INDEX idx_contains_stock ON contains(id_stock); |
| 232 | }}} |
| 233 | \\ |