Laboratorio Tecnologie Cloud e Mobile

<Luca Parimbelli - 1053142>
<Luca Ghislotti - 1052975>
<Alessandro Mazzola - 1053121>
<Andrea Marinò - 1053230>
<Christian Spano - 1053028>

Implementazione delle Lambda Function

Lambda Function: "get_watch_next_by_id"

Implementazione della Lambda Function "base" che consente di estrarre tutti i "watch next" in funzione del video che si sta guardando offrendo così all'utente la possibilità di navigare attraverso i link suggeriti.

connect_to_db().then(() => {
        console.log('=> get_all talks');
        talk.find({_id: body.id}, {watch_next_url: 1, _id: 0})
            .skip((body.doc_per_page * body.page) - body.doc_per_page)
            .limit(body.doc_per_page)
            .then(talks => {
                    callback(null, {
                        statusCode: 200,
                        body: JSON.stringify(talks)
                    })
                }
            )
            .catch(err =>
                callback(null, {
                    statusCode: err.statusCode || 500,
                    headers: { 'Content-Type': 'text/plain' },
                    body: 'Could not fetch the talks.'
                })
            );
    });

Lambda Function: "get_talk_by_url"

Implementazione della Lambda Function in grado di ottenere tutte le informazioni di un talk dato il suo url. Il nostro scopo è quella di utilizzarla in combinazione con la Lamda Function "get_watch_next_by_id" al fine di ottenere dettagli sui video consigliati.

connect_to_db().then(() => {
	console.log('=> get_all talks');
	talk.find({url: body.url})
		.skip((body.doc_per_page * body.page) - body.doc_per_page)
		.limit(body.doc_per_page)
		.then(talks => {
				callback(null, {
					statusCode: 200,
                    body: JSON.stringify(talks)
				})
			}

		)
		.catch(err =>
			callback(null, {
				statusCode: err.statusCode || 500,
				headers: { 'Content-Type': 'text/plain' },
				body: 'Could not fetch the talks.'
			})
        );
});

Lambda Function: "get_talk_by_speaker"

Implementazione della Lambda Function che consente di estrarre tutti i talk in funzione dello speaker cercato.

connect_to_db().then(() => {
        console.log('=> get_all talks');
        talk.find({main_speaker: body.speaker})
            .skip((body.doc_per_page * body.page) - body.doc_per_page)
            .limit(body.doc_per_page)
            .then(talks => {
                    callback(null, {
                        statusCode: 200,
                        body: JSON.stringify(talks)
                    })
                }
            )
            .catch(err =>
                callback(null, {
                    statusCode: err.statusCode || 500,
                    headers: { 'Content-Type': 'text/plain' },
                    body: 'Could not fetch the talks.'
                })
            );
    });
connect_to_db().then(() => {
        console.log('=> get_all talks');
        talk.find({"speaker.speaker_profession": body.profession})
            .skip((body.doc_per_page * body.page) - body.doc_per_page)
            .limit(body.doc_per_page)
            .then(talks => {
                    callback(null, {
                        statusCode: 200,
                        body: JSON.stringify(talks)
                    })
                }
            )
            .catch(err =>
                callback(null, {
                    statusCode: err.statusCode || 500,
                    headers: { 'Content-Type': 'text/plain' },
                    body: 'Could not fetch the talks.'
                })
            );
    });

Lambda Function: "get_talk_by_profession"

Implementazione della Lambda Function che consente di estrarre tutti i talk in funzione della professione dello speaker cercata. Dal momento che la professione è un campo dell'oggetto "speaker" abbiamo dovuto utilizzare una sintassi leggermente differente.

Simulazione della richiesta tramite Postman

Query

Response

L'esperienza utente

Le Lambda Function implementate hanno lo scopo di supportare le funzionalità di ricerca avanzata definite in fase di progetto. In particolare, la Lambda Function che permette di recuperare i link ai video successivi in funzione del video che si sta guardando ("get_watch_next_by_id"), adotta la notazione Hypermedia utilizzata nel contesto dei micro-servizi in stile ReST.

Le Lambda Function create, quindi, si occupano solo di recuperare le informazioni in funzione del nome dello speaker, della professione o dell'id. Verrà poi creata un'interfaccia user-friendly che consenta all'utente di utilizzare                     in maniera facile ed intuitiva.

Criticità tecniche

  • Conoscenza di Node.js per poter lavorare su funzioni Lambda;

  • Competenze attuali del team;

  • Abbiamo provato a cercare tramite funzione Lambda i talk dei "watch next" in modo da creare una funzione ricorsiva, ma dalla simulazione di Postman ci risulta sbagliato il codice su Node.js. La stessa funzione tramite l'uso di Robo3T risulta funzionare.

  • Inesperienza query MongoDB

  • Soluzione con coda SNS?

Possibili evoluzioni

  • Sviluppare funzione Lambda che ricerca video correlati a parole chiave selezionate;

  • Gestire accesso utenti;

  • Implementare tutte le funzioni strettamente collegate all'utente:

    • Elenco di video "consigliati" inerenti con il contenuto guardato;
    • Gestione accesso tramite account esistenti TEDx;
  • ​Implementazione elenco Watch Next Talks attraverso aggregate in Node.js oppure attraverso integrazione dei dati direttamente all'interno del database MongoDB.
Made with Slides.com