Commit 7d10b6e0778966abb89ba4b3729c0bfcde7385d2

Authored by Nam Tran
Exists in master

Merge branch 'master' of git.ucsd.edu:110swag/docs

Showing 29 changed files Inline Diff

node_modules/sqlt/.npmignore View file @ 7d10b6e
File was created 1 *.swp
2 .DS_Store
3 node_modules/
4 npm-debug.log
node_modules/sqlt/.travis.yml View file @ 7d10b6e
File was created 1 language: node_js
2 node_js:
3 - "0.10"
node_modules/sqlt/LICENSE View file @ 7d10b6e
File was created 1 Copyright (c) 2014, Eugene Ware
2 All rights reserved.
3
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions are met:
6
7 1. Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9 2. Redistributions in binary form must reproduce the above copyright
10 notice, this list of conditions and the following disclaimer in the
11 documentation and/or other materials provided with the distribution.
12 3. Neither the name of Eugene Ware nor the names of its contributors
13 may be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16 THIS SOFTWARE IS PROVIDED BY EUGENE WARE ''AS IS'' AND ANY
17 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 DISCLAIMED. IN NO EVENT SHALL EUGENE WARE BE LIABLE FOR ANY
20 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
node_modules/sqlt/README.md View file @ 7d10b6e
File was created 1 # sqlt
2
3 Simple SQL Templating helper inspired by [Yesql](https://github.com/krisajenkins/yesql)
4
5 [![build status](https://secure.travis-ci.org/eugeneware/sqlt.png)](http://travis-ci.org/eugeneware/sqlt)
6
7 Give this library the location of a SQL template file, and it will return a function that
8 you can call with a [mysql](https://www.npmjs.org/package/mysql) or [pg](https://www.npmjs.org/package/pg) connection, an optional array of parameters, and a callback.
9
10 ## Installation
11
12 This module is installed via npm:
13
14 ``` bash
15 $ npm install sqlt
16 ```
17
18 ## Example Usage
19
20 ### Simple SQL query with no params
21
22 Given a SQL template file located in /path/to/queries/getUsers.sql
23
24 ``` sql
25 SELECT
26 *
27 FROM
28 users;
29 ```
30
31 You can get a function that is easily callable with a database connection
32 handle, and get a callback:
33
34 ``` js
35 var sqlt = require('sqlt'),
36 mysql = require('mysql');
37
38 var conn = mysql.createConnection({
39 host: 'yourdatabase.com',
40 database: 'yourdbname',
41 user: 'yourdbusername',
42 password: 'yourpassword'
43 });
44
45 var getUsers = sqlt('/path/to/queries/getUsers.sql');
46 getUsers(conn, function (err, results) {
47 if (err) throw err;
48 console.log(results);
49 });
50 ```
51
52 ### SQL query with params
53
54 Given a SQL template file located in /path/to/queries/getUsersByIdOrEmail.sql
55
56 ``` sql
57 SELECT
58 *
59 FROM
60 users
61 WHERE
62 id = ? OR email = ?;
63 ```
64
65 You can get a function that is easily callable with a database connection
66 handle, an array of parameters, and get a callback:
67
68 ``` js
69 var sqlt = require('sqlt'),
70 mysql = require('mysql');
71
72 var conn = mysql.createConnection({
73 host: 'yourdatabase.com',
74 database: 'yourdbname',
75 user: 'yourdbusername',
76 password: 'yourpassword'
77 });
78
79 var getUsersByIdOrEmail = sqlt('/path/to/queries/getUsersByIdOrEmail.sql');
80 getUsersByIdOrEmail(conn, [1234, 'bob@hotmail.com'], function (err, results) {
81 if (err) throw err;
82 console.log(results);
83 });
84 ```
85
86 ### Load a directory full of queries
87
88 Given a folder that contains a list of `.sql` files (say the `getUsers.sql` and
89 `getUsersByIdOrEmail.sql` file above:
90
91 You can get a single object where each `.sql` file is turned into a query
92 helping function:
93
94 ``` js
95 var sqlt = require('sqlt'),
96 mysql = require('mysql');
97
98 var conn = mysql.createConnection({
99 host: 'yourdatabase.com',
100 database: 'yourdbname',
101 user: 'yourdbusername',
102 password: 'yourpassword'
103 });
104
105 var queries = sqlt.dir('/path/to/queries');
106 queries.getUsers(conn, function (err, results) {
107 if (err) throw err;
108 console.log(results);
109 });
110 queries.getUsersByIdOrEmail(conn, [1234, 'bob@hotmail.com'], function (err, results) {
111 if (err) throw err;
112 console.log(results);
113 });
114 ```
115
node_modules/sqlt/index.js View file @ 7d10b6e
File was created 1 var fs = require('fs'),
2 path = require('path');
3
4 function makeSql(stmt) {
5 return function (conn, params, cb) {
6 if (typeof cb === 'undefined' && typeof params === 'function') {
7 cb = params;
8 params = [];
9 }
10 if (typeof cb === 'undefined') {
11 // for piping
12 return conn.query(stmt, params);
13 } else {
14 conn.query(stmt, params, cb);
15 }
16 };
17 }
18
19 module.exports = sqlt;
20 function sqlt(sqlFile) {
21 var stmt = fs.readFileSync(sqlFile, 'utf8');
22 return makeSql(stmt);
23 };
24
25 module.exports.dir = sqltDir;
26
27 function sqltDir(dir) {
28 var queries = {};
29 function isSql(name){
30 return name.slice(-4,name.length) === '.sql';
31 }
32 var files = fs.readdirSync(dir).filter(isSql);
33
34 var contents = files.map(function(fileName){
35 return fs.readFileSync(path.join(dir,fileName)).toString();
36 });
node_modules/sqlt/package.json View file @ 7d10b6e
File was created 1 {
2 "name": "sqlt",
3 "version": "1.1.1",
4 "description": "Simple SQL Templating helper inspired by Yesql",
5 "main": "index.js",
6 "scripts": {
7 "test": "mocha"
8 },
9 "repository": {
10 "type": "git",
11 "url": "https://github.com/eugeneware/sqlt"
12 },
13 "keywords": [
14 "sql",
15 "yesql",
16 "presql",
17 "template",
18 "file",
19 "database",
20 "mysql",
21 "pg",
22 "postgres",
23 "postgresql",
24 "mysql",
25 "orm"
26 ],
27 "author": {
28 "name": "Eugene Ware",
29 "email": "eugene@noblesamurai.com"
30 },
31 "license": "BSD-3-Clause",
32 "bugs": {
33 "url": "https://github.com/eugeneware/sqlt/issues"
34 },
35 "dependencies": {},
36 "devDependencies": {
37 "expect.js": "~0.2.0",
38 "mocha": "~1.17.0"
39 },
40 "homepage": "https://github.com/eugeneware/sqlt",
41 "_id": "sqlt@1.1.1",
42 "dist": {
43 "shasum": "5e3b48cec68b3b6a9b80d60e5dd5656009b246e6",
44 "tarball": "http://registry.npmjs.org/sqlt/-/sqlt-1.1.1.tgz"
45 },
46 "_from": "sqlt@*",
47 "_npmVersion": "1.4.3",
48 "_npmUser": {
49 "name": "eugeneware",
50 "email": "eugene@noblesamurai.com"
51 },
52 "maintainers": [
53 {
54 "name": "eugeneware",
55 "email": "eugene@noblesamurai.com"
56 }
57 ],
58 "directories": {},
59 "_shasum": "5e3b48cec68b3b6a9b80d60e5dd5656009b246e6",
60 "_resolved": "https://registry.npmjs.org/sqlt/-/sqlt-1.1.1.tgz"
61 }
node_modules/sqlt/test/fixtures/getUsers.sql View file @ 7d10b6e
File was created 1 SELECT
2 *
3 FROM
4 users;
node_modules/sqlt/test/fixtures/getUsersByIdOrEmail.sql View file @ 7d10b6e
File was created 1 SELECT
2 *
3 FROM
4 users
5 WHERE
6 id = ? OR email = ?;
node_modules/sqlt/test/index.js View file @ 7d10b6e
File was created 1 var expect = require('expect.js'),
2 path = require('path'),
3 sqlt = require('..');
4
5 describe('sqlt', function() {
6 // simple mock
7 var conn = {
8 query: function (stmt, params, cb) {
9 if (typeof cb === 'undefined' && typeof params === 'function') {
10 cb = params;
11 params = [];
12 }
13 if (typeof cb === 'undefined') {
14 return {
15 pipe: function () {
16 return stmt;
17 }
18 };
19 } else {
20 cb(null, stmt);
21 }
22 }
23 };
24
25 it('should be able to read a SQL statement', function(done) {
26 var getUsers = sqlt(path.join(__dirname, 'fixtures', 'getUsers.sql'));
27 getUsers(conn, function (err, res) {
28 if (err) return done(err);
29 var expected =
30 "SELECT\n" +
31 " *\n" +
32 "FROM\n" +
33 " users;\n"
34 expect(res).to.equal(expected);
35 done();
36 });
37 });
38
39 it('should be able to read a parameterized statement', function(done) {
40 var getUsersByIdOrEmail = sqlt(path.join(__dirname, 'fixtures', 'getUsersByIdOrEmail.sql'));
41 getUsersByIdOrEmail(conn, [123, 'bob@hotmail.com'], function (err, res) {
42 if (err) return done(err);
43 var expected =
44 "SELECT\n" +
45 " *\n" +
46 "FROM\n" +
47 " users\n" +
48 "WHERE\n" +
49 " id = ? OR email = ?;\n";
50 expect(res).to.equal(expected);
51 done();
52 });
53 });
54
55 it('should be able to read a directory of queries', function(done) {
56 var queries = sqlt.dir(path.join(__dirname, 'fixtures'));
57 expect(queries.getUsers).to.be.a('function');
58 expect(queries.getUsersByIdOrEmail).to.be.a('function');
59
60 doUsers();
61
62 function doUsers() {
63 queries.getUsers(conn, function (err, res) {
64 if (err) return done(err);
65 var expected =
66 "SELECT\n" +
67 " *\n" +
68 "FROM\n" +
69 " users;\n"
70 expect(res).to.equal(expected);
71 doParam();
72 });
73 }
74
75 function doParam() {
76 queries.getUsersByIdOrEmail(conn, [123, 'bob@hotmail.com'], function (err, res) {
77 if (err) return done(err);
78 var expected =
79 "SELECT\n" +
80 " *\n" +
81 "FROM\n" +
82 " users\n" +
83 "WHERE\n" +
84 " id = ? OR email = ?;\n";
85 expect(res).to.equal(expected);
86 done();
87 });
88 }
89 });
90
91 it('should allow streaming of results', function(done) {
92 var getUsersByIdOrEmail = sqlt(path.join(__dirname, 'fixtures', 'getUsersByIdOrEmail.sql'));
93 var stream = getUsersByIdOrEmail(conn, [123, 'bob@hotmail.com']);
94 expect(stream.pipe).to.be.a('function');
95 var expected =
96 "SELECT\n" +
97 " *\n" +
screen_sequence_diagrams/add_class.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
node[shape=box, style="rounded,filled,bold"]; 4 4 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 5 5 splines=ortho;
nodesep=1.4; 6 6 nodesep=1.4;
labelloc="t"; 7 7 labelloc="t";
label = "[A3] Add a Class"; 8 8 label = "[A3] Add a Class";
"Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 9 9 "Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, 10 10 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond,
fixedsize=true, width=1.4, height=1.4]; 11 11 fixedsize=true, width=1.4, height=1.4];
"POST"[shape=none]; 12 12 "POST"[shape=none];
labelfloat=true; 13 13 labelfloat=true;
lp=100; 14 14 lp=100;
15 15
"Permission Denied: \n User cannot be enrolled in class"[shape=none] 16 16 "Permission Denied: \n User cannot be enrolled in class"[shape=none]
"Success! \n User is added to class"[shape=none]; 17 17 "Success! \n User is added to class"[shape=none];
"SUCCESS"[shape=none]; 18 18 "SUCCESS"[shape=none];
"FAILURE"[shape=none]; 19 19 "FAILURE"[shape=none];
20 20
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, 21 21 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond,
fixedsize=true, width=1.4, height=1.4]; 22 22 fixedsize=true, width=1.4, height=1.4];
"WhiteListCheck"[center=true, fillcolor="#aaaaff", style=filled, style=filled]; 23 23 "WhiteListCheck"[center=true, fillcolor="#aaaaff", style=filled, style=filled];
"Sidebar Menu" -> "POST"; 24 24 "Sidebar Menu" -> "POST"[dir=none];
"POST" -> "Controller"; 25 25 "POST" -> "Controller";
"Controller" -> "FAILURE"; 26 26 "Controller" -> "FAILURE"[dir=none];
"FAILURE" -> "Sidebar Menu"; 27 27 "FAILURE" -> "Sidebar Menu";
"Controller" -> "SUCCESS"; 28 28 "Controller" -> "SUCCESS"[dir=none];
"SUCCESS"->"WhiteListCheck"; 29 29 "SUCCESS"->"WhiteListCheck";
"WhiteListCheck" -> "Permission Denied: \n User cannot be enrolled in class"; 30 30 "WhiteListCheck" -> "Permission Denied: \n User cannot be enrolled in class"[dir=none];
"WhiteListCheck" -> "Success! \n User is added to class"; 31 31 "WhiteListCheck" -> "Success! \n User is added to class"[dir=none];
"Success! \n User is added to class" -> "Sidebar Menu"; 32 32 "Success! \n User is added to class" -> "Sidebar Menu";
"Permission Denied: \n User cannot be enrolled in class" -> "Sidebar Menu"; 33 33 "Permission Denied: \n User cannot be enrolled in class" -> "Sidebar Menu";
34 34
} 35 35 }
36 36
screen_sequence_diagrams/change_password.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
node[shape=box, style="rounded,filled,bold"]; 4 4 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 5 5 splines=ortho;
nodesep=1.4; 6 6 nodesep=1.4;
labelloc="t"; 7 7 labelloc="t";
label="[A5] Change password & [A6] Reset password"; 8 8 label="[A5] Change password & [A6] Reset password";
"Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 9 9 "Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond]; 10 10 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond];
"POST"[shape=none]; 11 11 "POST"[shape=none];
labelfloat=true; 12 12 labelfloat=true;
lp=100; 13 13 lp=100;
14 14
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 15 15 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 16 16 fixedsize=true, width=1.4, height=1.4];
"Sidebar Menu/Settings" -> "POST"; 17 17 "Sidebar Menu/Settings" -> "POST"[dir=none];
"POST" -> "Controller"; 18 18 "POST" -> "Controller";
"Controller" -> "Email"; 19 19 "Controller" -> "Email";
"Failure: User did not\nchange password"[shape=none]; 20 20 "Failure: User did not\nchange password"[shape=none];
"Email" -> "Failure: User did not\nchange password"; 21 21 "Email" -> "Failure: User did not\nchange password"[dir=none];
"Failure: User did not\nchange password" -> "Sidebar Menu"; 22 22 "Failure: User did not\nchange password" -> "Sidebar Menu";
"Success: User \nchanged password"[shape=none]; 23 23 "Success: User \nchanged password"[shape=none];
"Email" -> "Success: User \nchanged password"; 24 24 "Email" -> "Success: User \nchanged password"[dir=none];
"Success: User \nchanged password" -> "Sidebar Menu"; 25 25 "Success: User \nchanged password" -> "Sidebar Menu";
} 26 26 }
27 27
screen_sequence_diagrams/configure_account_notifications.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
labelloc="t"; 4 4 labelloc="t";
label="[R3] Configure Account Notifications" 5 5 label="[R3] Configure Account Notifications"
node[shape=box, style="rounded,filled,bold"]; 6 6 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 7 7 splines=ortho;
nodesep=2.5; 8 8 nodesep=2.5;
ranksep=0.45; 9 9 ranksep=0.45;
"Account Settings"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 10 10 "Account Settings"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Account Settings" -> "PATCH /api/me/settings"; 11 11 "Account Settings" -> "PATCH /api/me/settings"[dir=none];
12 12
"views.update_settings" -> "New settings valid?"; 13 13 "views.update_settings" -> "New settings valid?";
"New settings valid?" -> "Yes\nSUCCESS"; 14 14 "New settings valid?" -> "Yes\nSUCCESS"[dir=none];
"New settings valid?" -> "No\nFAILURE"; 15 15 "New settings valid?" -> "No\nFAILURE"[dir=none];
"PATCH /api/me/settings" -> "views.update_settings"; 16 16 "PATCH /api/me/settings" -> "views.update_settings";
"No\nFAILURE" -> "Account Settings"; 17 17 "No\nFAILURE" -> "Account Settings";
"Yes\nSUCCESS" -> "Save settings"; 18 18 "Yes\nSUCCESS" -> "Save settings";
"Save settings" -> "Account Settings"; 19 19 "Save settings" -> "Account Settings";
"Yes\nSUCCESS"[shape=none]; 20 20 "Yes\nSUCCESS"[shape=none];
"No\nFAILURE"[shape=none]; 21 21 "No\nFAILURE"[shape=none];
"PATCH /api/me/settings"[shape=none]; 22 22 "PATCH /api/me/settings"[shape=none];
labelfloat=true; 23 23 labelfloat=true;
lp=100; 24 24 lp=100;
"views.update_settings"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, fixedsize=true, width=2.0, height=2.0]; 25 25 "views.update_settings"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, fixedsize=true, width=2.0, height=2.0];
} 26 26 }
27 27
screen_sequence_diagrams/contact_admin.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
// Title 2 2 // Title
labelloc="t"; 3 3 labelloc="t";
label="[A9] Contact Admin"; 4 4 label="[A9] Contact Admin";
5 5
// Other 6 6 // Other
ratio=0.75; 7 7 ratio=0.75;
node[shape=box, style="rounded,filled,bold"]; 8 8 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 9 9 splines=ortho;
nodesep=1.4; 10 10 nodesep=1.4;
"Instructor's Email Client"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 11 11 "Instructor's Email Client"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Admin's Message Box"[center=true, fillcolor="#aaaaff", style=filled]; 12 12 "Admin's Message Box"[center=true, fillcolor="#aaaaff", style=filled];
"EMAIL"[shape=none]; 13 13 "EMAIL"[shape=none];
"MESSAGE"[shape=none]; 14 14 "MESSAGE"[shape=none];
labelfloat=true; 15 15 labelfloat=true;
lp=100; 16 16 lp=100;
17 17
// Graph 18 18 // Graph
"Instructor's Email Client" -> "EMAIL"; 19 19 "Instructor's Email Client" -> "EMAIL"[dir=none];
"EMAIL" -> "Admin's Message Box"; 20 20 "EMAIL" -> "Admin's Message Box";
"Admin's Message Box" -> "MESSAGE"; 21 21 "Admin's Message Box" -> "MESSAGE"[dir=none];
"MESSAGE" -> "Instructor's Email Client"; 22 22 "MESSAGE" -> "Instructor's Email Client";
} 23 23 }
screen_sequence_diagrams/drop_class.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
// rankdir="LR"; 3 3 // rankdir="LR";
node[shape=box, style="rounded,filled,bold"]; 4 4 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 5 5 splines=ortho;
nodesep=1.4; 6 6 nodesep=1.4;
labelloc="t"; 7 7 labelloc="t";
label="[A4] Drop a class"; 8 8 label="[A4] Drop a class";
"Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 9 9 "Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, 10 10 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond,
fixedsize=true, width=1.4, height=1.4]; 11 11 fixedsize=true, width=1.4, height=1.4];
"User Check"[center=true, fillcolor="#aaaaff", style=filled]; 12 12 "User Check"[center=true, fillcolor="#aaaaff", style=filled];
//labelfloat=true; 13 13 //labelfloat=true;
//lp=100; 14 14 //lp=100;
15 15
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, 16 16 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond,
fixedsize=true, width=1.4, height=1.4]; 17 17 fixedsize=true, width=1.4, height=1.4];
"Sidebar Menu" -> "Controller" [label=" DELETE"]; 18 18 "Sidebar Menu" -> "Controller" [label=" DELETE"];
"Controller" -> "User Check"; 19 19 "Controller" -> "User Check";
"User did not\ndrop class"[shape=none]; 20 20 "User did not\ndrop class"[shape=none];
"User Check" -> "User did not\ndrop class"; 21 21 "User Check" -> "User did not\ndrop class"[dir=none];
"User did not\ndrop class" -> "Sidebar Menu"; 22 22 "User did not\ndrop class" -> "Sidebar Menu";
"User successfully\ndropped class"[shape=none]; 23 23 "User successfully\ndropped class"[shape=none];
"User Check" -> "User successfully\ndropped class"; 24 24 "User Check" -> "User successfully\ndropped class"[dir=none];
"User successfully\ndropped class" -> "Sidebar Menu"; 25 25 "User successfully\ndropped class" -> "Sidebar Menu";
} 26 26 }
27 27
screen_sequence_diagrams/edit_flashcard.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
labelloc="t"; 4 4 labelloc="t";
label="[F2] Edit Flashcard"; 5 5 label="[F2] Edit Flashcard";
node[shape=box, style="rounded,filled,bold"]; 6 6 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 7 7 splines=ortho;
nodesep=1.0; 8 8 nodesep=1.0;
"View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 9 9 "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 10 10 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 11 11 fixedsize=true, width=1.4, height=1.4];
12 "POST"[shape=none];
12 13
"View Deck" -> "Edit Flashcard Button"; 13 14 "View Deck" -> "Edit Flashcard Button";
"Edit Flashcard Button" -> "Flashcard Changes"; 14 15 "Edit Flashcard Button" -> "Flashcard Changes";
"Flashcard Changes" -> "POST"; 15 16 "Flashcard Changes" -> "POST"[dir=none];
"POST" -> "Controller"; 16 17 "POST" -> "Controller";
17 18
//Only blanks(mask) altered 18 19 //Only blanks(mask) altered
"Only mask altered"[shape=none]; 19 20 "Only mask altered"[shape=none];
"Server creates New FlashcardMask object"[fillcolor="#aaaaff", style=filled,pos="0,0!"]; 20 21 "Server creates New FlashcardMask object"[fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller" -> "Only mask altered"; 21 22 "Controller" -> "Only mask altered"[dir=none];
"Only mask altered" -> "Server creates New FlashcardMask object"; 22 23 "Only mask altered" -> "Server creates New FlashcardMask object";
"Server creates New FlashcardMask object" -> "View Deck"; 23 24 "Server creates New FlashcardMask object" -> "View Deck";
24 25
//Text changed 25 26 //Text changed
"Text or material date altered"[shape=none]; 26 27 "Text or material date altered"[shape=none];
"Controller" -> "Text or material date altered"; 27 28 "Controller" -> "Text or material date altered"[dir=none];
"Text or material date altered" -> "Create New Flashcard"; 28 29 "Text or material date altered" -> "Create New Flashcard";
"Create New Flashcard" -> "Push to Feed"; 29 30 "Create New Flashcard" -> "Push to Feed";
"Push to Feed"-> "Add to User Deck"; 30 31 "Push to Feed"-> "Add to User Deck";
"Add to User Deck" -> "View Deck"; 31 32 "Add to User Deck" -> "View Deck";
labelfloat=true; 32 33 labelfloat=true;
lp=100; 33 34 lp=100;
} 34 35 }
screen_sequence_diagrams/filter_cards.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
node[shape=box, style="rounded,filled,bold"]; 4 4 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 5 5 splines=ortho;
nodesep=1.4; 6 6 nodesep=1.4;
labelloc="t"; 7 7 labelloc="t";
label="[F5] Filter cards"; 8 8 label="[F5] Filter cards";
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond]; 9 9 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond];
labelfloat=true; 10 10 labelfloat=true;
lp=100; 11 11 lp=100;
12 12
13 13
"Filter"[shape=none]; 14 14 "Filter"[shape=none];
"Filtered cards"[shape=none]; 15 15 "Filtered cards"[shape=none];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 16 16 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 17 17 fixedsize=true, width=1.4, height=1.4];
18 18
"Feed" -> "Filter"; 19 19 "Feed" -> "Filter"[dir=none];
"Filter" -> "Controller"; 20 20 "Filter" -> "Controller";
"Controller" -> "Filtered cards"; 21 21 "Controller" -> "Filtered cards"[dir=none];
"Filtered cards" -> "Feed"; 22 22 "Filtered cards" -> "Feed";
screen_sequence_diagrams/fix_flashcard.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
labelloc="t"; 4 4 labelloc="t";
label="[F7] Fix Flashcard"; 5 5 label="[F7] Fix Flashcard";
node[shape=box, style="rounded,filled,bold"]; 6 6 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 7 7 splines=ortho;
nodesep=1.0; 8 8 nodesep=0.4;
9 ranksep=0.1;
"View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 9 10 "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"View Deck" -> "Edit Flashcard"; 10 11 "View Deck" -> "Edit Flashcard";
"Edit Flashcard" -> "POST /api/flashcard/{pk}/edit"; 11 12 "Edit Flashcard" -> "POST /api/flashcard/{pk}/edit"[dir=none];
"POST /api/flashcard/{pk}/edit" -> "FlashcardViewSet.edit"; 12 13 "POST /api/flashcard/{pk}/edit" -> "FlashcardViewSet.edit";
"FlashcardViewSet.edit" -> "Text or material date altered"; 13 14 "FlashcardViewSet.edit" -> "Text or material date altered"[dir=none];
"FlashcardViewSet.edit" -> "Only mask altered"; 14 15 "FlashcardViewSet.edit" -> "Only mask altered"[dir=none];
"Only mask altered" -> "Update UserFlashcard object"; 15 16 "Only mask altered" -> "Update UserFlashcard object";
"Text or material date altered" -> "Create new Flashcard with prev pointer\nNotify all users who've pulled the card"; 16 17 "Text or material date altered" -> "Create new Flashcard with prev pointer\nNotify all users who've pulled the card";
"Only mask altered"[shape=none]; 17 18 "Only mask altered"[shape=none];
"Text or material date altered"[shape=none]; 18 19 "Text or material date altered"[shape=none];
"Update UserFlashcard object" -> "View Deck"; 19 20 "Update UserFlashcard object" -> "View Deck";
"Create new Flashcard with prev pointer\nNotify all users who've pulled the card" -> "View Deck"; 20 21 "Create new Flashcard with prev pointer\nNotify all users who've pulled the card" -> "View Deck";
"POST /api/flashcard/{pk}/edit"[shape=none]; 21 22 "POST /api/flashcard/{pk}/edit"[shape=none];
labelfloat=true; 22 23 labelfloat=true;
lp=100; 23 24 lp=100;
"FlashcardViewSet.edit"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=2.2, height=2.2]; 24 25 "FlashcardViewSet.edit"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=2.2, height=2.2];
26 "Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"WhiteListCheck"[center=true, fillcolor="#aaaaff", style=filled, style=filled]; 25 27 "WhiteListCheck"[center=true, fillcolor="#aaaaff", style=filled, style=filled];
"Sidebar Menu" -> "POST"; 26 28 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=1.1, height=1.1];
29 "POST"[shape=none];
30 "FAILURE"[shape=none];
31 "SUCCESS"[shape=none];
32 "Sidebar Menu" -> "POST"[dir=none];
"POST" -> "Controller"; 27 33 "POST" -> "Controller";
"Controller" -> "FAILURE"; 28 34 "Controller" -> "FAILURE"[dir=none];
"FAILURE" -> "Sidebar Menu"; 29 35 "FAILURE" -> "Sidebar Menu";
"Controller" -> "SUCCESS"; 30 36 "Controller" -> "SUCCESS"[dir=none];
"SUCCESS"->"WhiteListCheck"; 31 37 "SUCCESS"->"WhiteListCheck";
"WhiteListCheck" -> "Permission Denied: \n User cannot be enrolled in class"; 32 38 "WhiteListCheck" -> "Permission Denied: \n User cannot be enrolled in class";
"WhiteListCheck" -> "Success! \n User is added to class"; 33 39 "WhiteListCheck" -> "Success! \n User is added to class";
"Success! \n User is added to class" -> "Sidebar Menu"; 34 40 "Success! \n User is added to class" -> "Sidebar Menu";
"Permission Denied: \n User cannot be enrolled in class" -> "Sidebar Menu"; 35 41 "Permission Denied: \n User cannot be enrolled in class" -> "Sidebar Menu";
} 36 42 }
37 43
screen_sequence_diagrams/flag_inappropriate_cards.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
labelloc="t"; 4 4 labelloc="t";
label="[F4] Flag Inappropriate Cards"; 5 5 label="[F4] Flag Inappropriate Cards";
node[shape=box, style="rounded,filled,bold"]; 6 6 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 7 7 splines=ortho;
nodesep=1.0; 8 8 nodesep=2.0;
9 ranksep=0.4;
"Live Feed"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 9 10 "Live Feed"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 10 11 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 11 12 fixedsize=true, width=1.4, height=1.4];
"Server"[fillcolor="#aaaaff", style=filled,pos="0,0!"]; 12 13 "Server"[fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Flashcard Hidden from Feed"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 13 14 "Flashcard Hidden from Feed"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"POST"[shape=none]; 14 15 "POST"[shape=none];
labelfloat=true; 15 16 labelfloat=true;
lp=100; 16 17 lp=100;
17 18
"SUCCESS"[shape=none]; 18 19 "SUCCESS"[shape=none];
"FAILURE"[shape=none]; 19 20 "FAILURE"[shape=none];
20 21
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 21 22 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 22 23 fixedsize=true, width=1.4, height=1.4];
"Flashcard Hidden from Feed"[center=true, fillcolor="#aaaaff", style=filled]; 23 24 "Flashcard Hidden from Feed"[center=true, fillcolor="#aaaaff", style=filled];
"POST"[shape=none]; 24 25 "POST"[shape=none];
"Live Feed" -> "Flag as Inappropriate"; 25 26 "Live Feed" -> "Flag as Inappropriate";
"Flag as Inappropriate" -> "POST"; 26 27 "Flag as Inappropriate" -> "POST"[dir=none];
"POST" -> "Controller"; 27 28 "POST" -> "Controller";
"Controller" -> "FAILURE"; 28 29 "Controller" -> "FAILURE"[dir=none];
"FAILURE" -> "Live Feed"; 29 30 "FAILURE" -> "Live Feed";
"Controller" -> "POST"; 30 31 "Controller" -> "POST"[dir=none];
"POST" -> "Server"; 31 32 "POST" -> "Server";
"Server"-> "SUCCESS"; 32 33 "Server"-> "SUCCESS"[dir=none];
"SUCCESS" -> "Flashcard Hidden from Feed"; 33 34 "SUCCESS" -> "Flashcard Hidden from Feed";
"Flashcard Hidden from Feed" -> "Server creates a FlashcardReport object"; 34 35 "Flashcard Hidden from Feed" -> "Server creates a FlashcardReport object";
"Server creates a FlashcardReport object" -> "Live Feed"; 35 36 "Server creates a FlashcardReport object" -> "Live Feed";
36 37
} 37 38 }
39
screen_sequence_diagrams/hide_card.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
node[shape=box, style="rounded,filled,bold"]; 4 4 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 5 5 splines=ortho;
nodesep=1.4; 6 6 nodesep=1.4;
labelloc="t"; 7 7 labelloc="t";
label="[F8] Hide Card from Feed"; 8 8 label="[F8] Hide Card from Feed";
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 9 9 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 10 10 fixedsize=true, width=1.4, height=1.4];
labelfloat=true; 11 11 labelfloat=true;
lp=100; 12 12 lp=100;
13 13
"POST"[shape=none]; 14 14 "POST"[shape=none];
"FAILURE: card no longer exists in database"[shape=none]; 15 15 "FAILURE: card no longer\nexists in database"[shape=none];
"SUCCESS: card successfully hidden"[shape=none]; 16 16 "SUCCESS: card\nsuccessfully hidden"[shape=none];
17 17
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 18 18 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 19 19 fixedsize=true, width=1.4, height=1.4];
"Feed" -> "POST"; 20 20 "Feed" -> "POST"[dir=none];
"POST" -> "Controller"; 21 21 "POST" -> "Controller";
"Controller" -> "FAILURE: card no longer exists in database"; 22 22 "Controller" -> "FAILURE: card no longer\nexists in database"[dir=none];
"Controller" -> "SUCCESS: card successfully hidden"; 23 23 "Controller" -> "SUCCESS: card\nsuccessfully hidden"[dir=none];
"FAILURE: card no longer exists in database" -> "Feed"; 24 24 "FAILURE: card no longer\nexists in database" -> "Feed";
"SUCCESS: card successfully hidden" -> "Feed"; 25 25 "SUCCESS: card\nsuccessfully hidden" -> "Feed";
} 26 26 }
27 27
screen_sequence_diagrams/pull_flashcard.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
labelloc="t"; 4 4 labelloc="t";
label="[F3] Pull Flashcard"; 5 5 label="[F3] Pull Flashcard";
node[shape=box, style="rounded,filled,bold"]; 6 6 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 7 7 splines=ortho;
nodesep=1.0; 8 8 nodesep=1.0;
"Pull Flashcard Button"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 9 9 "Pull Flashcard Button"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 10 10 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 11 11 fixedsize=true, width=1.4, height=1.4];
"Server"[fillcolor="#aaaaff", style=filled,pos="0,0!"]; 12 12 "Server"[fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Flashcard added to User's Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 13 13 "Flashcard added to User's Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"POST"[shape=none]; 14 14 "POST"[shape=none];
labelfloat=true; 15 15 labelfloat=true;
lp=100; 16 16 lp=100;
17 17
"Update Card Rating"[shape=none]; 18 18 "Update Card Rating"[shape=none];
"SUCCESS"[shape=none]; 19 19 "SUCCESS"[shape=none];
"FAILURE"[shape=none]; 20 20 "FAILURE"[shape=none];
21 21
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 22 22 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 23 23 fixedsize=true, width=1.4, height=1.4];
"Flashcard added to User's Deck"[center=true, fillcolor="#aaaaff", style=filled]; 24 24 "Flashcard added to User's Deck"[center=true, fillcolor="#aaaaff", style=filled];
"POST"[shape=none]; 25 25 "POST"[shape=none];
"Pull Flashcard Button" -> "POST"; 26 26 "Pull Flashcard Button" -> "POST"[dir=none];
"POST" -> "Controller"; 27 27 "POST" -> "Controller";
"Controller" -> "FAILURE"; 28 28 "Controller" -> "FAILURE"[dir=none];
"FAILURE" -> "Pull Flashcard Button"; 29 29 "FAILURE" -> "Pull Flashcard Button";
"Controller" -> "Hide Flashcard from Feed"; 30 30 "Controller" -> "Hide Flashcard from Feed";
"POST" -> "Server"; 31 31 "POST" -> "Server";
"Server"-> "SUCCESS"; 32 32 "Server"-> "SUCCESS"[dir=none];
"SUCCESS" -> "Flashcard added to User's Deck"; 33 33 "SUCCESS" -> "Flashcard added to User's Deck";
"Flashcard added to User's Deck" -> "Update Card Rating" 34 34 "Flashcard added to User's Deck" -> "Update Card Rating"[dir=none];
"Update Card Rating" -> "Pull Flashcard Button"; 35 35 "Update Card Rating" -> "Pull Flashcard Button";
36
} 37 36 }
37
screen_sequence_diagrams/push_flashcard.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
labelloc="t"; 4 4 labelloc="t";
label="[F1] Push Flashcard"; 5 5 label="[F1] Push Flashcard";
node[shape=box, style="rounded,filled,bold"]; 6 6 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 7 7 splines=ortho;
nodesep=1.0; 8 8 nodesep=1.0;
"Push Flashcard Button"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 9 9 "Push Flashcard Button"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 10 10 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 11 11 fixedsize=true, width=1.4, height=1.4];
"Server"[fillcolor="#aaaaff", style=filled,pos="0,0!"]; 12 12 "Server"[fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Flashcard Record \n Created in Database"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 13 13 "Flashcard Record \n Created in Database"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"POST"[shape=none]; 14 14 "POST"[shape=none];
labelfloat=true; 15 15 labelfloat=true;
lp=100; 16 16 lp=100;
17 17
"Card Published in Feed"[shape=none]; 18 18 "Card Published in Feed"[shape=none];
"SUCCESS"[shape=none]; 19 19 "SUCCESS"[shape=none];
"FAILURE"[shape=none]; 20 20 "FAILURE"[shape=none];
21 21
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 22 22 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 23 23 fixedsize=true, width=1.4, height=1.4];
"Flashcard Record \n Created in Database"[center=true, fillcolor="#aaaaff", style=filled]; 24 24 "Flashcard Record \n Created in Database"[center=true, fillcolor="#aaaaff", style=filled];
"POST"[shape=none]; 25 25 "POST"[shape=none];
"Push Flashcard Button" -> "POST"; 26 26 "Push Flashcard Button" -> "POST"[dir=none];
"POST" -> "Controller"; 27 27 "POST" -> "Controller";
"Controller" -> "FAILURE"; 28 28 "Controller" -> "FAILURE"[dir=none];
"FAILURE" -> "Push Flashcard Button"; 29 29 "FAILURE" -> "Push Flashcard Button";
"Controller" -> "POST"; 30 30 "Controller" -> "POST"[dir=none];
"POST" -> "Server"; 31 31 "POST" -> "Server";
"Server"-> "SUCCESS"; 32 32 "Server"-> "SUCCESS"[dir=none];
"SUCCESS" -> "Flashcard Record \n Created in Database"; 33 33 "SUCCESS" -> "Flashcard Record \n Created in Database";
"Flashcard Record \n Created in Database" -> "Card Published in Feed"; 34 34 "Flashcard Record \n Created in Database" -> "Card Published in Feed"[dir=none];
"Card Published in Feed" -> "Push Flashcard Button"; 35 35 "Card Published in Feed" -> "Push Flashcard Button";
36 36
} 37 37 }
38 38
screen_sequence_diagrams/remove_card.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
labelloc="t"; 4 4 labelloc="t";
label="[D4] Remove a Card from the Deck"; 5 5 label="[D4] Remove a Card from the Deck";
node[shape=box, style="rounded,filled,bold"]; 6 6 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 7 7 splines=ortho;
nodesep=1.0; 8 8 nodesep=1.0;
"View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 9 9 "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 10 10 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 11 11 fixedsize=true, width=1.4, height=1.4];
"Server"[fillcolor="#aaaaff", style=filled,pos="0,0!"]; 12 12 "Server"[fillcolor="#aaaaff", style=filled,pos="0,0!"];
"POST"[shape=none]; 13 13 "POST"[shape=none];
labelfloat=true; 14 14 labelfloat=true;
lp=100; 15 15 lp=100;
16 16
"DELETE"[shape=none]; 17 17 "DELETE"[shape=none];
"FAILURE"[shape=none]; 18 18 "FAILURE"[shape=none];
19 19
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 20 20 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 21 21 fixedsize=true, width=1.4, height=1.4];
"POST"[shape=none]; 22 22 "POST"[shape=none];
"Card Removed from Deck"[shape=none]; 23 23 "Card Removed from Deck"[shape=none];
"Flashcard Position Updated in Live Feed"[shape=none]; 24 24 "Flashcard Position\nUpdated in Live Feed"[shape=none];
"View Deck" -> "POST"; 25 25 "View Deck" -> "POST"[dir=none];
"POST" -> "Controller"; 26 26 "POST" -> "Controller";
"Controller" -> "FAILURE"; 27 27 "Controller" -> "FAILURE"[dir=none];
"FAILURE" -> "View Deck"; 28 28 "FAILURE" -> "View Deck";
"Controller" -> "Remove Flashcard Button"; 29 29 "Controller" -> "Remove Flashcard Button";
"Remove Flashcard Button" -> "DELETE"; 30 30 "Remove Flashcard Button" -> "DELETE"[dir=none];
"DELETE" -> "Server"; 31 31 "DELETE" -> "Server";
"Server" -> "Card Removed from Deck"; 32 32 "Server" -> "Card Removed from Deck"[dir=none];
"Card Removed from Deck" -> "Flashcard Position Updated in Live Feed"; 33 33 "Card Removed from Deck" -> "Flashcard Position\nUpdated in Live Feed"[dir=none];
"Flashcard Position Updated in Live Feed" -> "View Deck"; 34 34 "Flashcard Position\nUpdated in Live Feed" -> "View Deck";
} 35 35 }
36
screen_sequence_diagrams/review_notification.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
node[shape = box]; 4 4 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 5 5 splines=ortho;
nodesep=1.4; 6 6 nodesep=1.4;
"Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 7 7 "Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Server"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 8 8 "Server"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
9 9
"Notification"[shape=none]; 10 10 "Notification"[shape=none];
"UPDATE"[shape=none]; 11 11 "UPDATE"[shape=none];
12 12
"Server" -> "Notification"; 13 13 "Server" -> "Notification"[dir=none];
"Notification" -> "Controller"; 14 14 "Notification" -> "Controller";
"Controller" -> "UPDATE"; 15 15 "Controller" -> "UPDATE"[dir=none];
"UPDATE" -> "Sidebar Menu"; 16 16 "UPDATE" -> "Sidebar Menu";
17 17
} 18 18 }
screen_sequence_diagrams/section_limit_access.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
// Title 2 2 // Title
labelloc="t"; 3 3 labelloc="t";
label="[A7] Limit Section Access"; 4 4 label="[A7] Limit Section Access";
5 5
// Other 6 6 // Other
ratio=0.75; 7 7 ratio=0.75;
node[shape=box, style="rounded,filled,bold"]; 8 8 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 9 9 splines=ortho;
nodesep=1.4; 10 10 nodesep=1.4;
"Instructor's Email Client"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 11 11 "Instructor's\nEmail Client"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Admins Page"[center=true, fillcolor="#aaaaff", style=filled]; 12 12 "Admins Page"[center=true, fillcolor="#aaaaff", style=filled];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, 13 13 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond,
fixedsize=true, width=1.8, height=1.8]; 14 14 fixedsize=true, width=1.8, height=1.8];
"EMAIL"[shape=none]; 15 15 "EMAIL"[shape=none];
"POST"[shape=none]; 16 16 "POST"[shape=none];
labelfloat=true; 17 17 labelfloat=true;
lp=100; 18 18 lp=100;
19 19
"SUCCESS"[shape=none]; 20 20 "SUCCESS"[shape=none];
"FAILURE"[shape=none]; 21 21 "FAILURE"[shape=none];
22 22
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 23 23 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.5, height=1.5]; 24 24 fixedsize=true, width=1.5, height=1.5];
25 25
// Graph 26 26 // Graph
"Instructor's Email Client" -> "EMAIL"; 27 27 "Instructor's\nEmail Client" -> "EMAIL"[dir=none];
"EMAIL" -> "Admins Page"; 28 28 "EMAIL" -> "Admins Page";
"Admins Page" -> "POST"; 29 29 "Admins Page" -> "POST"[dir=none];
"POST" -> "Controller"; 30 30 "POST" -> "Controller";
31 31
"Controller" -> "SUCCESS"; 32 32 "Controller" -> "SUCCESS"[dir=none];
"SUCCESS" -> "Instructor's Email Client"; 33 33 "SUCCESS" -> "Instructor's\nEmail Client";
34 34
"Controller" -> "FAILURE"; 35 35 "Controller" -> "FAILURE"[dir=none];
"FAILURE" -> "Admins Page"; 36 36 "FAILURE" -> "Admins Page";
} 37 37 }
screen_sequence_diagrams/study_deck.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
// Title 2 2 // Title
labelloc="t" 3 3 labelloc="t"
label="[R1] Study Deck" 4 4 label="[R1] Study Deck"
5 5
ratio=0.75; 6 6 ratio=0.75;
//rankdir="LR"; 7 7 //rankdir="LR";
node[shape=box, style="rounded,filled,bold"]; 8 8 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 9 9 splines=ortho;
nodesep=1.4; 10 10 nodesep=1.4;
"Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 11 11 "Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"ClassView"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 12 12 "ClassView"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"StudyView Blank"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 13 13 "StudyView Blank"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"StudyView Response"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 14 14 "StudyView Response"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 15 15 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 16 16 fixedsize=true, width=1.4, height=1.4];
"POST"[shape=none]; 17 17 "POST"[shape=none];
labelfloat=true; 18 18 labelfloat=true;
lp=100; 19 19 lp=100;
20 20
"SUCCESS\nUser has at least a card in the deck."[shape=none]; 21 21 "SUCCESS\nUser has at least a card in the deck."[shape=none];
"FAILURE:\nUser has no card in the deck."[shape=none]; 22 22 "FAILURE:\nUser has no card in the deck."[shape=none];
23 23
"Sidebar Menu" -> "ClassView"; 24 24 "Sidebar Menu" -> "ClassView";
"ClassView" -> "POST"; 25 25 "ClassView" -> "POST"[dir=none];
"POST" -> "Controller"; 26 26 "POST" -> "Controller";
"Controller" -> "FAILURE:\nUser has no card in the deck."; 27 27 "Controller" -> "FAILURE:\nUser has no card in the deck."[dir=none];
"Controller" -> "SUCCESS\nUser has at least a card in the deck."; 28 28 "Controller" -> "SUCCESS\nUser has at least a card in the deck."[dir=none];
"FAILURE:\nUser has no card in the deck." -> "Sidebar Menu"; 29 29 "FAILURE:\nUser has no card in the deck." -> "Sidebar Menu";
"SUCCESS\nUser has at least a card in the deck." -> "StudyView Blank"; 30 30 "SUCCESS\nUser has at least a card in the deck." -> "StudyView Blank";
"StudyView Blank" -> "POST"; 31 31 "StudyView Blank" -> "POST"[dir=none];
"Controller" -> "StudyView Response"; 32 32 "Controller" -> "StudyView Response";
"StudyView Response" -> "POST"; 33 33 "StudyView Response" -> "POST"[dir=none];
"Controller" -> "StudyView Blank"; 34 34 "Controller" -> "StudyView Blank";
35 35
} 36 36 }
37 37
screen_sequence_diagrams/user_login_out.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
labelloc="t"; 2 2 labelloc="t";
label="[A2] Login & [A8] Logout"; 3 3 label="[A2] Login & [A8] Logout";
4 4
// Other 5 5 // Other
ratio=0.75; 6 6 ratio=0.75;
node[shape=box, style="rounded,filled,bold"]; 7 7 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 8 8 splines=ortho;
nodesep=1.4; 9 9 nodesep=1.4;
"Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 10 10 "Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Login/Register Page"[center=true, fillcolor="#aaaaff", style=filled]; 11 11 "Login/Register Page"[center=true, fillcolor="#aaaaff", style=filled];
"Logout Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, 12 12 "Logout Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond,
fixedsize=true, width=1.8, height=1.8]; 13 13 fixedsize=true, width=1.8, height=1.8];
"Login Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, 14 14 "Login Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond,
fixedsize=true, width=1.8, height=1.8]; 15 15 fixedsize=true, width=1.8, height=1.8];
"POST"[shape=none]; 16 16 "POST"[shape=none];
labelfloat=true; 17 17 labelfloat=true;
lp=100; 18 18 lp=100;
19 19
"SUCCESS:\n User logged in"[shape=none]; 20 20 "SUCCESS:\n User logged in"[shape=none];
"SUCCESS:\n User logged out"[shape=none]; 21 21 "SUCCESS:\n User logged out"[shape=none];
"Logout FAILURE"[shape=none]; 22 22 "Logout FAILURE"[shape=none];
"Login FAILURE"[shape=none]; 23 23 "Login FAILURE"[shape=none];
24 24
"Logout Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 25 25 "Logout Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.8, height=1.8]; 26 26 fixedsize=true, width=1.8, height=1.8];
"Login Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 27 27 "Login Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.8, height=1.8]; 28 28 fixedsize=true, width=1.8, height=1.8];
29 29
// Graph 30 30 // Graph
"Sidebar Menu" -> "POST"; 31 31 "Sidebar Menu" -> "POST"[dir=none];
"POST" -> "Logout Controller"; 32 32 "POST" -> "Logout Controller";
"Logout Controller" -> "Logout FAILURE"; 33 33 "Logout Controller" -> "Logout FAILURE"[dir=none];
"Logout FAILURE" -> "Sidebar Menu"; 34 34 "Logout FAILURE" -> "Sidebar Menu";
35 35
"Logout Controller" -> "SUCCESS:\n User logged out"; 36 36 "Logout Controller" -> "SUCCESS:\n User logged out"[dir=none];
"SUCCESS:\n User logged out" -> "Login/Register Page" 37 37 "SUCCESS:\n User logged out" -> "Login/Register Page";
38 38
"Login/Register Page" -> "Login Controller" 39 39 "Login/Register Page" -> "Login Controller";
"Login Controller" -> "SUCCESS:\n User logged in" 40 40 "Login Controller" -> "SUCCESS:\n User logged in"[dir=none];
"SUCCESS:\n User logged in" -> "Sidebar Menu" 41 41 "SUCCESS:\n User logged in" -> "Sidebar Menu";
42 42
"Login Controller" -> "Login FAILURE" 43 43 "Login Controller" -> "Login FAILURE"[dir=none];
"Login FAILURE" -> "Login/Register Page" 44 44 "Login FAILURE" -> "Login/Register Page";
} 45 45 }
46 46
screen_sequence_diagrams/user_register.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
// Title 2 2 // Title
//"Login/Logout"[center=true,fillcolor="#ffffff",pos="0,0!",shape=none,fontsize=20]; 3 3 //"Login/Logout"[center=true,fillcolor="#ffffff",pos="0,0!",shape=none,fontsize=20];
labelloc="t"; 4 4 labelloc="t";
label="[A1] User Registration"; 5 5 label="[A1] User Registration";
6 6
// Other 7 7 // Other
ratio=0.75; 8 8 ratio=0.75;
node[shape=box, style="rounded,filled,bold"]; 9 9 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 10 10 splines=ortho;
// nodesep=1.3; 11 11 // nodesep=1.3;
nodesep=3.0; 12 12 nodesep=3.0;
ranksep=0.05; 13 13 ranksep=0.05;
"Login/Register Page"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 14 14 "Login/Register Page"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"POST"[shape=none]; 15 15 "POST"[shape=none];
labelfloat=true; 16 16 labelfloat=true;
lp=100; 17 17 lp=100;
18 18
"SUCCESS:\nValid, send JSON."[shape=none]; 19 19 "SUCCESS:\nValid, send JSON."[shape=none];
"SUCCESS:\nValid, unverified user created.\nEmail verification message displayed."[shape=none]; 20 20 "SUCCESS:\nValid, unverified user created.\nEmail verification message displayed."[shape=none];
"FAILURE"[shape=none]; 21 21 "FAILURE"[shape=none];
"FAILURE:\nData invalid"[shape=none]; 22 22 "FAILURE:\nData invalid"[shape=none];
23 23
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 24 24 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.5, height=1.5]; 25 25 fixedsize=true, width=1.5, height=1.5];
"Server"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 26 26 "Server"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.5, height=1.5]; 27 27 fixedsize=true, width=1.5, height=1.5];
28 28
// Graph 29 29 // Graph
"Login/Register Page" -> "POST"; 30 30 "Login/Register Page" -> "POST"[dir=none];
"POST" -> "Controller"; 31 31 "POST" -> "Controller";
32 32
"Controller" -> "FAILURE"; 33 33 "Controller" -> "FAILURE"[dir=none];
"FAILURE" -> "Login/Register Page"; 34 34 "FAILURE" -> "Login/Register Page";
35 35
"Controller" -> "SUCCESS:\nValid, send JSON."; 36 36 "Controller" -> "SUCCESS:\nValid, send JSON."[dir=none];
"SUCCESS:\nValid, send JSON." -> "Server"; 37 37 "SUCCESS:\nValid, send JSON." -> "Server";
38 38
"Server" -> "FAILURE:\nData invalid"; 39 39 "Server" -> "FAILURE:\nData invalid"[dir=none];
"FAILURE:\nData invalid" -> "Login/Register Page"; 40 40 "FAILURE:\nData invalid" -> "Login/Register Page";
41 41
screen_sequence_diagrams/view_by_pull_time.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
labelloc="t"; 4 4 labelloc="t";
label="[D2] View A Card by Pull Time"; 5 5 label="[D2] View A Card by Pull Time";
node[shape=box, style="rounded,filled,bold"]; 6 6 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 7 7 splines=ortho;
nodesep=1.0; 8 8 nodesep=1.0;
"View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; 9 9 "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"];
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 10 10 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 11 11 fixedsize=true, width=1.4, height=1.4];
"POST"[shape=none]; 12 12 "POST"[shape=none];
labelfloat=true; 13 13 labelfloat=true;
lp=100; 14 14 lp=100;
15 15
"FAILURE"[shape=none]; 16 16 "FAILURE"[shape=none];
17 17
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 18 18 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 19 19 fixedsize=true, width=1.4, height=1.4];
"POST"[shape=none]; 20 20 "POST"[shape=none];
"View Deck" -> "POST"; 21 21 "View Deck" -> "POST"[dir=none];
"POST" -> "Controller"; 22 22 "POST" -> "Controller";
"Controller" -> "FAILURE"; 23 23 "Controller" -> "FAILURE"[dir=none];
"FAILURE" -> "View Deck"; 24 24 "FAILURE" -> "View Deck";
"Controller" -> "Sort by Ascending/Descending Time"; 25 25 "Controller" -> "Sort by Ascending\nor Descending Time";
"Sort by Ascending/Descending Time" -> "View Deck"; 26 26 "Sort by Ascending\nor Descending Time" -> "View Deck";
} 27 27 }
28
screen_sequence_diagrams/view_feed.dot View file @ 7d10b6e
digraph G{ 1 1 digraph G{
ratio=0.75; 2 2 ratio=0.75;
//rankdir="LR"; 3 3 //rankdir="LR";
node[shape=box, style="rounded,filled,bold"]; 4 4 node[shape=box, style="rounded,filled,bold"];
splines=ortho; 5 5 splines=ortho;
nodesep=1.4; 6 6 nodesep=1.4;
labelloc="t"; 7 7 labelloc="t";
label="[F9] View Feed"; 8 8 label="[F9] View Feed";
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 9 9 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 10 10 fixedsize=true, width=1.4, height=1.4];
labelfloat=true; 11 11 labelfloat=true;
lp=100; 12 12 lp=100;
13 13
"GET"[shape=none]; 14 14 "GET"[shape=none];
"SUCCESS"[shape=none]; 15 15 "SUCCESS"[shape=none];
"FAILURE: no cards"[shape=none]; 16 16 "FAILURE:\nno cards"[shape=none];
17 17
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, 18 18 "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond,
fixedsize=true, width=1.4, height=1.4]; 19 19 fixedsize=true, width=1.4, height=1.4];
"Root" -> "GET"; 20 20 "Root" -> "GET"[dir=none];
"GET" -> "Controller"; 21 21 "GET" -> "Controller";
"Controller" -> "FAILURE: no cards"; 22 22 "Controller" -> "FAILURE:\nno cards"[dir=none];
"Controller" -> "SUCCESS"; 23 23 "Controller" -> "SUCCESS"[dir=none];
"FAILURE: no cards" -> "Feed"; 24 24 "FAILURE:\nno cards" -> "Feed";
"SUCCESS" -> "Feed"; 25 25 "SUCCESS" -> "Feed";
} 26 26 }
27 27