Changeset 591278c for database.js
- Timestamp:
- 02/22/26 17:24:14 (7 months ago)
- Branches:
- finki-main, main
- Children:
- 4dff800
- Parents:
- 69f2a41
- File:
-
- 1 edited
-
database.js (modified) (43 diffs)
Legend:
- Unmodified
- Added
- Removed
-
database.js
r69f2a41 r591278c 24 24 database.run('PRAGMA foreign_keys = ON'); 25 25 26 // Helper function to ensure general category exists 26 // Helper function to ensure general category exists with ID 1 27 27 function ensureGeneralCategory(callback) { 28 database.get('SELECT category_id FROM category WHERE name = ?', ['General'], (err, row) => { 28 // First check if category with ID 1 exists and is named 'General' 29 database.get('SELECT category_id, name FROM category WHERE category_id = 1', [], (err, row) => { 29 30 if (err) { 30 31 callback(err); 31 } else if (!row) { 32 } else if (row && row.name === 'General') { 33 // Category with ID 1 already exists and is General 34 console.log('✅ General category exists with ID: 1'); 35 callback(null); 36 } else if (row && row.name !== 'General') { 37 // Category with ID 1 exists but has different name - update it 32 38 database.run( 33 ' INSERT INTO category (name, description) VALUES (?, ?)',39 'UPDATE category SET name = ?, description = ? WHERE category_id = 1', 34 40 ['General', 'General products category'], 35 41 function(err) { 36 callback(err); 42 if (err) { 43 callback(err); 44 } else { 45 console.log('✅ Updated category ID 1 to General'); 46 callback(null); 47 } 37 48 } 38 49 ); 39 50 } else { 40 callback(null); 51 // No category with ID 1 exists, create it 52 // First, check if we need to reset the autoincrement sequence 53 database.run( 54 'INSERT INTO category (category_id, name, description) VALUES (1, ?, ?)', 55 ['General', 'General products category'], 56 function(err) { 57 if (err) { 58 // If insert fails, try without specifying ID (let SQLite assign it) 59 database.run( 60 'INSERT INTO category (name, description) VALUES (?, ?)', 61 ['General', 'General products category'], 62 function(err) { 63 if (err) { 64 callback(err); 65 } else { 66 console.log('✅ Created General category with auto-assigned ID'); 67 callback(null); 68 } 69 } 70 ); 71 } else { 72 console.log('✅ Created General category with ID: 1'); 73 callback(null); 74 } 75 } 76 ); 41 77 } 42 78 }); … … 45 81 // Helper function to get the General category ID 46 82 function getGeneralCategoryId(callback) { 47 database.get('SELECT category_id FROM category WHERE name = ?', ['General'], (err, row) => { 83 // First try to get category with ID 1 that is named 'General' 84 database.get('SELECT category_id FROM category WHERE category_id = 1 AND name = ?', ['General'], (err, row) => { 48 85 if (err) { 49 86 callback(err, null); … … 51 88 callback(null, row.category_id); 52 89 } else { 53 // Create General category if it doesn't exist 54 database.run( 55 'INSERT INTO category (name, description) VALUES (?, ?)', 56 ['General', 'General products category'], 57 function(err) { 58 if (err) { 59 callback(err, null); 60 } else { 61 callback(null, this.lastID); 62 } 63 } 64 ); 90 // If not found with ID 1, try to find by name 91 database.get('SELECT category_id FROM category WHERE name = ?', ['General'], (err, row) => { 92 if (err) { 93 callback(err, null); 94 } else if (row) { 95 callback(null, row.category_id); 96 } else { 97 // Create General category if it doesn't exist 98 database.run( 99 'INSERT INTO category (name, description) VALUES (?, ?)', 100 ['General', 'General products category'], 101 function(err) { 102 if (err) { 103 callback(err, null); 104 } else { 105 const newId = this.lastID; 106 console.log(`✅ Created new General category with ID: ${newId}`); 107 callback(null, newId); 108 } 109 } 110 ); 111 } 112 }); 65 113 } 66 114 }); … … 84 132 database.all( 85 133 `SELECT r.* FROM roles r 86 JOIN user_roles ur ON r.role_id = ur.role_id87 WHERE ur.user_id = ?`,134 JOIN user_roles ur ON r.role_id = ur.role_id 135 WHERE ur.user_id = ?`, 88 136 [id], 89 137 (err, roles) => { … … 184 232 function getProducts(categoryId, searchTerm, callback) { 185 233 let query = ` 186 SELECT p.*, c.name as category_name, s.name as store_name187 FROM product p188 JOIN category c ON p.category_id = c.category_id189 JOIN store s ON p.store_id = s.store_id190 WHERE 1=1191 `;234 SELECT p.*, c.name as category_name, s.name as store_name 235 FROM product p 236 JOIN category c ON p.category_id = c.category_id 237 JOIN store s ON p.store_id = s.store_id 238 WHERE 1=1 239 `; 192 240 const params = []; 193 241 … … 214 262 database.get( 215 263 `SELECT p.*, c.name as category_name, s.name as store_name 216 FROM product p217 JOIN category c ON p.category_id = c.category_id218 JOIN store s ON p.store_id = s.store_id219 WHERE p.id = ?`,264 FROM product p 265 JOIN category c ON p.category_id = c.category_id 266 JOIN store s ON p.store_id = s.store_id 267 WHERE p.id = ?`, 220 268 [id], 221 269 (err, row) => { … … 256 304 database.get( 257 305 `SELECT p.*, c.name as category_name, s.name as store_name 258 FROM product p259 JOIN category c ON p.category_id = c.category_id260 JOIN store s ON p.store_id = s.store_id261 WHERE p.code = ?`,306 FROM product p 307 JOIN category c ON p.category_id = c.category_id 308 JOIN store s ON p.store_id = s.store_id 309 WHERE p.code = ?`, 262 310 [code], 263 311 (err, row) => { … … 317 365 database.run( 318 366 `INSERT INTO product ( 319 id, code, description, price, availability, weight, dimensions,320 production_time, category_id, store_id, created_at321 ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))`,367 id, code, description, price, availability, weight, dimensions, 368 production_time, category_id, store_id, created_at 369 ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))`, 322 370 [ 323 371 'PROD_' + Date.now().toString().slice(-8), // Generate a unique ID … … 341 389 database.run( 342 390 `INSERT INTO "change" (date_and_time, product_code, changes) 343 VALUES (datetime('now'), ?, ?)`,391 VALUES (datetime('now'), ?, ?)`, 344 392 [productData.code, 'Product created'], 345 393 function(err) { … … 353 401 database.run( 354 402 `INSERT INTO makes_change (personal_id, change_date_time, product_code) 355 VALUES (?, datetime('now'), ?)`,403 VALUES (?, datetime('now'), ?)`, 356 404 [personalId, productData.code], 357 405 function(err) { … … 367 415 database.run( 368 416 `INSERT INTO image (product_code, image_url, is_primary) 369 VALUES (?, ?, ?)`,417 VALUES (?, ?, ?)`, 370 418 [productData.code, imageUrl, index === 0 ? 1 : 0], 371 419 function(err) { … … 409 457 params.push(productData.description); 410 458 } 459 411 460 if (productData.price !== undefined) { 412 461 updates.push('price = ?'); 413 462 params.push(productData.price); 414 463 } 464 415 465 if (productData.availability !== undefined) { 416 466 updates.push('availability = ?'); 417 467 params.push(productData.availability); 418 468 } 469 419 470 if (productData.weight !== undefined) { 420 471 updates.push('weight = ?'); 421 472 params.push(productData.weight); 422 473 } 474 423 475 if (productData.dimensions !== undefined) { 424 476 updates.push('dimensions = ?'); 425 477 params.push(productData.dimensions); 426 478 } 479 427 480 if (productData.production_time !== undefined) { 428 481 updates.push('production_time = ?'); 429 482 params.push(productData.production_time); 430 483 } 484 431 485 if (productData.category_id !== undefined) { 432 486 updates.push('category_id = ?'); … … 452 506 database.run( 453 507 `INSERT INTO "change" (date_and_time, product_code, changes) 454 VALUES (datetime('now'), ?, ?)`,508 VALUES (datetime('now'), ?, ?)`, 455 509 [productData.code, changesDesc], 456 510 function(err) { … … 461 515 database.run( 462 516 `INSERT INTO makes_change (personal_id, change_date_time, product_code) 463 VALUES (?, datetime('now'), ?)`,517 VALUES (?, datetime('now'), ?)`, 464 518 [personalId, productData.code], 465 519 function(err) { … … 520 574 database.run( 521 575 `INSERT INTO "change" (date_and_time, product_code, changes) 522 VALUES (datetime('now'), ?, ?)`,576 VALUES (datetime('now'), ?, ?)`, 523 577 [productCode, 'Product deleted'], 524 578 function(err) { … … 532 586 database.run( 533 587 `INSERT INTO makes_change (personal_id, change_date_time, product_code) 534 VALUES (?, datetime('now'), ?)`,588 VALUES (?, datetime('now'), ?)`, 535 589 [personalId, productCode], 536 590 function(err) { … … 571 625 database.all( 572 626 `SELECT c1.*, c2.name as parent_name 573 FROM category c1574 LEFT JOIN category c2 ON c1.parent_category_id = c2.category_id575 ORDER BY c1.name`,627 FROM category c1 628 LEFT JOIN category c2 ON c1.parent_category_id = c2.category_id 629 ORDER BY c1.name`, 576 630 [], 577 631 (err, rows) => { … … 610 664 database.all( 611 665 `SELECT p.*, c.name as category_name 612 FROM product p613 JOIN category c ON p.category_id = c.category_id614 WHERE p.store_id = ?615 ORDER BY p.code`,666 FROM product p 667 JOIN category c ON p.category_id = c.category_id 668 WHERE p.store_id = ? 669 ORDER BY p.code`, 616 670 [storeId], 617 671 (err, rows) => { … … 628 682 database.all( 629 683 `SELECT o.*, c.first_name, c.last_name 630 FROM "order" o631 JOIN client c ON o.client_id = c.client_id632 WHERE o.store_id = ?633 ORDER BY o.order_date DESC`,684 FROM "order" o 685 JOIN client c ON o.client_id = c.client_id 686 WHERE o.store_id = ? 687 ORDER BY o.order_date DESC`, 634 688 [storeId], 635 689 (err, rows) => { … … 649 703 database.all( 650 704 `SELECT oi.*, p.description 651 FROM order_items oi652 JOIN product p ON oi.product_code = p.code653 WHERE oi.order_num = ?`,705 FROM order_items oi 706 JOIN product p ON oi.product_code = p.code 707 WHERE oi.order_num = ?`, 654 708 [order.order_num], 655 709 (err, items) => { … … 659 713 order.items = []; 660 714 } 661 662 715 completed++; 663 716 if (completed === orders.length) { … … 675 728 database.all( 676 729 `SELECT p.*, e.date_of_hire, perm.type as permission_type, perm.authorisation 677 FROM personal p678 JOIN works_in_store w ON p.id = w.personal_id679 LEFT JOIN employees e ON p.id = e.employee_id680 LEFT JOIN permissions perm ON p.id = perm.personal_id681 WHERE w.store_id = ?`,730 FROM personal p 731 JOIN works_in_store w ON p.id = w.personal_id 732 LEFT JOIN employees e ON p.id = e.employee_id 733 LEFT JOIN permissions perm ON p.id = perm.personal_id 734 WHERE w.store_id = ?`, 682 735 [storeId], 683 736 (err, rows) => { … … 690 743 database.all( 691 744 `SELECT * FROM report 692 WHERE store_id = ?693 ORDER BY generated_at DESC`,745 WHERE store_id = ? 746 ORDER BY generated_at DESC`, 694 747 [storeId], 695 748 (err, rows) => { … … 719 772 database.get( 720 773 `SELECT SUM(oi.price * oi.quantity) as total_revenue 721 FROM order_items oi722 JOIN "order" o ON oi.order_num = o.order_num723 WHERE o.store_id = ?`,774 FROM order_items oi 775 JOIN "order" o ON oi.order_num = o.order_num 776 WHERE o.store_id = ?`, 724 777 [storeId], 725 778 (err, row) => { … … 729 782 database.get( 730 783 `SELECT AVG(rating) as avg_rating 731 FROM review r732 JOIN product p ON r.product_code = p.code733 WHERE p.store_id = ?`,784 FROM review r 785 JOIN product p ON r.product_code = p.code 786 WHERE p.store_id = ?`, 734 787 [storeId], 735 788 (err, row) => { 736 789 stats.avg_rating = row && row.avg_rating ? row.avg_rating : 0; 737 738 790 callback(null, stats); 739 791 } … … 757 809 database.run( 758 810 `INSERT INTO "order" (order_num, client_id, order_date, quantity, payment_method, 759 discount, delivery_address, store_id)760 VALUES (?, ?, datetime('now'), ?, ?, ?, ?, ?)`,811 discount, delivery_address, store_id) 812 VALUES (?, ?, datetime('now'), ?, ?, ?, ?, ?)`, 761 813 [ 762 814 orderData.order_num, … … 787 839 database.run( 788 840 `INSERT INTO order_items (order_num, product_code, quantity, price) 789 VALUES (?, ?, ?, ?)`,841 VALUES (?, ?, ?, ?)`, 790 842 [orderData.order_num, item.product_code, item.quantity, item.price], 791 843 function(err) { … … 817 869 database.all( 818 870 `SELECT o.*, s.name as store_name 819 FROM "order" o820 JOIN store s ON o.store_id = s.store_id821 WHERE o.client_id = ?822 ORDER BY o.order_date DESC`,871 FROM "order" o 872 JOIN store s ON o.store_id = s.store_id 873 WHERE o.client_id = ? 874 ORDER BY o.order_date DESC`, 823 875 [clientId], 824 876 (err, rows) => { … … 838 890 database.all( 839 891 `SELECT oi.*, p.description 840 FROM order_items oi841 JOIN product p ON oi.product_code = p.code842 WHERE oi.order_num = ?`,892 FROM order_items oi 893 JOIN product p ON oi.product_code = p.code 894 WHERE oi.order_num = ?`, 843 895 [order.order_num], 844 896 (err, items) => { … … 848 900 order.items = []; 849 901 } 850 851 902 completed++; 852 903 if (completed === orders.length) { … … 864 915 database.all( 865 916 `SELECT o.*, c.first_name, c.last_name, s.name as store_name 866 FROM "order" o867 JOIN client c ON o.client_id = c.client_id868 JOIN store s ON o.store_id = s.store_id869 ORDER BY o.order_date DESC`,917 FROM "order" o 918 JOIN client c ON o.client_id = c.client_id 919 JOIN store s ON o.store_id = s.store_id 920 ORDER BY o.order_date DESC`, 870 921 [], 871 922 (err, rows) => { … … 879 930 database.run( 880 931 `INSERT INTO review (review_id, client_id, product_code, rating, comment, review_date) 881 VALUES (?, ?, ?, ?, ?, datetime('now'))`,932 VALUES (?, ?, ?, ?, ?, datetime('now'))`, 882 933 [ 883 934 'REV' + Date.now().toString().slice(-8), … … 901 952 database.run( 902 953 `INSERT INTO request (request_num, date_and_time, problem, client_id, store_id) 903 VALUES (?, ?, ?, ?, ?)`,954 VALUES (?, ?, ?, ?, ?)`, 904 955 [ 905 956 requestData.request_num, … … 923 974 database.run( 924 975 `INSERT INTO refund (refund_id, order_num, amount, reason, request_date) 925 VALUES (?, ?, ?, ?, datetime('now'))`,976 VALUES (?, ?, ?, ?, datetime('now'))`, 926 977 [ 927 978 refundData.refund_id, … … 951 1002 database.all( 952 1003 `SELECT o.*, c.first_name, c.last_name 953 FROM "order" o954 JOIN client c ON o.client_id = c.client_id955 WHERE o.store_id = ? AND o.status = 'pending'956 ORDER BY o.order_date ASC`,1004 FROM "order" o 1005 JOIN client c ON o.client_id = c.client_id 1006 WHERE o.store_id = ? AND o.status = 'pending' 1007 ORDER BY o.order_date ASC`, 957 1008 [storeId], 958 1009 (err, rows) => { … … 964 1015 database.all( 965 1016 `SELECT r.*, c.first_name, c.last_name 966 FROM request r967 JOIN client c ON r.client_id = c.client_id968 WHERE r.store_id = ? AND r.status = 'pending'969 ORDER BY r.date_and_time ASC`,1017 FROM request r 1018 JOIN client c ON r.client_id = c.client_id 1019 WHERE r.store_id = ? AND r.status = 'pending' 1020 ORDER BY r.date_and_time ASC`, 970 1021 [storeId], 971 1022 (err, rows) => { … … 977 1028 database.all( 978 1029 `SELECT rf.*, o.client_id, c.first_name, c.last_name 979 FROM refund rf980 JOIN "order" o ON rf.order_num = o.order_num981 JOIN client c ON o.client_id = c.client_id982 WHERE o.store_id = ? AND rf.status = 'pending'983 ORDER BY rf.request_date ASC`,1030 FROM refund rf 1031 JOIN "order" o ON rf.order_num = o.order_num 1032 JOIN client c ON o.client_id = c.client_id 1033 WHERE o.store_id = ? AND rf.status = 'pending' 1034 ORDER BY rf.request_date ASC`, 984 1035 [storeId], 985 1036 (err, rows) => { … … 1010 1061 database.get( 1011 1062 `SELECT SUM(oi.price * oi.quantity) as total_spent 1012 FROM order_items oi1013 JOIN "order" o ON oi.order_num = o.order_num1014 WHERE o.client_id = ?`,1063 FROM order_items oi 1064 JOIN "order" o ON oi.order_num = o.order_num 1065 WHERE o.client_id = ?`, 1015 1066 [clientId], 1016 1067 (err, row) => { … … 1030 1081 (err, row) => { 1031 1082 stats.delivered_orders = row ? row.delivered_orders : 0; 1032 1033 1083 callback(null, stats); 1034 1084 } … … 1049 1099 database.all( 1050 1100 `SELECT client_id as id, first_name, last_name, email, 'client' as user_type 1051 FROM client1052 ORDER BY client_id`,1101 FROM client 1102 ORDER BY client_id`, 1053 1103 [], 1054 1104 (err, rows) => { … … 1060 1110 database.all( 1061 1111 `SELECT p.id, p.first_name, p.last_name, p.email, 1062 CASE WHEN b.boss_id IS NOT NULL THEN 'store_owner'1063 WHEN e.employee_id IS NOT NULL THEN 'store_employee'1064 ELSE 'personal' END as user_type1065 FROM personal p1066 LEFT JOIN boss b ON p.id = b.boss_id1067 LEFT JOIN employees e ON p.id = e.employee_id1068 ORDER BY p.id`,1112 CASE WHEN b.boss_id IS NOT NULL THEN 'store_owner' 1113 WHEN e.employee_id IS NOT NULL THEN 'store_employee' 1114 ELSE 'personal' END as user_type 1115 FROM personal p 1116 LEFT JOIN boss b ON p.id = b.boss_id 1117 LEFT JOIN employees e ON p.id = e.employee_id 1118 ORDER BY p.id`, 1069 1119 [], 1070 1120 (err, rows) => { … … 1076 1126 database.all( 1077 1127 `SELECT id, username, email, user_type 1078 FROM users1079 ORDER BY id`,1128 FROM users 1129 ORDER BY id`, 1080 1130 [], 1081 1131 (err, rows) => { … … 1096 1146 database.run( 1097 1147 `INSERT INTO audit_log (user_id, action, resource_type, resource_id, details, ip_address) 1098 VALUES (?, ?, ?, ?, ?, ?)`,1148 VALUES (?, ?, ?, ?, ?, ?)`, 1099 1149 [userId, action, resourceType, resourceId, details, ipAddress], 1100 1150 (err) => {
Note:
See TracChangeset
for help on using the changeset viewer.
