Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ typings/
.yarn-integrity

# dotenv environment variables file
.env
# .env # committing `.env` files in this case for demonstration
.env.test

# parcel-bundler cache (https://parceljs.org/)
Expand Down
5 changes: 5 additions & 0 deletions API_MongoDB_Atlas/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
ENV = 'development'
PORT = 3000
BASE_URL = 'http://localhost:3000',
MONGODB_URI = 'mongodb+srv://<dbUser>:<dbUserPassword>@cluster0.2exue.mongodb.net/<dbname>?retryWrites=true&w=majority'
JWT_SECRET = 'api_jwt_secret'
103 changes: 103 additions & 0 deletions API_MongoDB_Atlas/mongoose/note/NoteData.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
const Note = require('./NoteModel');
const errors = require('restify-errors');

async function GetOneNoteById(id) {
try {
const note = await Note.findById(id);

return {
code: 200,
note,
};
}
catch (error) {
global.logger.error(error);
return { code: new errors.InternalServerError() };
}
}

async function GetNotesByAuthorId(id) {
try {
const note = await Note.find({ authorId: id });

return {
code: 200,
note,
};
}
catch (error) {
global.logger.error(error);
return { code: new errors.InternalServerError() };
}
}

async function CreateOneNote(data) {
try {
const note = await new Note({
note: data.note,
authorId: data.authorId
}).save();

return {
code: 201,
message: '',
note
}
}
catch(error) {
global.logger.error(error);
return { code: new errors.InternalServerError() };
}
}

async function GetAllNotes() {
try {
const notes = await Note.find({});
return {
code: 200,
notes
};
}
catch (error) {
global.logger.error(error);
return { code: new errors.InternalServerError() };
}
}

async function UpdateOneNote(id, newNote) {
try {
const note = await Note.findOneAndUpdate({ _id: id }, { note: newNote }, { new: true });
return {
code: 200,
note,
}
}
catch(error) {
global.logger.error(error);
return { code: new errors.InternalServerError() };
}
}

async function DeleteOneNoteById(id) {
try {
const note = await Note.findOneAndDelete({ _id: id });

return {
code: 200,
note,
}
}
catch(error) {
global.logger.error(error);
return { code: new errors.InternalServerError() };
}
}

module.exports = {
GetOneNoteById,
GetNotesByAuthorId,
CreateOneNote,
GetAllNotes,
UpdateOneNote,
DeleteOneNoteById
};
27 changes: 27 additions & 0 deletions API_MongoDB_Atlas/mongoose/note/NoteModel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
const mongoose = require('mongoose');
const timestamp = require('mongoose-timestamp');

const NoteSchema = new mongoose.Schema({
note: {
type: String,
required: true,
},
authorId: {
type: String,
// required: true
}
});

/* Plugins
============================================= */
NoteSchema.plugin(timestamp);

/* Methods
============================================= */

module.exports = mongoose.model('Note', NoteSchema);





92 changes: 92 additions & 0 deletions API_MongoDB_Atlas/mongoose/user/UserData.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
const User = require('./UserModel');
const errors = require('restify-errors');
const jwt = require('jsonwebtoken');

async function UserExists(data) {
try {
const user = await User.findOne({ email: data.email }).exec();
return user ? true : false;
} catch (error) {
global.logger.error(error);
return false;
}
}

async function CreateNewUser(data) {
const exists = await UserExists(data);
if (exists) {
return new errors.InvalidArgumentError();
}
else {
const { firstname, lastname, email, password } = data;

const user = new User({
firstname,
lastname,
email,
password
});

const hash = user.generateHash(password);
user.password = hash;

try {
const newUser = await user.save();
const token = jwt.sign(user.toJSON(), process.env.JWT_SECRET, { expiresIn: '10m' });
const { iat, exp } = jwt.decode(token);
return {
code: 201,
message: '',
token,
iat,
exp,
user: newUser
};
}
catch (error) {
global.logger.error(error);
return { code: new errors.InternalError(error.message) };
}
}
}

async function LoginAUser(data) {
try {
const user = await User.findOne({ email: data.email }).exec();

if (!user || !user.validPassword(data.password, user.password)) {
return { code: new errors.UnauthorizedError() };
}

const token = jwt.sign(user.toJSON(), process.env.JWT_SECRET, { expiresIn: '10m' });
const { iat, exp } = jwt.decode(token);

return {
code: 200,
message: '',
token,
iat,
exp,
user,
}

} catch (error) {
global.logger.error(error);
return { code: new errors.InternalServerError() };
}
}

module.exports = {
LoginAUser,
UserExists,
CreateNewUser,
};









46 changes: 46 additions & 0 deletions API_MongoDB_Atlas/mongoose/user/UserModel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const timestamp = require('mongoose-timestamp');

const UserSchema = new mongoose.Schema({
firstname: {
type: String,
required: true,
trim: true,
},
lastname: {
type: String,
required: true,
trim: true,
},
email: {
type: String,
required: true,
trim: true,
},
password: {
type: String,
required: true
},
});

/* Plugins
============================================= */
UserSchema.plugin(timestamp);

/* Methods
============================================= */
UserSchema.methods.generateHash = password => {
return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};

UserSchema.methods.validPassword = (givenPassword, userPassword) => {
return bcrypt.compareSync(givenPassword, userPassword);
};

module.exports = mongoose.model('User', UserSchema);





Loading