diff --git a/mms-frontend/src/pages/AppInstall.js b/mms-frontend/src/pages/AppInstall.js
index 283157a..fd7608b 100644
--- a/mms-frontend/src/pages/AppInstall.js
+++ b/mms-frontend/src/pages/AppInstall.js
@@ -1,6 +1,7 @@
import React, { Component } from 'react'
import { Grid,Paper,Typography,Button, TextField } from '@material-ui/core'
import validator from 'validator';
+import axios from 'axios';
export class AppInstall extends Component {
constructor(props) {
@@ -12,16 +13,11 @@ export class AppInstall extends Component {
email:"",
phone:"",
description:"",
- password:"",
- confirmPassword:"",
valid:false,
error:{
emailError:false,
eamilErrorDesc:"Email*",
- passwordError:false,
- passwordErrorDesc:"",
- confirmPasswordError:false,
- confirmPasswordErrorDesc:""
+
}
};
@@ -53,41 +49,7 @@ export class AppInstall extends Component {
}
}
- else if(e.target.name === "password")
- {
-
- if(validator.isLength(e.target.value, 8, 15) && validator.isStrongPassword(e.target.value))
- {
- errors["passwordErrorDesc"]="";
- errors["passwordError"]=false;
- this.setState({error:errors})
-
- }
- else
- {
- errors["passwordErrorDesc"]="Password should be the combination of atleast 1 lowercase letter, 1 uppercase letter, 1 number and 1 symbol and has length of atleast 8-15 characters.";
- errors["passwordError"] = true;
- this.setState({error:errors})
-
- }
- }
- else if(e.target.name === "confirmPassword")
- {
- if(validator.equals(e.target.value, this.state.password))
- {
- errors["confirmPasswordErrorDesc"]="";
- errors["confirmPasswordError"]=false;
- this.setState({error:errors})
-
- }
- else
- {
- errors["confirmPasswordErrorDesc"]="Password didn't match";
- errors["confirmPasswordError"] = true;
- this.setState({error:errors})
-
- }
- }
+
this.setState({
valid: !(this.state.error.emailError || this.state.error.passwordError || this.state.error.confirmPasswordError || !validator.isLength(this.state.name1, 1,50) || !validator.isLength(this.state.address, 1, 200) || ! validator.isLength(this.state.description, 1, 10000))
});
@@ -100,6 +62,20 @@ export class AppInstall extends Component {
submitfunction=()=>
{
//var valid = this.handleValidation();
+ const orgObject = {
+ orgName: this.state.name1,
+ address: this.state.address,
+ email: this.state.email,
+ phone_no: this.state.phone,
+ description: this.state.description
+ }
+ axios.post('/org/', orgObject)
+ .then((res) => {
+ console.log(res);
+ }).catch((error) => {
+ console.log(error)
+ });
+ //this.setState({ username: '', email: '', password: '' })
console.log(this.state)
}
@@ -172,40 +148,9 @@ export class AppInstall extends Component {
/>
-
+
- this.change(e)}
-
- />
-
-
-
-
- {this.state.error.passwordErrorDesc}
-
-
-
-
-
- this.change(e)}
-
- />
-
-
+
{this.state.error.confirmPasswordErrorDesc}
diff --git a/src/main/java/com/memeor/mms/beans/Organization.java b/src/main/java/com/memeor/mms/beans/Organization.java
new file mode 100644
index 0000000..3ee0567
--- /dev/null
+++ b/src/main/java/com/memeor/mms/beans/Organization.java
@@ -0,0 +1,81 @@
+package com.memeor.mms.beans;
+
+import java.util.Date;
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.PrePersist;
+import javax.persistence.PreUpdate;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.validation.constraints.NotBlank;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+
+@Entity(name = "organizations")
+@Table(name = "organizations")
+@RequiredArgsConstructor
+@Getter
+@Setter
+@EqualsAndHashCode
+@ToString
+public class Organization {
+
+ @Id
+ @SequenceGenerator(name = "mms_org_id_seq", sequenceName = "mms_org_id_seq", allocationSize = 1)
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mms_org_id_seq")
+ private Integer id;
+
+ @NotBlank
+ @Column(name = "name", unique= true)
+ private String orgName;
+
+ @NotBlank
+ @Column(name = "address")
+ private String address;
+
+ @NotBlank
+ @Column(name = "email", unique = true)
+ private String email;
+
+ @NotBlank
+ @Column(name = "ph_number")
+ private String phone_no;
+
+ @NotBlank
+ @Column(name = "description")
+ private String description;
+
+ @Column(name = "created_ts", updatable = false, columnDefinition= "TIMESTAMP WITH TIME ZONE")
+ @JsonFormat(pattern = "yyyy-MM-dd@HH:mm:ss")
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date createdTS;
+
+ @Column(name = "updated_ts", updatable = false, columnDefinition= "TIMESTAMP WITH TIME ZONE")
+ @JsonFormat(pattern = "yyyy-MM-dd@HH:mm:ss")
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date updatedTS;
+
+ @PrePersist
+ protected void onCreate() {
+ this.createdTS = new Date();
+ }
+
+ @PreUpdate
+ protected void onUpdate() {
+ this.updatedTS = new Date();
+ }
+
+}
diff --git a/src/main/java/com/memeor/mms/beans/OrganizationRegistrationResponse.java b/src/main/java/com/memeor/mms/beans/OrganizationRegistrationResponse.java
new file mode 100644
index 0000000..3f74f3c
--- /dev/null
+++ b/src/main/java/com/memeor/mms/beans/OrganizationRegistrationResponse.java
@@ -0,0 +1,15 @@
+package com.memeor.mms.beans;
+
+import org.springframework.stereotype.Component;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Component
+public class OrganizationRegistrationResponse {
+ private RegistrationStatus status;
+ private String message;
+
+}
diff --git a/src/main/java/com/memeor/mms/controller/OrganizationController.java b/src/main/java/com/memeor/mms/controller/OrganizationController.java
new file mode 100644
index 0000000..551099b
--- /dev/null
+++ b/src/main/java/com/memeor/mms/controller/OrganizationController.java
@@ -0,0 +1,52 @@
+package com.memeor.mms.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.memeor.mms.beans.Organization;
+import com.memeor.mms.service.OrganizationService;
+import com.memeor.mms.beans.OrganizationRegistrationResponse;
+import com.memeor.mms.beans.RegistrationStatus;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/org")
+public class OrganizationController {
+
+ @Autowired
+ OrganizationService organizationService;
+
+
+
+ //get all organizations
+ //Note: should be able to access by super admin only in future
+ @GetMapping("")
+ public List getAllOrganization(){
+
+ return organizationService.getAllOrganizations();
+
+
+ }
+
+ //Register a new organization
+ @PostMapping("")
+ public ResponseEntity addOrganization(@RequestBody Organization organization){
+ OrganizationRegistrationResponse organizationRegistrationResponse = organizationService.saveOrganization(organization);
+ if(organizationRegistrationResponse.getStatus().equals(RegistrationStatus.ACCEPTED))
+ return new ResponseEntity<>(organizationRegistrationResponse, HttpStatus.ACCEPTED);
+ else
+ return new ResponseEntity<>(organizationRegistrationResponse, HttpStatus.CONFLICT);
+
+
+
+ }
+
+
+}
diff --git a/src/main/java/com/memeor/mms/repository/OrganizationRepository.java b/src/main/java/com/memeor/mms/repository/OrganizationRepository.java
new file mode 100644
index 0000000..2a842ef
--- /dev/null
+++ b/src/main/java/com/memeor/mms/repository/OrganizationRepository.java
@@ -0,0 +1,18 @@
+package com.memeor.mms.repository;
+
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+import com.memeor.mms.beans.Organization;
+
+@Repository
+public interface OrganizationRepository extends CrudRepository{
+
+ @Query("select count(*) = 1 from organizations where name = :orgName")
+ public Boolean checkIfNameAlreadyUsed(String orgName);
+
+ @Query("select count(*) =1 from organizations where email = :emailAddress")
+ public Boolean checkIfEmailAlreadyUsed( String emailAddress);
+
+}
diff --git a/src/main/java/com/memeor/mms/service/OrganizationService.java b/src/main/java/com/memeor/mms/service/OrganizationService.java
new file mode 100644
index 0000000..f76397e
--- /dev/null
+++ b/src/main/java/com/memeor/mms/service/OrganizationService.java
@@ -0,0 +1,18 @@
+package com.memeor.mms.service;
+
+import com.memeor.mms.beans.Organization;
+import com.memeor.mms.beans.OrganizationRegistrationResponse;
+import java.util.List;
+
+
+public interface OrganizationService {
+ public List getAllOrganizations();
+
+ public OrganizationRegistrationResponse saveOrganization(Organization organization);
+
+ public boolean checkIfEmailAlreadyUsed(String emailAddress);
+
+ public boolean checkIfNameAlreadyUsed(String orgName);
+
+
+}
diff --git a/src/main/java/com/memeor/mms/service/impl/OrganizationServiceImpl.java b/src/main/java/com/memeor/mms/service/impl/OrganizationServiceImpl.java
new file mode 100644
index 0000000..328d34c
--- /dev/null
+++ b/src/main/java/com/memeor/mms/service/impl/OrganizationServiceImpl.java
@@ -0,0 +1,82 @@
+package com.memeor.mms.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.memeor.mms.beans.OrganizationRegistrationResponse;
+import com.memeor.mms.beans.RegistrationStatus;
+import com.memeor.mms.repository.OrganizationRepository;
+import com.memeor.mms.service.OrganizationService;
+import com.memeor.mms.beans.Organization;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Service
+@Slf4j
+public class OrganizationServiceImpl implements OrganizationService{
+
+ @Autowired
+ OrganizationRepository organizationRepository;
+
+ @Autowired
+ OrganizationRegistrationResponse organizationRegistrationResponse;
+
+ @Override
+ public List getAllOrganizations(){
+ List result = new ArrayList();
+ organizationRepository.findAll().forEach(result::add);
+
+ return result;
+ }
+
+ @Override
+ public OrganizationRegistrationResponse saveOrganization(Organization organization) {
+ // TODO Auto-generated method stub
+ boolean emailExists = checkIfEmailAlreadyUsed(organization.getEmail());
+ boolean nameExists = checkIfNameAlreadyUsed(organization.getOrgName());
+
+ try {
+ if(!emailExists) {
+ if(!nameExists) {
+ organizationRepository.save(organization);
+ organizationRegistrationResponse.setStatus(RegistrationStatus.ACCEPTED);
+ }
+ else {
+ organizationRegistrationResponse.setStatus(RegistrationStatus.FAILED);
+ }
+ }
+ else {
+ if(!nameExists) {
+ organizationRegistrationResponse.setStatus(RegistrationStatus.ACCEPTED);
+ }
+ else {
+ organizationRegistrationResponse.setStatus(RegistrationStatus.FAILED);
+
+ }
+ }
+
+
+
+ }catch(Exception e) {
+ log.info("Error in database when trying to insert "+ organization.toString());
+ }
+
+ return organizationRegistrationResponse;
+ //TODO: send email
+ }
+
+ @Override
+ public boolean checkIfEmailAlreadyUsed(String orgName) {
+ // TODO Auto-generated method stub
+ return organizationRepository.checkIfNameAlreadyUsed(orgName);
+ }
+
+ @Override
+ public boolean checkIfNameAlreadyUsed(String emailAddress) {
+ // TODO Auto-generated method stub
+ return organizationRepository.checkIfEmailAlreadyUsed(emailAddress);
+ }
+}
diff --git a/src/main/resources/schema-postgres.sql b/src/main/resources/schema-postgres.sql
index 4005ce0..956e0e1 100644
--- a/src/main/resources/schema-postgres.sql
+++ b/src/main/resources/schema-postgres.sql
@@ -23,4 +23,18 @@ INSERT INTO mms_user(username, password, email_address) VALUES('warsaw', '174800
INSERT INTO mms_user(username, password, email_address) VALUES('losangeles', '3971000xyz', 'la@europe.eu');
INSERT INTO mms_user(username, password, email_address) VALUES('newyork', '855000xyz0', 'ny@europe.eu');
INSERT INTO mms_user(username, password, email_address) VALUES('edinburgh', '464000xyz', 'edinburgh@europe.eu');
-INSERT INTO mms_user(username, password, email_address) VALUES('berlin', '671000xyz', 'berlin@europe.eu');
\ No newline at end of file
+INSERT INTO mms_user(username, password, email_address) VALUES('berlin', '671000xyz', 'berlin@europe.eu');
+
+DROP TABLE IF EXISTS organizations;
+CREATE TABLE organizations (
+ id serial PRIMARY KEY,
+ name VARCHAR(255) NOT NULL,
+ address VARCHAR(255) NOT NULL,
+ email VARCHAR(255) NOT NULL,
+ ph_number VARCHAR(255) NOT NULL,
+ description VARCHAR(1000) NOT NULL,
+ created_ts TIMESTAMP WITH TIME ZONE,
+ updated_ts TIMESTAMP WITH TIME ZONE
+);
+
+INSERT INTO organizations(name, address, email, ph_number, description) VALUES('Fitness Nation Gym', '512 Lamar Blvd', 'fitness@gmail.com', '68226679**', 'It is the best gym in Arlington');
\ No newline at end of file