Buvie is a platform where users can find other people with similar taste in movies and plan to catch a movie with them!
Buvie requires Node.js v6.0+ to run.
Buvie requires Node.js v6.0+ to run. Install the dependencies and devDependencies and start the server.
npm install
To run front-end or back-end tests, simply run npm test
in the terminal.
{
username: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
},
email: {
type: String,
required: true,
unique: true
},
googleId: {
type: String,
default: ''
},
genres: [
{
type: String
}
],
movies: [
ref: Movie
movieId
],
location: {
city: String,
coordinates: [lat, lng]
},
geometry: {
type: "Point",
coordinates: {
type: [Number],
index: '2dsphere'
}
},
popcorned: [{
type: userId,
ref: User
}],
matched: [
{
_id: {
type: userId,
ref: User
},
chatroom: {
type: conversationId,
ref: Conversation
}
}
],
ignored: [{
type: userId,
ref: User
}],
whoUserPopcorned: [{
type: userId,
ref: User
}],
profilePicture: String,
notifications: [
{
_id: {
type: userId,
ref: User
},
notificationType: String,
date: {
type: Date,
default: Date.now
}
}
],
notificationCheck: {
type: Date,
default: Date.now
}
}
{
title: String,
genre: String,
poster: String,
users: [{
type: userId,
ref: User
}],
imdbID: String
}
{
matched: [{
type: userId,
ref: User
}],
messages: [{
message: String,
handle: String,
room: {
type: conversationId,
ref: Conversation
}
}]
}
{
type: {
type: String,
default: 'Point'
},
coordinates: {
type: [Number],
index: '2dsphere'
}
}
/api
.
├── /auth
│ └── GET
│ ├── /google
│ ├── /google/redirect
│ └── POST
│ ├── /login
│ └── /refresh
├── /users
│ └── GET
│ └── GET /:id
│ └── POST
│ └── /
├── /main
│ └── GET
│ ├── /location
│ ├── /matches/:id
│ ├── /notifications/:id
│ ├── /popcorn/:id
│ └── /profilePicture/:id
│ └── PUT
│ ├── /ignore/:id
│ ├── /ignore/nevermind/:id
│ ├── /location/:id
│ ├── /notifications/time/:id
│ └── /popcorn
│ └── PUT /:id
│ └── POST
│ └── /profilePicture/:id
// req.body
{
username: String,
password: String
}
// res.body
{
authToken: String
}
// req.header
Authorization: Bearer ${token}
// res.body
{
authToken: ${token}
}
// req.query
{
?
}
// res.body
[
{
username: String,
movies: [],
genres: String
}
]
// req.params
{
id: ID
}
// res.body
{
username: String,
movies: [],
genres: String
}
// req.body
{
email: String,
username: String,
password: String
}
// res.body
{
name: String,
username: String
}
// req.body
{
genres: [String],
movies: [{type: MovieId, ref: Movies}]
}
// res.body
{
[
username: String,
_id: UserId,
genres: [String],
movies: [{type: MovieId, ref: Movies}]
}
// res.body
{
[
username: String,
_id: UserId,
genres: [String],
movies: [{type: MovieId, ref: Movies}]
]
}
// req.body
{
userId: userId
}
// res.body
{
status: 204
}
// req.params
{
id: userId
}
// res.body
{
status: 204
}
// req.body
{
userId: userId
}
// res.body
{
status: 204
}
// req.params
{
userId: userId
}
// res.body
{
popcorned: [{User: Object}],
pendingPopcorn: [{User: Object}]
}
// req.query
{
lat: Number,
lng: Number
}
// res.body
[
{User: Object}
]
// req.body
{
city: String,
coordinates: {
latitude: Number,
longitude: Number
},
}
// res.body
{
User: Object;
}
// res.body
{
[
_id: UserId
username: String
chatroom: ConversationId
]
}
// req.params
{
id: ID
}
// res.body
[
{
_id: Number,
message: String,
date: Number,
type: String
}
]
// req.params
{
id: ID
}
// res.body
[
User: Object;
]
// res.body
{
_id: UserId
profilePicture: String
}
// req.body
{
_id: UserId
profilePicture: String
}
// res.body
{
_id: UserId,
username: String,
profilePicture: String
}
- Node - Run-time environment
- Express - Web application framework
- MongoDB - Database
- Mongoose - Data modeling
- Passport - Authentication
- JWT - Authentication
- OAuth 2.0 - Authentication
- Mocha - Testing
- Chai - Testing
- Google Geolocation API - Location API
-
Nikolas Melgarejo - Full-Stack - NikolasMSomething
-
Cameron Hatch - Full-Stack - CameronHatch92
-
Kent Tokunaga - Full-Stack - kenttoku
-
Joe Pena - Full-Stack - Joe-Pena
See also the list of contributors who participated in this project.
- Jesse Heaslip, Tauhida Parveen, Joe Turner, Chris Klanac, Rich Greenhill, Capi Etheriel, Brandon Hinshaw