Browse Source

Neue Medien brauchen unique Namen

hmt 4 năm trước cách đây
mục cha
commit
b97674651e

+ 2 - 2
.github/workflows/build.yml

@@ -33,7 +33,7 @@ jobs:
         run: npm install
       - name: set version
         run: |
-          echo "export const VERSION = { gitHash: '${{ github.sha }}', buildVersion: '1.0.${{ github.run_number }}', production: true }" > src/version.js
+          echo "export const VERSION = { gitHash: '${{ github.sha }}', buildVersion: '1.1.${{ github.run_number }}', production: true }" > src/version.js
       - name: show version
         run: cat src/version.js
       - name: Build
@@ -51,5 +51,5 @@ jobs:
         with:
           artifacts: "./dist/bangbib.msi,./dist/bangbib.dmg,./dist/bangbib.AppImage,./dist/bangbib.snap,./dist/bangbib.rpm,./dist/bangbib.deb"
           allowUpdates: true
-          tag: v1.0.${{ github.run_number }}
+          tag: v1.1.${{ github.run_number }}
           token: ${{ secrets.GITHUB_TOKEN }}

+ 1 - 1
electron-builder.yml

@@ -1,7 +1,7 @@
 appId: im.hmt.bangbib
 productName: bangbib
 artifactName: bangbib.${ext}
-buildVersion: 1.0.${env.GITHUB_RUN_NUMBER}
+buildVersion: 1.1.${env.GITHUB_RUN_NUMBER}
 copyright: Copyright ${author}
 
 extraMetadata:

+ 6 - 3
src/components/Einstellungen.svelte

@@ -23,7 +23,7 @@
       notifier.fertig("Nutzer hinzugefügt");
     } catch (e) {
       console.log(e);
-      notifier.fehler("Fehler beim Hinzufügen des Nutzers:", e.message);
+      notifier.fehler(`Fehler beim Hinzufügen des Nutzers: ${e.message}`);
     }
   };
   const update_schueler = async () => {
@@ -59,7 +59,7 @@
       const res = $db.prepare(`SELECT COUNT(*) as anzahl FROM schueler`).get()
       notifier.fertig(`${schueler_values.length || 0} Datensätze verarbeitet; ${res.anzahl} Nutzer in der Datenbank.`);
     } catch (e) {
-      notifier.fehler("Fehler beim Schülerimport:", e.message);
+      notifier.fehler(`Fehler beim Schülerimport: ${e.message}`);
       console.log(e);
     }
     warten = false;
@@ -77,7 +77,10 @@
       datensatz_medien = "";
       notifier.fertig("Medientitel importiert");
     } catch (e) {
-      notifier.fehler("Fehler beim Medienimport:", e.message);
+      const msg = e.code === "SQLITE_CONSTRAINT_UNIQUE"
+        ? "Mindestens ein Titel ist bereits vorhanden"
+        : e.message
+      notifier.fehler(`Fehler beim Medienimport: ${msg}`);
       console.log(e);
     }
   };

+ 15 - 1
src/components/Scanner.svelte

@@ -15,6 +15,7 @@
     barcode_manuell,
     barcode_input,
     registrieren,
+    fehlermeldung,
     lastKeyTime = Date.now(),
     medium,
     neuer_titel = "",
@@ -93,6 +94,7 @@
 
   function neu_anlegen() {
     if (!neuer_titel.length) return
+    try {
     const res = $db
       .prepare(
         `
@@ -101,7 +103,14 @@
       )
       .run(neuer_titel.trim());
       neuer_titel = ''
+      fehlermeldung = null
       zuordnen(res.lastInsertRowid)
+    } catch (e) {
+      console.log("Fehler beim Anlegen eines neuen Titels: ", e)
+      if (e.code = "SQLITE_CONSTRAINT_UNIQUE") {
+        fehlermeldung = "Dieser Titel existiert bereits"
+      } else fehlermeldung = "Es ist ein Fehler aufgetreten"
+    }
   }
 
   function zuordnen(medien_id) {
@@ -178,7 +187,7 @@
           <div class="control is-expanded">
             <input
               id="neuwahl"
-              class="input is-fullwidth"
+              class="input is-fullwidth" class:is-danger={fehlermeldung}
               type="text"
               bind:value={neuer_titel}
               on:keydown={e => e.key === 'Enter' && neu_anlegen()} />
@@ -191,6 +200,11 @@
             </button>
           </div>
         </div>
+        {#if fehlermeldung}
+          <div class="notification is-danger">
+            {fehlermeldung}
+          </div>
+        {/if}
       </div>
     </div>
   </div>

+ 8 - 0
src/migrations/002-unique_titles.js

@@ -0,0 +1,8 @@
+exports.up = (DB) => {
+  DB.prepare(
+    `CREATE UNIQUE INDEX idx_medienbezeichnung_name ON medienbezeichnung (name);`
+  ).run();
+};
+exports.down = (DB) => {
+  DB.prepare(`DROP INDEX IF EXISTS idx_medienbezeichnung_name;`).run();
+};