create-butterfly-app-v2 2.0.2 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +2 -2
- package/package.json +1 -1
- package/templates/base/backend/db/schema.sql +19 -0
- package/templates/types/hotel/backend/db/schema.sql +59 -0
- package/templates/types/hotel/frontend/src/pages/Dashboard.jsx +1 -1
- package/templates/types/parking/backend/db/schema.sql +60 -0
- package/templates/types/parking/frontend/src/pages/Dashboard.jsx +1 -1
- package/templates/types/student/backend/db/schema.sql +71 -0
- package/templates/types/student/frontend/src/pages/Dashboard.jsx +1 -1
package/cli.js
CHANGED
|
@@ -178,8 +178,8 @@ async function main() {
|
|
|
178
178
|
|
|
179
179
|
${c("bold", c("magenta", " 🦋 Goodluck with your " + projectType.name + " project! 🦋"))}
|
|
180
180
|
|
|
181
|
-
${c("dim", "(Tables
|
|
182
|
-
${c("dim", "
|
|
181
|
+
${c("dim", "(Tables auto-create on server start - no manual SQL needed!)")}
|
|
182
|
+
${c("dim", "SQL schema file: backend/db/schema.sql (for reference / manual setup)")}
|
|
183
183
|
|
|
184
184
|
`);
|
|
185
185
|
rl.close();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-butterfly-app-v2",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Full-stack boilerplate: Node.js + React + Tailwind + MySQL. Choose from Hotel, Parking, or Student Management projects with auth + full CRUD.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"create-butterfly-app-v2": "cli.js"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-- =====================================================
|
|
2
|
+
-- Database Schema for __PROJECT_NAME__
|
|
3
|
+
-- Project Type: __PROJECT_TYPE__
|
|
4
|
+
-- =====================================================
|
|
5
|
+
-- Run this in phpMyAdmin (SQL tab) after creating the database
|
|
6
|
+
-- Or the server will auto-create these tables on startup
|
|
7
|
+
-- =====================================================
|
|
8
|
+
|
|
9
|
+
CREATE DATABASE IF NOT EXISTS __PROJECT_NAME__;
|
|
10
|
+
USE __PROJECT_NAME__;
|
|
11
|
+
|
|
12
|
+
-- Users table (for authentication)
|
|
13
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
14
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
15
|
+
name VARCHAR(100) NOT NULL,
|
|
16
|
+
email VARCHAR(100) NOT NULL UNIQUE,
|
|
17
|
+
password VARCHAR(255) DEFAULT '',
|
|
18
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
19
|
+
);
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
-- =====================================================
|
|
2
|
+
-- Full Database Schema: Hotel Reservation System
|
|
3
|
+
-- =====================================================
|
|
4
|
+
-- Run this in phpMyAdmin after creating your database
|
|
5
|
+
-- =====================================================
|
|
6
|
+
|
|
7
|
+
-- 1. Users (authentication)
|
|
8
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
9
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
10
|
+
name VARCHAR(100) NOT NULL,
|
|
11
|
+
email VARCHAR(100) NOT NULL UNIQUE,
|
|
12
|
+
password VARCHAR(255) DEFAULT '',
|
|
13
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- 2. Rooms
|
|
17
|
+
CREATE TABLE IF NOT EXISTS rooms (
|
|
18
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
19
|
+
number VARCHAR(10) NOT NULL UNIQUE,
|
|
20
|
+
type VARCHAR(50) NOT NULL DEFAULT 'standard',
|
|
21
|
+
price DECIMAL(10,2) NOT NULL DEFAULT 0,
|
|
22
|
+
capacity INT NOT NULL DEFAULT 2,
|
|
23
|
+
status VARCHAR(20) NOT NULL DEFAULT 'available',
|
|
24
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
-- 3. Reservations
|
|
28
|
+
CREATE TABLE IF NOT EXISTS reservations (
|
|
29
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
30
|
+
guest_name VARCHAR(100) NOT NULL,
|
|
31
|
+
guest_email VARCHAR(100) NOT NULL,
|
|
32
|
+
guest_phone VARCHAR(20) DEFAULT '',
|
|
33
|
+
room_id INT NOT NULL,
|
|
34
|
+
check_in DATE NOT NULL,
|
|
35
|
+
check_out DATE NOT NULL,
|
|
36
|
+
status VARCHAR(20) NOT NULL DEFAULT 'confirmed',
|
|
37
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
38
|
+
FOREIGN KEY (room_id) REFERENCES rooms(id) ON DELETE CASCADE
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
-- =====================================================
|
|
42
|
+
-- Sample Data (optional - run if tables are empty)
|
|
43
|
+
-- =====================================================
|
|
44
|
+
|
|
45
|
+
INSERT INTO rooms (number, type, price, capacity) VALUES
|
|
46
|
+
('101', 'standard', 80, 2),
|
|
47
|
+
('102', 'standard', 80, 2),
|
|
48
|
+
('103', 'standard', 80, 2),
|
|
49
|
+
('201', 'deluxe', 150, 3),
|
|
50
|
+
('202', 'deluxe', 150, 3),
|
|
51
|
+
('203', 'deluxe', 150, 3),
|
|
52
|
+
('301', 'suite', 250, 4),
|
|
53
|
+
('302', 'suite', 250, 4)
|
|
54
|
+
ON DUPLICATE KEY UPDATE number=number;
|
|
55
|
+
|
|
56
|
+
INSERT INTO reservations (guest_name, guest_email, guest_phone, room_id, check_in, check_out, status) VALUES
|
|
57
|
+
('John Doe', 'john@email.com', '0788123456', 1, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 2 DAY), 'confirmed'),
|
|
58
|
+
('Jane Smith', 'jane@email.com', '0788987654', 3, DATE_ADD(CURDATE(), INTERVAL 1 DAY), DATE_ADD(CURDATE(), INTERVAL 4 DAY), 'confirmed')
|
|
59
|
+
ON DUPLICATE KEY UPDATE guest_name=guest_name;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState, useEffect } from "react";
|
|
2
|
-
import { useAuth } from "
|
|
2
|
+
import { useAuth } from "../context/AuthContext";
|
|
3
3
|
|
|
4
4
|
const token = () => localStorage.getItem("token");
|
|
5
5
|
const headers = () => ({ "Content-Type": "application/json", Authorization: `Bearer ${token()}` });
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
-- =====================================================
|
|
2
|
+
-- Full Database Schema: Car Parking System
|
|
3
|
+
-- =====================================================
|
|
4
|
+
-- Run this in phpMyAdmin after creating your database
|
|
5
|
+
-- =====================================================
|
|
6
|
+
|
|
7
|
+
-- 1. Users (authentication)
|
|
8
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
9
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
10
|
+
name VARCHAR(100) NOT NULL,
|
|
11
|
+
email VARCHAR(100) NOT NULL UNIQUE,
|
|
12
|
+
password VARCHAR(255) DEFAULT '',
|
|
13
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- 2. Parking Slots
|
|
17
|
+
CREATE TABLE IF NOT EXISTS slots (
|
|
18
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
19
|
+
number VARCHAR(10) NOT NULL UNIQUE,
|
|
20
|
+
location VARCHAR(50) DEFAULT '',
|
|
21
|
+
type VARCHAR(30) NOT NULL DEFAULT 'standard',
|
|
22
|
+
price_hour DECIMAL(10,2) NOT NULL DEFAULT 5,
|
|
23
|
+
status VARCHAR(20) NOT NULL DEFAULT 'available',
|
|
24
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
-- 3. Bookings
|
|
28
|
+
CREATE TABLE IF NOT EXISTS bookings (
|
|
29
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
30
|
+
customer_name VARCHAR(100) NOT NULL,
|
|
31
|
+
customer_vehicle VARCHAR(100) NOT NULL,
|
|
32
|
+
customer_phone VARCHAR(20) DEFAULT '',
|
|
33
|
+
slot_id INT NOT NULL,
|
|
34
|
+
start_time DATETIME NOT NULL,
|
|
35
|
+
end_time DATETIME DEFAULT NULL,
|
|
36
|
+
total_price DECIMAL(10,2) DEFAULT 0,
|
|
37
|
+
status VARCHAR(20) NOT NULL DEFAULT 'active',
|
|
38
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
39
|
+
FOREIGN KEY (slot_id) REFERENCES slots(id) ON DELETE CASCADE
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
-- =====================================================
|
|
43
|
+
-- Sample Data (optional - run if tables are empty)
|
|
44
|
+
-- =====================================================
|
|
45
|
+
|
|
46
|
+
INSERT INTO slots (number, location, type, price_hour) VALUES
|
|
47
|
+
('A1', 'Floor A - Section 1', 'standard', 5),
|
|
48
|
+
('A2', 'Floor A - Section 1', 'standard', 5),
|
|
49
|
+
('A3', 'Floor A - Section 1', 'standard', 5),
|
|
50
|
+
('A4', 'Floor A - Section 2', 'standard', 5),
|
|
51
|
+
('B1', 'Floor B - VIP Area', 'vip', 10),
|
|
52
|
+
('B2', 'Floor B - VIP Area', 'vip', 10),
|
|
53
|
+
('C1', 'Ground Floor - Truck Bay', 'truck', 15),
|
|
54
|
+
('C2', 'Ground Floor - Truck Bay', 'truck', 15)
|
|
55
|
+
ON DUPLICATE KEY UPDATE number=number;
|
|
56
|
+
|
|
57
|
+
INSERT INTO bookings (customer_name, customer_vehicle, customer_phone, slot_id, start_time, end_time, total_price, status) VALUES
|
|
58
|
+
('Alice Munyana', 'RAB123A', '0788111222', 1, NOW(), DATE_ADD(NOW(), INTERVAL 3 HOUR), 15, 'active'),
|
|
59
|
+
('Bob Kayumba', 'RAB456B', '0788333444', 5, NOW(), DATE_ADD(NOW(), INTERVAL 2 HOUR), 20, 'active')
|
|
60
|
+
ON DUPLICATE KEY UPDATE customer_name=customer_name;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState, useEffect } from "react";
|
|
2
|
-
import { useAuth } from "
|
|
2
|
+
import { useAuth } from "../context/AuthContext";
|
|
3
3
|
|
|
4
4
|
const token = () => localStorage.getItem("token");
|
|
5
5
|
const headers = () => ({ "Content-Type": "application/json", Authorization: `Bearer ${token()}` });
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
-- =====================================================
|
|
2
|
+
-- Full Database Schema: Student Management System
|
|
3
|
+
-- =====================================================
|
|
4
|
+
-- Run this in phpMyAdmin after creating your database
|
|
5
|
+
-- =====================================================
|
|
6
|
+
|
|
7
|
+
-- 1. Users (authentication)
|
|
8
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
9
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
10
|
+
name VARCHAR(100) NOT NULL,
|
|
11
|
+
email VARCHAR(100) NOT NULL UNIQUE,
|
|
12
|
+
password VARCHAR(255) DEFAULT '',
|
|
13
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- 2. Students
|
|
17
|
+
CREATE TABLE IF NOT EXISTS students (
|
|
18
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
19
|
+
name VARCHAR(100) NOT NULL,
|
|
20
|
+
email VARCHAR(100) NOT NULL UNIQUE,
|
|
21
|
+
phone VARCHAR(20) DEFAULT '',
|
|
22
|
+
address TEXT,
|
|
23
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
-- 3. Courses
|
|
27
|
+
CREATE TABLE IF NOT EXISTS courses (
|
|
28
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
29
|
+
name VARCHAR(100) NOT NULL,
|
|
30
|
+
code VARCHAR(20) NOT NULL UNIQUE,
|
|
31
|
+
credits INT NOT NULL DEFAULT 3,
|
|
32
|
+
description TEXT,
|
|
33
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
-- 4. Enrollments (junction table)
|
|
37
|
+
CREATE TABLE IF NOT EXISTS enrollments (
|
|
38
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
39
|
+
student_id INT NOT NULL,
|
|
40
|
+
course_id INT NOT NULL,
|
|
41
|
+
grade VARCHAR(2) DEFAULT '',
|
|
42
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
43
|
+
FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE,
|
|
44
|
+
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE,
|
|
45
|
+
UNIQUE KEY unique_enroll (student_id, course_id)
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
-- =====================================================
|
|
49
|
+
-- Sample Data (optional - run if tables are empty)
|
|
50
|
+
-- =====================================================
|
|
51
|
+
|
|
52
|
+
INSERT INTO courses (name, code, credits, description) VALUES
|
|
53
|
+
('Mathematics', 'MATH101', 4, 'Introduction to calculus and algebra'),
|
|
54
|
+
('Physics', 'PHY101', 3, 'Fundamentals of mechanics and thermodynamics'),
|
|
55
|
+
('Computer Science', 'CS101', 4, 'Programming fundamentals and data structures'),
|
|
56
|
+
('English Literature', 'ENG101', 2, 'Analysis of prose, poetry, and drama'),
|
|
57
|
+
('Database Systems', 'DB201', 3, 'Relational databases, SQL, and normalization'),
|
|
58
|
+
('Web Development', 'WEB301', 3, 'Full-stack development with modern frameworks')
|
|
59
|
+
ON DUPLICATE KEY UPDATE code=code;
|
|
60
|
+
|
|
61
|
+
INSERT INTO students (name, email, phone, address) VALUES
|
|
62
|
+
('Kevine Ishimwe', 'kevine@email.com', '0788000111', 'Kigali, Rwanda'),
|
|
63
|
+
('Patrick Mugisha', 'patrick@email.com', '0788000222', 'Butare, Rwanda'),
|
|
64
|
+
('Diane Uwimana', 'diane@email.com', '0788000333', 'Musanze, Rwanda')
|
|
65
|
+
ON DUPLICATE KEY UPDATE email=email;
|
|
66
|
+
|
|
67
|
+
INSERT INTO enrollments (student_id, course_id) VALUES
|
|
68
|
+
(1, 1), (1, 3), (1, 6),
|
|
69
|
+
(2, 2), (2, 4), (2, 5),
|
|
70
|
+
(3, 1), (3, 3), (3, 5)
|
|
71
|
+
ON DUPLICATE KEY UPDATE student_id=student_id;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState, useEffect } from "react";
|
|
2
|
-
import { useAuth } from "
|
|
2
|
+
import { useAuth } from "../context/AuthContext";
|
|
3
3
|
|
|
4
4
|
const token = () => localStorage.getItem("token");
|
|
5
5
|
const headers = () => ({ "Content-Type": "application/json", Authorization: `Bearer ${token()}` });
|