From b7a6061fff177c0029f7118a30f858f23c3baaf0 Mon Sep 17 00:00:00 2001 From: Indigo Tang Date: Sun, 6 Jul 2025 12:28:55 +0000 Subject: [PATCH] user management page still not list registered users, for example admin@ --- src/lib/db.ts | 49 ++++++++++++++++++++++++------------------------ toyshare.db-shm | Bin 32768 -> 32768 bytes toyshare.db-wal | Bin 28872 -> 49472 bytes 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/lib/db.ts b/src/lib/db.ts index 0540606..388769c 100644 --- a/src/lib/db.ts +++ b/src/lib/db.ts @@ -15,18 +15,11 @@ db.pragma('journal_mode = WAL'); db.pragma('foreign_keys = ON'); function initDb() { - // Check if tables exist - const tableCheck = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name = 'users'").get(); + console.log("Initializing database schema if needed..."); - if (tableCheck) { - return; - } - - console.log("Initializing database..."); - - // Create Tables - const createUsersTable = ` - CREATE TABLE users ( + // Create Users Table if it doesn't exist + db.exec(` + CREATE TABLE IF NOT EXISTS users ( id TEXT PRIMARY KEY, name TEXT NOT NULL, email TEXT NOT NULL UNIQUE, @@ -34,9 +27,11 @@ function initDb() { avatarUrl TEXT, bio TEXT ); - `; - const createToysTable = ` - CREATE TABLE toys ( + `); + + // Create Toys Table if it doesn't exist + db.exec(` + CREATE TABLE IF NOT EXISTS toys ( id TEXT PRIMARY KEY, name TEXT NOT NULL, description TEXT NOT NULL, @@ -48,15 +43,21 @@ function initDb() { location TEXT, FOREIGN KEY (ownerId) REFERENCES users(id) ON DELETE CASCADE ); - `; + `); + + console.log("Seeding initial data if missing..."); - db.exec(createUsersTable); - db.exec(createToysTable); - console.log("Tables created."); - - // Seed Data - const insertUser = db.prepare('INSERT INTO users (id, name, email, role, avatarUrl, bio) VALUES (@id, @name, @email, @role, @avatarUrl, @bio)'); - const insertToy = db.prepare('INSERT INTO toys (id, name, description, category, images, unavailableRanges, ownerId, pricePerDay, location) VALUES (@id, @name, @description, @category, @images, @unavailableRanges, @ownerId, @pricePerDay, @location)'); + // Use INSERT OR IGNORE to only add data if the primary key doesn't exist. + // This prevents errors on subsequent runs and adds missing users/toys without overwriting. + const insertUser = db.prepare(` + INSERT OR IGNORE INTO users (id, name, email, role, avatarUrl, bio) + VALUES (@id, @name, @email, @role, @avatarUrl, @bio) + `); + + const insertToy = db.prepare(` + INSERT OR IGNORE INTO toys (id, name, description, category, images, unavailableRanges, ownerId, pricePerDay, location) + VALUES (@id, @name, @description, @category, @images, @unavailableRanges, @ownerId, @pricePerDay, @location) + `); const insertManyUsers = db.transaction((users: User[]) => { for (const user of users) { @@ -64,7 +65,7 @@ function initDb() { id: user.id, name: user.name, email: user.email, - role: user.role, + role: user.role ?? 'User', avatarUrl: user.avatarUrl ?? null, bio: user.bio ?? null }); @@ -84,7 +85,7 @@ function initDb() { insertManyUsers(rawUsers); insertManyToys(rawToys); - console.log("Database seeded with users and toys."); + console.log("Database initialization and seeding complete."); } // Initialize and export db diff --git a/toyshare.db-shm b/toyshare.db-shm index f0197b0e52470cd8fcd1f581f9d1acf18b52a000..db179203a257b694bc26a9c1944e419574d65803 100644 GIT binary patch delta 193 zcmZo@U}|V!s+V}A%K!o_K+MR%Aix8p*?_p!@~l>g>64A2FZZsvRL#-cJ2S*=slcU| zq^buR1qL8<|04mY@WgsmP9`9m8Hian&J1)~{LhJ*kz?b+-%QNR44hz^g@Fr9voUak MX?6yljSD&T022E;UH||9 delta 174 zcmZo@U}|V!s+V}A%K!pQK+MR%Aixf!*+BSpOse_Oopzxw_pZ29&Cx91<7pA&qO+M) z^+2P*0A%ieBmfnjSg*Qqhnv&H3nGjEIWccM^oNO&dE>#qOpGiba^seNOpNRs4|3}P E068Q$m;e9( diff --git a/toyshare.db-wal b/toyshare.db-wal index 53cd19fdae6be5acb5315710405a9088dc58927e..39b95610c4b7fd98ead7d579c642ae6a510a5673 100644 GIT binary patch literal 49472 zcmeI5ZEPGz8OQI%cV|1cmlQ=;R3XNW(k8tZ=k9EW2GaC=zN99OllY}+nin(Pox7WO zZ}*tpjeSG`&Q0MXUy9&kRYfY~TZL4W4@d}9!Iuhz1QJ3OYCuI5Mg2lbrBsM#W^bK4 zV=GpwN+fz#y1m_JUiO*a%&v2j|1*2&+wt{K=GLR3(C0#OTYUfLKmPsI-WRXk_@MUY z503r?OyN%Z)#mqKe&MyuZ|2X;aF>yaE$Y-I1t=Yfgq|S;@2M;M zOorFbyL8!Pp2LKrc9GItxwud!3&qKqGEpY7zn`d$8)TvU`~o>WH+`}=caEGWpG&us zELvxN;_RsfGP^i46Qr;@PI*zgS>h=C-OvUGczy zXgql&84hvFU~A4dO!&FJL_OD5=S#}(rM&v;IS{#b)||>31){xes`7XK#(Y8j!tMWP zhd(|(D2@J9f;_?v2_OL^fCP{L5tF9lB=_tIzqD7y zw7YiGk)K#sM7y+nx`1|rIlABtm)ll%SbGqtu2Yv)ZPDC1mDg#NIVvqE;8_sy&P^GJ zKS!<2srIVH#B@9KesgqvLvWp)W@3sq2?XwMMBSSci$f;Q}Rh}usLI9=We5p89_M`5fh{cm%*|S~Ly=1$TllwTX zFVMXd!T+u=5R*4ppcnY$wV(X5KQlRw>kB-1j~(Vi6>O1dsp{Kmter2_OL^fCP{L5S1J;T;$ysQR@ixkpM<&+=-Gi8QHr!u1cR<1&#Y^WYS>szikrxHWiTJhz+%7mQHj3bR~Kur$$a zPk``0O{irMw$?Chp#=I_aj+w+t5GFhkrEsvW96Uugft)E;dQH!iHQsHZayGO}6 z=A`AhPOae$0QIhx*cE7(<+#H0{g-&s0LeDtOH$bIn-tAeXacFxMxzNiNR62d$YM** zWZ5$eiFes=MRvU}+?&i~k{8!kWQ%e|6G9-!SsPviC`_nV8arF52IID+o8zJot?cdrzwZCeA(tfMGb?@6Bb07gEfCP{L5qi1e00|%gB!C2v01`j~NB{{S z0VMEn64(+yi1+0}Lyf^lcYV}y0JIhQ;f5~O9-XOwmv~|FgfNobR zJ3%PRoGgKbyepssCKad(#GtCmif1Y9sZ;@9;Vy@K?W>(1*;3Uy0n+8MPU*7mR0^CL zxp@Af{0C?uev-MMEG}`k*)n3gv?HzhW2?}TedCi1WUsK`I4Oc+88oOmIqq?niXthD zjuD4{6BMsON>!z#2{#xumD73+l*WQtpkAfIRifw`H*}wv@oG za<>Ll92+F9I(49GDGTQMijzI*m)L0=Pk@Lv<$D@5GT(m|6twm#DGA0_)_3>p(w=Ia z1!Z(HTo^lTdQOcjFvDn)Nk#>kp`yx)Lq?^#Tt0Ri- z6x2L&cqD%?Kb|>wD3hNUNslng*kmr`My{zI&qe29sd%ee;mkD1aggXU%US@186z`rHA{Bjf?Sr~En0*bp1-C%^rOGPzUp!%UsfGirO>BoC47ca z>TA5spqh^1OHNZ5B5nrM-U8&-h8+Da7=V#n`+h8QC|j0tcwqy=9Yazhz;_ldLVLW_eQ> z5IrER5E;O$R-4pBD*GI(aouD)rZiVdfwwyb{5I_L&5n_cvw@Lv&JmjQcz6qUEB@o79z}+}6A6*iteALR@k`z+e^4$@> z(_2%8R=~AWzPmdH>t|1uOxt0p#m4qnb6eimxx&b`^fpg|txM$d!IL1i#ghR3uyw6F z_~hG9z4ZFu#$Blwh->eJv^&~u?L+N-h$MLD?jJ!sLIOwt2_OL^fCP{L5