| | 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 | \\ |