blob: 8423bc01d8bcc7dcc98936e7173c1b744e0c93f9 [file]
"use strict";
const cassandra = require('cassandra-driver');
const Uuid = cassandra.types.Uuid;
const UnderscoreCqlToCamelCaseMappings = cassandra.mapping.UnderscoreCqlToCamelCaseMappings;
const client = new cassandra.Client({ contactPoints: ['127.0.0.1'], localDataCenter: 'dc1' });
const mapper = new cassandra.mapping.Mapper(client, { models: {
'Video': {
tables: ['videos', 'user_videos', 'latest_videos'],
keyspace: 'examples',
columns: {
'videoid': 'videoId',
'userid': 'userId'
},
mappings: new UnderscoreCqlToCamelCaseMappings()
}
}});
const videoId = Uuid.random();
const userId = Uuid.random();
/**
* Inserts an object and retrieves it using the Mapper.
* Note that the tables are from killrvideo schema, more info:
* https://github.com/pmcfadin/killrvideo-sample-schema/blob/master/killrvideo-schema.cql
*/
client.connect()
.then(function () {
const queries = [
`CREATE KEYSPACE IF NOT EXISTS examples
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1' }`,
'USE examples',
`CREATE TABLE IF NOT EXISTS videos (videoid uuid, userid uuid, name varchar, description varchar, location text,
location_type int, preview_thumbnails map<text,text>, tags set<varchar>, added_date timestamp,
PRIMARY KEY (videoid))`,
`CREATE TABLE IF NOT EXISTS user_videos (userid uuid, added_date timestamp, videoid uuid, name text,
preview_image_location text, PRIMARY KEY (userid, added_date, videoid))
WITH CLUSTERING ORDER BY (added_date DESC, videoid ASC)`,
`CREATE TABLE IF NOT EXISTS latest_videos (yyyymmdd text, added_date timestamp, videoid uuid, name text,
preview_image_location text, PRIMARY KEY (yyyymmdd, added_date, videoid))
WITH CLUSTERING ORDER BY (added_date DESC, videoid ASC)`,
];
let p = Promise.resolve();
// Create the schema executing the queries serially
queries.forEach(query => p = p.then(() => client.execute(query)));
return p;
})
.then(() => {
const videoMapper = mapper.forModel('Video');
// Insert on tables "videos" and "user_videos"
return videoMapper.insert({ videoId, addedDate: new Date(), userId, name: 'My video', description: 'My desc'});
})
.then(() => {
const videoMapper = mapper.forModel('Video');
// SELECT using table "videos"
return videoMapper.find({ videoId });
})
.then(results => console.log('--Obtained video by id\n', results.first()))
.then(() => {
const videoMapper = mapper.forModel('Video');
// SELECT using table "user_videos"
return videoMapper.find({ userId });
})
.then(results => {
console.log('--Obtained video by user id\n', results.first());
return client.shutdown();
})
.catch(function (err) {
console.error('There was an error', err);
return client.shutdown().then(() => { throw err; });
});