From eaf8f70c4f6430655e1a12a1d45cd26c0dd78bb1 Mon Sep 17 00:00:00 2001 From: Joseph Schmitt Date: Sun, 30 Oct 2016 00:13:39 -0400 Subject: [PATCH] Move date filtering into main add movie intent --- interaction_model/intent_schema.json | 13 ++---- interaction_model/sample_utterances.txt | 57 +++++++++++++++++-------- src/lib/handlers.js | 20 +++------ src/lib/index.js | 2 - src/lib/utils.js | 19 ++++++++- 5 files changed, 65 insertions(+), 46 deletions(-) diff --git a/interaction_model/intent_schema.json b/interaction_model/intent_schema.json index 7c9d673..a1e61d0 100644 --- a/interaction_model/intent_schema.json +++ b/interaction_model/intent_schema.json @@ -2,15 +2,6 @@ "intents": [ { "intent": "AddMovie", - "slots": [ - { - "name": "movieName", - "type": "AMAZON.LITERAL" - } - ] - }, - { - "intent": "AddMovieDate", "slots": [ { "name": "movieName", @@ -28,6 +19,10 @@ { "name": "movieName", "type": "AMAZON.LITERAL" + }, + { + "name": "releaseDate", + "type": "AMAZON.DATE" } ] }, diff --git a/interaction_model/sample_utterances.txt b/interaction_model/sample_utterances.txt index 4f6789b..c0c2d95 100644 --- a/interaction_model/sample_utterances.txt +++ b/interaction_model/sample_utterances.txt @@ -5,26 +5,26 @@ AddMovie add {The Avengers|movieName} AddMovie add {The Dark Knight|movieName} AddMovie add {Live or Let Die|movieName} -AddMovieDate add {The Godfather|movieName} came out in {releaseDate} -AddMovieDate add {Star Wars|movieName} came out in {releaseDate} -AddMovieDate add {Star Wars Episode Four A New Hope|movieName} came out in {releaseDate} -AddMovieDate add {The Avengers|movieName} came out in {releaseDate} -AddMovieDate add {The Dark Knight|movieName} came out in {releaseDate} -AddMovieDate add {Live or Let Die|movieName} came out in {releaseDate} +AddMovie add {The Godfather|movieName} came out in {releaseDate} +AddMovie add {Star Wars|movieName} came out in {releaseDate} +AddMovie add {Star Wars Episode Four A New Hope|movieName} came out in {releaseDate} +AddMovie add {The Avengers|movieName} came out in {releaseDate} +AddMovie add {The Dark Knight|movieName} came out in {releaseDate} +AddMovie add {Live or Let Die|movieName} came out in {releaseDate} -AddMovieDate add {The Godfather|movieName} from {releaseDate} -AddMovieDate add {Star Wars|movieName} from {releaseDate} -AddMovieDate add {Star Wars Episode Four A New Hope|movieName} from {releaseDate} -AddMovieDate add {The Avengers|movieName} from {releaseDate} -AddMovieDate add {The Dark Knight|movieName} from {releaseDate} -AddMovieDate add {Live or Let Die|movieName} from {releaseDate} +AddMovie add {The Godfather|movieName} from {releaseDate} +AddMovie add {Star Wars|movieName} from {releaseDate} +AddMovie add {Star Wars Episode Four A New Hope|movieName} from {releaseDate} +AddMovie add {The Avengers|movieName} from {releaseDate} +AddMovie add {The Dark Knight|movieName} from {releaseDate} +AddMovie add {Live or Let Die|movieName} from {releaseDate} -AddMovieDate add {The Godfather|movieName} released in {releaseDate} -AddMovieDate add {Star Wars|movieName} released in {releaseDate} -AddMovieDate add {Star Wars Episode Four A New Hope|movieName} released in {releaseDate} -AddMovieDate add {The Avengers|movieName} released in {releaseDate} -AddMovieDate add {The Dark Knight|movieName} released in {releaseDate} -AddMovieDate add {Live or Let Die|movieName} released in {releaseDate} +AddMovie add {The Godfather|movieName} released in {releaseDate} +AddMovie add {Star Wars|movieName} released in {releaseDate} +AddMovie add {Star Wars Episode Four A New Hope|movieName} released in {releaseDate} +AddMovie add {The Avengers|movieName} released in {releaseDate} +AddMovie add {The Dark Knight|movieName} released in {releaseDate} +AddMovie add {Live or Let Die|movieName} released in {releaseDate} FindMovie is {The Godfather|movieName} on the list FindMovie is {Star Wars|movieName} on the list @@ -53,3 +53,24 @@ FindMovie if {Star Wars Episode Four A New Hope|movieName} is already FindMovie if {The Avengers|movieName} is already FindMovie if {The Dark Knight|movieName} is already FindMovie if {Live or Let Die| movieName} is already + +FindMovie is {The Godfather|movieName} came out in {releaseDate} on the list +FindMovie is {Star Wars|movieName} came out in {releaseDate} on the list +FindMovie is {Star Wars Episode Four A New Hope|movieName} came out in {releaseDate} on the list +FindMovie is {The Avengers|movieName} came out in {releaseDate} on the list +FindMovie is {The Dark Knight|movieName} came out in {releaseDate} on the list +FindMovie is {Live or Let Die|movieName} came out in {releaseDate} on the list + +FindMovie if {The Godfather|movieName} from {releaseDate} is on the list +FindMovie if {Star Wars|movieName} from {releaseDate} is on the list +FindMovie if {Star Wars Episode Four A New Hope|movieName} from {releaseDate} is on the list +FindMovie if {The Avengers|movieName} from {releaseDate} is on the list +FindMovie if {The Dark Knight|movieName} from {releaseDate} is on the list +FindMovie if {Live or Let Die|movieName} from {releaseDate} is on the list + +FindMovie is {The Godfather|movieName} released in {releaseDate} already +FindMovie is {Star Wars|movieName} released in {releaseDate} already +FindMovie is {Star Wars Episode Four A New Hope|movieName} released in {releaseDate} already +FindMovie is {The Avengers|movieName} released in {releaseDate} already +FindMovie is {The Dark Knight|movieName} released in {releaseDate} already +FindMovie is {Live or Let Die|movieName} released in {releaseDate} already diff --git a/src/lib/handlers.js b/src/lib/handlers.js index 87e76b2..60f076f 100644 --- a/src/lib/handlers.js +++ b/src/lib/handlers.js @@ -5,7 +5,8 @@ import CouchPotato from 'node-couchpotato'; import { buildPrompt, sendSearchResponse, - formatSearchResults + formatSearchResults, + parseDate } from './utils.js'; import { @@ -57,23 +58,12 @@ export function handleFindMovieIntent(req, resp) { export function handleAddMovieIntent(req, resp) { const movieName = req.slot('movieName'); - - cp.movie.search(movieName, NUM_RESULTS).then(function (movies) { - movies = formatSearchResults(movies); - sendSearchResponse(movies, movieName, resp); - }); - - //Async response - return false; -} - -export function handleAddMovieDateIntent(req, resp) { - const movieName = req.slot('movieName'); - const releaseDate = new Date(req.slot('releaseDate')).getUTCFullYear(); + const releaseDate = parseDate(req.slot('releaseDate')); + const filterFn = (movie) => movie.year === releaseDate.year; // Grab more results since we'll end up filtering by date cp.movie.search(movieName, NUM_RESULTS * 2).then(function (movies) { - movies = formatSearchResults(movies).filter((movie) => movie.year == releaseDate); + movies = formatSearchResults(movies, releaseDate ? filterFn : undefined); sendSearchResponse(movies, movieName, resp); }); diff --git a/src/lib/index.js b/src/lib/index.js index df83096..c952042 100644 --- a/src/lib/index.js +++ b/src/lib/index.js @@ -5,7 +5,6 @@ import Alexa from 'alexa-app'; import handleLaunchIntent, { handleFindMovieIntent, handleAddMovieIntent, - handleAddMovieDateIntent, handleYesIntent, handleNoIntent, handleCancelIntent, @@ -17,7 +16,6 @@ const app = new Alexa.app('couchPotato'); app.launch(handleLaunchIntent); app.intent('FindMovie', handleFindMovieIntent); app.intent('AddMovie', handleAddMovieIntent); -app.intent('AddMovieDate', handleAddMovieDateIntent); app.intent('AMAZON.YesIntent', handleYesIntent); app.intent('AMAZON.NoIntent', handleNoIntent); app.intent('AMAZON.CancelIntent', handleCancelIntent); diff --git a/src/lib/utils.js b/src/lib/utils.js index e17d48c..af840fd 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -29,7 +29,7 @@ export function sendSearchResponse(movies, movieName, resp) { .send(); } -export function formatSearchResults(movies) { +export function formatSearchResults(movies, filterFn = () => { return true }) { if (movies) { return movies.map((movie) => { return { @@ -39,8 +39,23 @@ export function formatSearchResults(movies) { titles: movie.titles, imdb: movie.imdb } - }); + }).filter(filterFn); } return []; } + +export function parseDate(dateStr) { + if (!dateStr) { + return null; + } + + const parts = dateStr.split('-'); + const date = new Date(dateStr); + + return { + year: date.getUTCFullYear(), + month: parts.length > 1 ? date.getUTCMonth() + 1 : null, + date: parts.length > 2 ? date.getUTCDate() + 1 : null + }; +}