Browse Source

aggiunto segnapreso senza auth

blat 1 year ago
parent
commit
c23e5ac85a

+ 1 - 1
TODO.md

@@ -10,6 +10,6 @@
 - [ ] un loading per next / prev
 - [ ] immagine del banner da scaricare in locale
 - [ ] favicon (solo perche' senza ci mette un sacco a fare il load)
-- [ ] ci vuole un modo per segnare che un oggetto e' stato preso? forse no se facciamo un'asta live
+- [x] ci vuole un modo per segnare che un oggetto e' stato preso? forse no se facciamo un'asta live 
 - [ ] deploy
 - [ ] mail in lista

+ 1 - 0
components/cosetta.vue

@@ -20,5 +20,6 @@ const { cosetta } = defineProps({
         class="inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2"
         v-text='tag' />
     </div>
+    <toggleTaken :cosetta='cosetta'/>
   </div>
 </template>

+ 25 - 0
components/toggleTaken.vue

@@ -0,0 +1,25 @@
+<script setup>
+const { cosetta } = defineProps({
+  cosetta: {
+    type: Object,
+    required: true
+  }
+})
+
+watch(cosetta, () => { deep: true });
+
+let toggleTaken = async () => {
+  const ret = await $fetch(`/api/cosetta/${cosetta.uuid}/taken`, { method: 'POST' })
+  const q = await $fetch(`/api/cosetta/${cosetta.uuid}`)
+  cosetta.taken = q.cosetta.taken
+}
+</script>
+<template>
+<div class="form-control">
+  <label class="label cursor-pointer flex justify-end">
+    <span class="label-text px-4" v-html="cosetta.taken && 'Cosetta disponibile' || 'Cosetta assegnata'">
+    </span>
+    <input type="checkbox" class="toggle toggle-lg" @click='toggleTaken'  :checked='cosetta.taken' />
+  </label>
+</div>
+</template>

+ 3 - 0
pages/c/[cosetta].vue

@@ -39,6 +39,9 @@ onMounted(() => {
     </div>
 
     <div class="container mx-auto">
+
+      <toggleTaken :cosetta='cosetta'/>
+
       <p class="font-bold text-xl uppercase">chiacchiere</p>
       <div class='form-control'>
         <div class='input-group'>

+ 10 - 0
server/api/cosetta/[uuid]/taken.post.js

@@ -0,0 +1,10 @@
+import { toggleTaken } from '../../../controller'
+
+export default defineEventHandler(async (event) => {
+  try {
+    toggleTaken(event.context.params.uuid)
+    return { success: true }
+  } catch (e) {
+    return { success: false, reason: e.message }
+  }
+})

+ 6 - 1
server/controller.js

@@ -6,7 +6,7 @@ const db = new Database('./cosette.db')
 
 export function load() {
   db.pragma('journal_mode = WAL')
-  db.exec('CREATE TABLE IF NOT EXISTS cosette (uuid TEXT PRIMARY KEY, name TEXT NOT NULL, description TEXT, tags TEXT, images TEXT, updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP)')
+  db.exec('CREATE TABLE IF NOT EXISTS cosette (uuid TEXT PRIMARY KEY, name TEXT NOT NULL, description TEXT, tags TEXT, images TEXT, taken TINYINT DEFAULT 0, updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP)')
   db.exec('CREATE INDEX IF NOT EXISTS cosette_updated_at_index ON cosette (updatedAt)')
   db.exec('CREATE TABLE IF NOT EXISTS chan (uuid TEXT PRIMARY KEY, cosetta_uuid REFERENCES cosette(uuid), message TEXT, updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP)')
 }
@@ -70,3 +70,8 @@ export function getComment(uuid) {
   const comment = q.get(uuid)
   return comment
 }
+
+export function toggleTaken(uuid) {
+  const q = db.prepare('UPDATE cosette SET taken = ABS(taken - 1) WHERE uuid = ?')
+  return q.run(uuid)
+}