Un’applicazione web consente la gestione di aste online.
Gli utenti accedono tramite login e possono vendere e acquistare
all’asta.
La HOME page contiene due link, uno per accedere
alla pagina VENDO e uno per accedere alla pagina ACQUISTO.
La pagina VENDO mostra una lista delle aste create dall’utente e
non ancora chiuse, una lista delle aste da lui create e chiuse e
una form per creare un nuovo articolo e una nuova asta per
venderlo.
L'asta comprende l’articolo da mettere in
vendita (codice, nome, descrizione, immagine), prezzo iniziale,
rialzo minimo di ogni offerta e una scadenza (data e ora, es
19-04-2021 alle 23:00). La lista delle aste è ordinata per data+ora
crescente e riporta: codice e nome dell’articolo, offerta massima,
tempo mancante (numero di giorni e ore) tra il momento del login e
la data e ora di chiusura dell’asta.
Cliccando su un’asta
compare una pagina DETTAGLIO ASTA che riporta per un’asta aperta i
dati dell’asta e la lista delle offerte (nome utente, prezzo
offerto, data e ora dell’offerta) ordinata per data+ora
decrescente.
Un bottone CHIUDI permette all’utente di
chiudere l’asta se è giunta l’ora della scadenza (si ignori il caso
di aste scadute ma non chiuse).
Se l’asta è chiusa, la
pagina riporta i dati dell’asta, il nome dell’aggiudicatario, il
prezzo finale e l’indirizzo di spedizione dell’utente.
La
pagina ACQUISTO contiene una form di ricerca per parola chiave.
Quando l’acquirente invia una parola chiave la pagina ACQUISTO si
ricarica e mostra un elenco di aste aperte (la cui scadenza è
posteriore all’ora dell’invio) il cui articolo contiene la parola
chiave nel nome o nella descrizione. La lista è ordinata in modo
decrescente in base al tempo (numero di giorni. ore e minuti)
mancante alla chiusura. Cliccando su un’asta aperta compare la
pagina OFFERTA che mostra i dati dell’articolo, l’elenco delle
offerte pervenute in ordine di data+ora decrescente e un campo di
input per inserire la propria offerta, che deve essere superiore
all’offerta massima corrente. Dopo l’invio dell’offerta la pagina
OFFERTA mostra l’elenco delle offerte aggiornate.
La
pagina ACQUISTO contiene anche un elenco delle offerte aggiudicate
all’utente con i dati dell’articolo e il prezzo finale.
Versione con JavaScript
Si realizzi un’applicazione client
server web che modifica le specifiche precedenti come segue:
Dopo il login, l’intera applicazione è realizzata con un’unica
pagina.
Se l’utente accede per la prima volta
l’applicazione mostra il contenuto della pagina ACQUISTO. Se
l’utente ha già usato l’applicazione, questa mostra il contenuto
della pagina VENDO se l’ultima azione dell’utente è stata la
creazione di un’asta; altrimenti mostra il contenuto della pagina
ACQUISTO con l’elenco (eventualmente vuoto) delle aste su cui
l’utente ha cliccato in precedenza e che sono ancora aperte.
L’informazione dell’ultima azione compiuta e delle aste visitate è
memorizzata a lato client per la durata di un mese.
Ogni
interazione dell’utente è gestita senza ricaricare completamente la
pagina, ma produce l’invocazione asincrona del server e l’eventuale
modifica solo del contenuto da aggiornare a seguito dell’evento.
Caption: Entity, attribute, relation, page, view, event, action
Gli utenti accedono tramite login e possono vendere e acquistare all’asta. La HOME page contiene due link, uno per accedere alla pagina VENDO e uno per accedere alla pagina ACQUISTO. La pagina VENDO mostra una lista delle aste create dall’utente e non ancora chiuse, una lista delle aste da lui create e chiuse e una form per creare un nuovo articolo e una nuova asta per venderlo.
L'asta comprende l’articolo da mettere in vendita (codice, nome, descrizione, immagine), prezzo iniziale, rialzo minimo di ogni offerta e una scadenza (data e ora, es 19-04-2021 alle 23:00). La lista delle aste è ordinata per data+ora crescente e riporta: codice e nome dell’articolo, offerta massima, tempo mancante (numero di giorni e ore) tra il momento del login e la data e ora di chiusura dell’asta.
Cliccando su un’asta compare una pagina DETTAGLIO ASTA che riporta per un’asta aperta i dati dell’asta e la lista delle offerte (nome utente, prezzo offerto, data e ora dell’offerta) ordinata per data+ora decrescente.
Un bottone CHIUDI permette all’utente di chiudere l’asta se è giunta l’ora della scadenza (si ignori il caso di aste scadute ma non chiuse).
Se l’asta è chiusa, la pagina riporta i dati dell’asta, il nome dell’aggiudicatario, il prezzo finale e l’indirizzo di spedizione dell’utente.
La pagina ACQUISTO contiene una form di ricerca per parola chiave. Quando l’acquirente invia una parola chiave la pagina ACQUISTO si ricarica e mostra un elenco di aste aperte (la cui scadenza è posteriore all’ora dell’invio) il cui articolo contiene la parola chiave nel nome o nella descrizione. La lista è ordinata in modo decrescente in base al tempo (numero di giorni. ore e minuti) mancante alla chiusura. Cliccando su un’asta aperta compare la pagina OFFERTA che mostra i dati dell’articolo, l’elenco delle offerte pervenute in ordine di data+ora decrescente e un campo di input per inserire la propria offerta, che deve essere superiore all’offerta massima corrente. Dopo l’invio dell’offerta la pagina OFFERTA mostra l’elenco delle offerte aggiornate.
La pagina ACQUISTO contiene anche un elenco delle offerte aggiudicate all’utente con i dati dell’articolo e il prezzo finale.
Si realizzi un’applicazione client server web che modifica le specifiche precedenti come segue:
CREATE TABLE `Auctions` (
`auction_id` int(11) NOT NULL AUTO_INCREMENT,
`item_id` int(11) NOT NULL,
`initial_price` decimal(10,2) NOT NULL,
`minimum_bid` decimal(10,2) NOT NULL,
`expiring_moment` datetime NOT NULL,
`moment` datetime NOT NULL DEFAULT current_timestamp(),
`is_closed` tinyint(1) DEFAULT 0,
PRIMARY KEY (`auction_id`),
KEY `Auctions_FK` (`item_id`),
CONSTRAINT `Auctions_FK` FOREIGN KEY (`item_id`) REFERENCES `Items` (`item_id`),
CONSTRAINT `Auctions_InitialPrice_CHECK` CHECK (`initial_price` > 0),
CONSTRAINT `Auctions_MinimumBid_CHECK` CHECK (`minimum_bid` > 0)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `Bids` (
`bid_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`moment` datetime NOT NULL,
`bid` decimal(10,2) NOT NULL,
`auction_id` int(11) NOT NULL, PRIMARY KEY (`bid_id`),
KEY `Bids_FK` (`user_id`),
KEY `Bids_FK_1` (`auction_id`),
CONSTRAINT `Bids_FK` FOREIGN KEY (`user_id`)
REFERENCES `Users` (`user_id`),
CONSTRAINT `Bids_FK_1` FOREIGN KEY (`auction_id`)
REFERENCES `Auctions` (`auction_id`),
CONSTRAINT `Positive_Bid_Check`
CHECK (`bid` > 0) )
CREATE TABLE `Items` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`description` text DEFAULT NULL,
`picture` varchar(100) DEFAULT NULL,
`user_id` int(11) NOT NULL COMMENT 'Id of the owner',
`mime_type` varchar(30) DEFAULT NULL,
`item_code` varchar(100) DEFAULT NULL,
PRIMARY KEY (`item_id`), KEY `Items_FK` (`user_id`),
CONSTRAINT `Items_FK` FOREIGN KEY (`user_id`) REFERENCES `Users` (`user_id`)
);
CREATE TABLE `Users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL, `email` varchar(100) DEFAULT NULL,
`password` varchar(100) NOT NULL COMMENT 'Stored as SHA1 hash',
`address` varchar(100) DEFAULT NULL, PRIMARY KEY (`user_id`), UNIQUE KEY
`Users_UN` (`username`) );