From 838c7047ac6facd4ae917fda4092bbff56103eeb Mon Sep 17 00:00:00 2001 From: Songtone Date: Thu, 14 Nov 2019 17:06:23 -0500 Subject: [PATCH 1/3] [#86] Added phone number to Model and modified POST api for createUser --- backend/controllers/UserController.js | 7 +- backend/gateways/UserGateway.js | 6 +- backend/models/User.js | 10 +++ backend/services/UserService.js | 4 +- frontend/src/components/RegisterForm.js | 73 ++++++++++++++++ frontend/src/constraints/Constraints.js | 8 ++ frontend/src/pages/RegisterPage.js | 109 ++++++++++++++++++++++++ 7 files changed, 209 insertions(+), 8 deletions(-) create mode 100644 frontend/src/components/RegisterForm.js create mode 100644 frontend/src/constraints/Constraints.js create mode 100644 frontend/src/pages/RegisterPage.js diff --git a/backend/controllers/UserController.js b/backend/controllers/UserController.js index 2b39b1c..f0b0648 100644 --- a/backend/controllers/UserController.js +++ b/backend/controllers/UserController.js @@ -8,14 +8,13 @@ const userController = express.Router(); const userService = new UserService(); const loginFields = ['email', 'password'] -const registerFields = ['email', 'password', 'first_name', 'last_name', 'type'] +const registerFields = ['email', 'password', 'first_name', 'last_name', 'phone_number','type'] // register API userController.post('/', validateBody(registerFields), async (req, res) => { try { - const { email, password, first_name, last_name, type } = req.body; - const user = await userService.register(email, password, first_name, last_name, - type); + const { email, password, first_name, last_name, phone_number, type } = req.body; + const user = await userService.register(email, password, first_name, last_name, phone_number, type); return res.status(200).json(user); } catch (err) { return handleError(err, res); diff --git a/backend/gateways/UserGateway.js b/backend/gateways/UserGateway.js index 012890e..9caf16c 100644 --- a/backend/gateways/UserGateway.js +++ b/backend/gateways/UserGateway.js @@ -15,12 +15,13 @@ const UserGateway = { return user; }, - async createUser(email, password_hash, first_name, last_name, type) { + async createUser(email, password_hash, first_name, last_name, phone_number, type) { user = new User({ email: email, password_hash: password_hash, first_name: first_name, last_name: last_name, + phone_number, type: type }); try { @@ -30,7 +31,7 @@ const UserGateway = { } }, - async updateUser(id, email, password_hash, first_name, last_name, type) { + async updateUser(id, email, password_hash, first_name, last_name, phone_number, type) { user = this.getUserById(id); try { return await User.updateOne({id: id}, @@ -40,6 +41,7 @@ const UserGateway = { password_hash: password_hash, first_name: first_name, last_name: last_name, + phone_number: phone_number, type: type } } diff --git a/backend/models/User.js b/backend/models/User.js index f72b4e2..42c2857 100644 --- a/backend/models/User.js +++ b/backend/models/User.js @@ -29,6 +29,16 @@ const UserSchema = mongoose.Schema({ required : true, trim : true }, + phone_number:{ + type: String, + required : true, + trim: true, + validate: value => { + if (!validator.isMobilePhone(value)) { + throw new Error('Invalid Phone Number') + } + } + }, type: { type: String, required : true, diff --git a/backend/services/UserService.js b/backend/services/UserService.js index 2e8673e..096b60c 100644 --- a/backend/services/UserService.js +++ b/backend/services/UserService.js @@ -19,7 +19,7 @@ class UserService { return true } - async register(email, password, first_name, last_name, type) { + async register(email, password, first_name, last_name, phone_number,type) { if (!passwordValidator.validate(password)) { throw new BadRequestError('Password must be at least 8 characters' + ' and must include at least one digit.') @@ -30,7 +30,7 @@ class UserService { throw new ResourceExistsError("Email " + email + " already in use."); } try { - return await UserGateway.createUser(email, hashedPassword, first_name, last_name, type); + return await UserGateway.createUser(email, hashedPassword, first_name, last_name, phone_number, type); } catch (err) { throw new BadRequestError(err.message); } diff --git a/frontend/src/components/RegisterForm.js b/frontend/src/components/RegisterForm.js new file mode 100644 index 0000000..3469ef3 --- /dev/null +++ b/frontend/src/components/RegisterForm.js @@ -0,0 +1,73 @@ +import React from 'react'; +import { Text, TextInput, View, Button, Picker } from 'react-native'; +import { registerComponent } from '../stylesheets/Stylesheet'; + +const RegisterForm = (props) => { + return ( + + {props.error + ? {props.errorMsg} + : null + } + First Name + props.handleFirstNameChange(text)} + /> + Last Name + props.handleLastNameChange(text)} + /> + + Email + + props.handleEmailChange(text)} + /> + + Password + + props.handlePasswordChange(text)} + /> + + Confirm Password + + props.handleConfirmPasswordChange(text)} + /> + + Type + + props.handleTypeChange(value)}> + + + + +