Flytta pengar med terminalprogram och med Express

By . Latest revision .

Du skall bygga två klienter mot en databas, den ena klienten är textbaserad och körs i terminalen med ett menysystem och kommandon. Den andra klienten är webbaserad och använder Express som server.

Databasen innehåller en tabell som simulerar bankkonton och du skall via båda klientern utföra funktionen att flytta pengar mellan kontona.

Flytten av pengar skall utföras inom ramen av en transaktion.

#Förkunskaper

Du har jobbat igenom “Transaktioner i databas” och du har tillgång till databasen från exemplet.

Du har jobba igenom artikeln “Koppla appservern Express till databasen MySQL” och du har en kodbas från artikeln som ger dig en webbklient.

Du har tidigare löst uppgiften “Node.js terminalprogram mot MySQL med kommandoloop” och har därmed ett terminalprogram att utgå ifrån.

#Introduktion

Du har skapat en webbklient där du kan visa innehållet från databasen i en tabell.

Du har sedan tidigare skapat en terminalklient där du kan utföra kommandon via ett menysystem i en kommandoloop.

Du skall nu utföra funktionen att flytta pengar mellan två konton och man skall kunna göra det via terminalklienten och via webbklienten.

I båda klienterna så hårdkodar vi att 1.5 pengar flyttas från ena kontot till det andra. Användaren kan i detta läget inte bestämma hur mycket pengar som flyttas eller från vilket konto och till vilket konto.

I nästa kmom gör vi flytten mer flexibel så man kan bestämma konto och antal pengar.

Utseendet på webbklienten kan vara så här. Varje gång du laddar om sidan så flyttas mer pengar.

Adam har precis fått 1.5 pengar.

Adam har precis fått 1.5 pengar.

Utseendet på terminalklienten kan vara så här.

Via terminalklienten kan du flytta pengar till Eva, i skydd av en transaktion.

Via terminalklienten kan du flytta pengar till Eva, i skydd av en transaktion.

Tänk på din kodstruktur, här finns kod som går att återanvända och dela mellan klienterna. Ett visst fokus i uppgiften är att finna en struktur där du kan dela kod mellan de båda klienterna.

#Flera SQL frågor inuti en

I npm-modulen mysql finns möjligheten att utföra en multiquery, ett anrop till databasen som består av flera SQL-satser. Det är något som passar bra i denna uppgiften där vi vill använda transaktioner för att säkerställa flytten av pengar.

I länken ovan visas hur du enablar multiquery i modulen, det är avstängt från början. Sätter du inte på det så får du ett felmeddelande på andra SQL-satsen.

Du sätter på funktionen genom att lägga till följande inställning i din konfiguration i config/db/bank.json.

{
    "multipleStatements": true
}

Din konfigurationsfil kan alltså se ut så här.

{
    "host":     "localhost",
    "user":     "user",
    "password": "pass",
    "database": "dbwebb",
    "multipleStatements": true
}

#Krav

  1. Inloggningsdetaljer till databasen skall sparas i config/db/bank.json och delas mellan webbklient och terminalklient.

  2. Flytten av pengar skall alltid utföras inom ramen för en transaktion.

  3. Din webbklient har en sida bank/index som hälsar välkommen till banken och visar en meny över de saker man kan göra.

  4. Din webbklient har en sida bank/balance som visar en kontoöversikt.

  5. Bygg vidare på din webbklient och lägg till en sida bank/move-to-adam. Varje gång man går in på den sidan skall det flyttas 1.5 pengar från Eva till Adam. Sidan visar bara ett tackmeddelande från Adam som tackar för pengarna.

  6. Sidlayouten skall vara gemensam header och footer för samtliga sidor.

  7. Det skall finnas en meny i header som ger en navigeringsmöjlighet mellan de sidor som är relaterade till banken.

  8. Bygg ett terminalprogram och spara main-funktionen i cli.js. Övrig kod lägger du i moduler under katalogen src/. Terminalprogrammet skall startas med node cli.js.

  9. Ditt terminalprogram skall fungera som en oändlig kommandoloop där man kan skriva in kommandon som programmet utför. Det skall finnas ett kommando menu som visar menyn med samtliga kommandon. När man skriver kommandot exit skall programmet avslutas.

  10. I terminalprogrammet, skapa kommandot move som flyttar 1.5 pengar från Adam till Eva. TIPS: se första extrauppgiften nedan, det kan förenkla din implementation.

  1. Validera din kod.
# Flytta till kurskatalogen
dbwebb validate express-sql

Rätta eventuella fel som dyker upp och publisera igen. När det ser grönt ut så är du klar.

#Extrauppgift

Gör följande om du har tid och ro.

  1. Se till att skriva en funktion som flyttar pengarna och dela den mellan webbklienten och terminalklienten. Funkttionen kan ta parametrar för fromAccount, toAccount och amount. Då får du en god kodstruktur.

  2. Lägg till kommandot balance i terminalen så att du kan se balansen på konton, på liknande sett man gör i webbklienten.

  3. Lägg till kommandot move <amount> i din terminalklient.

  4. Snygga till din webklient med CSS och se över så att navigeringen är smidig mellan sidorna.

#Tips från coachen

Lycka till och hojta till i forumet om du behöver hjälp!

#Revision history

  • 2019-02-12: (C, mos) Förtydliga hur konfigurationsfilen uppdateras.
  • 2019-02-08: (B, mos) Genomgången fokus mot kursen databas.
  • 2018-01-09: (A, mos) Första utgåvan.

Document source.

Category: javascript, nodejs, mysql, express, kursen databas.