# Uppgift om att skapa en dokumentdatabas

__ satus: alpha __ Uppgifterna nedan utgår från att du skrivaer json dokument
och använder dokumentdatabasen [kv](https://deno.com/kv). Men du kan också lösa
uppgiften med en reltations databas och SQL, utgå då från de tidigare
lektionsanteckningarna.

- [Exempel lösning](https://docs.google.com/document/d/1It10ffNyFN6wzkefkFCZBaH6LqxYH_9_wc4wEFtgY7k/edit?usp=sharing)
- [Exempel ada](https://htsit.se/f/ada.zip)

# Fundera igenom en sajt

Fundera på en sajt som du vill göra. Du vill beskriva den data som behövs för
att skapa denna sajt.

Du kan använda reflektion från denna när du uppgifterna i nästa avsnittet. Men
du kan också bara gå vidare och lösa uppgift 0 när det passar.

# Gör några test objekt

## 1. Testa om inlämnings länken fungerar

Skriv något i inlämnings dokumentet för databaser så att du ser att dun kan
redigera. kontrollera också att dokumentet har rätt namn.

## 2. Gör en lista

Gör en lista i json format, det vill säga på samma sätt som du skulle deklarera
en array i js. Listan ska innehålla namn, men sakerna ska vara av ungefär samma
kategori. Till exempel träd, frukter, bilar med mera.

## 3. Beskriv varje objekt i listan

Fundera igenom den typ som du har valt ovan. Vilka är de gemensamma
egenskaperna? Gå igenom listan och gör om varje namn till ett objekt som
innehåller dessa egenskaper.

## 4. Skriv ut listan med en for-loop

Deklarera listan ovan i ett js fil. Skriv en for-loop som går igenom alla object
som du har deklaerat ovan och gör en snygg utskrift.

## 5. Fundera på att beskriva ett värde i obkjeten i ett eget objekt.

Titta på din lista. Finns det en egenskap som bara har ett par olika värden som
vi skulle kunna beskriva i ett eget objekt. Gör så för en sådan egenskap.
Förlagviss har du en egenskap namn som motsvarar värdet på egenskaper och sedan
ett par egenskaper som ger mer informatiom om själva värdet.

## 6. Gör objekt av objeckiten ovan.

Vi kommer behöva hitta dessa objekt på ett enkelt sätt. Så gör ett objet som har
dessa objekt sdom representerar ett värde som en egenskap. Förslagvis så tar du
namnet och har det som en egenskap.

## 7. Gör en utskrift som kombinerar arrayen och objekten ovan.

Kombinera listan från övning 3 med objektet från övning 6 i en for-loop som gör
en utskrift.

## 8. Skapa en egenskap som har en array som värde.

Du kan skapa den i vilket json-objekt som helst som du har skapat innan. Lägg
bara till en egenskap och låt den ha en array som egenskap.

## 9. Fyll denna array med objekt som värden.

Ta nu och fyll denna lista som du skapde ovan med passande objekt. Om du inte
kan komma på passande objekt så fyll den med nosen data.

## 10 En for-loop till för att visa dessa nya värden.

Gör nu en for loop som går igenom alla objekt av typen ovan. Om objekten har en
egenskap som är ett tal kan du summera dem.

# Beskriv din idé

Du kan utgå från att sajten kan hanter många samtidiga användare. Detta kommer
lösas som en turtorial.

- [Idéer på vad du kan göra](https://docs.google.com/document/d/1AiCX9S7Kf4BuLr_YhuWv56P_XbBlQsoKfgO3fUThOqo/edit?usp=sharing)

## 11. Skriv ned mellan 3 till 5 meningar om din idé

En kort beskrivning på vad du vill åstakomma med din sajt.

## 12. En längre beskrivning av allt regler som behvös

En beskrivning så du vet vad du behöver göras. Om du till exempel ska göra ettt
spel så beskriv vilka regler som behvös. Om du ska göra ett chatt program
beskriv hur infromations ska utbytas mellan användare.

## 13. Beskriv vilka json dokument som kommer behövas.

Du kommer antagligen ha ett dokument för hantera gemensma information och ett
för att hantera information som är personlig information.

## 14. Beskriv vilka sökningar som kommer behövas göras.

Fundera på när och hur du kommer behöva ett dokument. Beskirv varje sådan
sökning i en lista. Fundera skärskilt över vilken typ av data som sökning ska
innehålla.

# Förverkliga json dokument för din idé

Vi ska här skapa json dokument för att användas som bas för din sajt. Observera
att några av dessa kanske endast kommer fyllas med data efter du startat sajten.
Det är då viktigt att ända fylla den med exempel data för det kan vara bra för
testning. Lika så hur mycket som ska skriva beror på vad du tror behövs. Tänk på
hur du ska implmentera detta.

## 15. Skapade ett json dokument

Välj ett json dokument från uppgift 13 som du tror är lätt att göra Fylld det
med relevant data.

## 16. Gör alla json dokument som hör ihop med hela sajten

Du har antagligen ett antal json dokument som innehåller data som är till för
hela sajten.

## 17. Gör alla json dokument som hör ihop med en anvädnare

Detta är uppgifter som hör ihop med en användare och antagligen kommer skapas
medan servern körs. Du måste ha en egenskap "user" och en "password" eller
likande.

# Skapa en modell för din databas.

Du behöver nu skapa en mapp där du har alla dina filer. Döp mappen till vad du
vill att projektet ska heta. Du kan använda exempel prodjektet
[ada](https://htsit.se/f(ada.zip) som exempel på vad du ska göra.

## 18. Skapa en mapp info

För flytta alla json filer du gjort till denna map. Det gäller framför allt json
filer som ska användas för hela sajten.

Lista alla filer i mappen och lämna in som resultat.

## 19. Skapa en mapp data

Denna mapp ska innehålla eventuell databas.

Du behöver inte redovisa något annat än att skriva uppgift numret.

## 20. Skapa en mapp model

Skapa en mapp model och skapa där också en fil model.ts

## 21. Gör om en json fil till en interface

Ta en av din json filer och kopiera in den i modell fil. Omvandla den till ett
interface gemnom att skriva om det steg för steg.

## 22. Gör interface för alla json dokument som hör ihop med hela sajten

Gör nu detta för alla dokument som hör ihop med hela sajten.

## 23. Gör interface för alla som hör ihop med hela sajten

Gör nu detta för alla dokument som hör ihop med en användare.

# Använda KV databasen

Vi ska nu fylla vår KV databas med mera data. I mappen tools skapa ett program
setup.ts. Där går du igenom alla filer och läser in dem i databasen. Titta gärna
i exempled ovan.

## 24. Gör en setup program som kan köras

Skapa en mapp tools, i den skapa en fil setup.ts. Lägg till "#!/usr/bin/env -S
deno -A --unstable-kv " högst upp i filen. Gör filen körbar och testa med att
skriva ut något.

## 25. Gör ett setup program som går igenom alla filer

I setup programmet gå igenom alla filer som du vill läsa in och parsa data. Det
borde vara del json filer som gäller föe hela spelet, men även några exempel
filer för user.

Du kan alltid testa att du gör rätt genom att skriva ut data som du parsas på
skärmen.

## 26. Gör en eller flera set funktioner

Gör olika funktioner som du kallar för set och adderar data till databasen. Se
ada för exempel på detta från ADA programmet.

## 27. Få setup funktionen att lägga till data till databasen

Använd set funktionerna sedan med data som du fick från uppgift 25.

## 28. Testa med vår show program.

Kopiera filen show.ts från mappen tools i ADA. Om du kör den boorde du kunna gå
igenom din databas och se att det blivit rätt.

## ➕29. Kompletera med eventuella extra nycklar

För att klara att göra alla sökningar du har tänkt dig kan du behöva komplettera
med flera nycklar.

## ➕30. Flytta alla set funktioner till en seperat fil.

Du kan göra din egen variant av show funktionen som visar vad som är viktigt i
din databas.

## 31. Skapa get funktioner

Skapa get funktioner för att hämta ett dokument utfrån en nyckel.

## 32. Skapa list funktioner

Skapa list funktioner för att få flera dokument baserat på en nyckel.

## ➕33. Gör en show funktion som visar det viktigaste i din databas

Du kan göra din egen variant av show funktionen som visar vad som är viktigt i
din databas.
