schema.sql 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. CREATE DATABASE IF NOT EXISTS radionica3d;
  2. USE radionica3d;
  3. -- Materials table
  4. CREATE TABLE IF NOT EXISTS materials (
  5. id INT AUTO_INCREMENT PRIMARY KEY,
  6. name_key VARCHAR(100) NOT NULL,
  7. description_key VARCHAR(255),
  8. price_per_cm3 DECIMAL(10, 2) DEFAULT 0.00,
  9. is_active BOOLEAN DEFAULT TRUE,
  10. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  11. );
  12. -- Services table
  13. CREATE TABLE IF NOT EXISTS services (
  14. id INT AUTO_INCREMENT PRIMARY KEY,
  15. name_key VARCHAR(100) NOT NULL,
  16. description_key VARCHAR(255),
  17. tech_type VARCHAR(50), -- e.g., FDM, SLA, SLS
  18. is_active BOOLEAN DEFAULT TRUE,
  19. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  20. );
  21. -- Users table
  22. CREATE TABLE IF NOT EXISTS users (
  23. id INT AUTO_INCREMENT PRIMARY KEY,
  24. email VARCHAR(150) NOT NULL UNIQUE,
  25. password_hash VARCHAR(255) NOT NULL,
  26. first_name VARCHAR(100),
  27. last_name VARCHAR(100),
  28. phone VARCHAR(20),
  29. shipping_address TEXT,
  30. role VARCHAR(20) DEFAULT 'user', -- user, admin
  31. ip_address VARCHAR(45), -- Supports IPv6
  32. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  33. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  34. );
  35. -- Password reset tokens
  36. CREATE TABLE IF NOT EXISTS password_reset_tokens (
  37. id INT AUTO_INCREMENT PRIMARY KEY,
  38. user_id INT NOT NULL,
  39. token VARCHAR(255) NOT NULL UNIQUE,
  40. expires_at TIMESTAMP NOT NULL,
  41. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  42. FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
  43. );
  44. -- Orders table
  45. CREATE TABLE IF NOT EXISTS orders (
  46. id INT AUTO_INCREMENT PRIMARY KEY,
  47. user_id INT NULL,
  48. first_name VARCHAR(100) NOT NULL,
  49. last_name VARCHAR(100) NOT NULL,
  50. phone VARCHAR(20) NOT NULL,
  51. email VARCHAR(150) NOT NULL,
  52. shipping_address TEXT NOT NULL,
  53. model_link TEXT,
  54. status VARCHAR(50) DEFAULT 'pending', -- pending, processing, shipped, completed, cancelled
  55. total_price DECIMAL(10, 2) DEFAULT NULL, -- To be filled by admin later
  56. estimated_price DECIMAL(10, 2) DEFAULT NULL,
  57. material_name VARCHAR(100) NULL, -- Factual Snapshot
  58. material_price DECIMAL(10, 4) DEFAULT NULL, -- Factual Snapshot
  59. allow_portfolio BOOLEAN DEFAULT FALSE,
  60. quantity INT DEFAULT 1,
  61. notes TEXT,
  62. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  63. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  64. FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
  65. );
  66. -- Order Files table
  67. CREATE TABLE IF NOT EXISTS order_files (
  68. id INT AUTO_INCREMENT PRIMARY KEY,
  69. order_id INT NOT NULL,
  70. filename VARCHAR(255) NOT NULL,
  71. file_path VARCHAR(512) NOT NULL,
  72. file_size INT,
  73. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  74. FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE
  75. );
  76. -- Order Photos table (for reports and portfolio)
  77. CREATE TABLE IF NOT EXISTS order_photos (
  78. id INT AUTO_INCREMENT PRIMARY KEY,
  79. order_id INT NOT NULL,
  80. file_path VARCHAR(512) NOT NULL,
  81. is_public BOOLEAN DEFAULT FALSE, -- Only if allow_portfolio on order is true
  82. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  83. FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE
  84. );
  85. -- Initial Data Migration (Optional, can be done via init script)
  86. INSERT INTO materials (name_key, description_key, price_per_cm3) VALUES
  87. ('pricing.matNames.pla', 'pricing.matDescs.pla', 0.04),
  88. ('pricing.matNames.abs', 'pricing.matDescs.abs', 0.05),
  89. ('pricing.matNames.petg', 'pricing.matDescs.petg', 0.06),
  90. ('pricing.matNames.resin', 'pricing.matDescs.resin', 0.12);
  91. INSERT INTO services (name_key, description_key, tech_type) VALUES
  92. ('services.fdm.title', 'services.fdm.description', 'FDM'),
  93. ('services.sla.title', 'services.sla.description', 'SLA');