Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

request service and endpoints #14

Open
wants to merge 21 commits into
base: master
Choose a base branch
from
Open
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
5 changes: 5 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
FROM adoptopenjdk:11-jre-hotspot
COPY build/libs/employement-profiling-system-0.0.1-SNAPSHOT.jar app.jar
RUN chmod 777 app.jar

ENTRYPOINT [ "java", "-jar", "app.jar" ]
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ dependencies {
compile 'com.google.apis:google-api-services-gmail:v1-rev83-1.23.0'
compile group: 'javax.mail', name: 'mail', version: '1.4'
compile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1'
compile 'io.jsonwebtoken:jjwt-api:0.10.7'
runtime 'io.jsonwebtoken:jjwt-impl:0.10.7'
implementation 'io.fusionauth:fusionauth-jwt:3.1.6'
}

test {
Expand Down
42 changes: 42 additions & 0 deletions db/holiday.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
DROP TABLE IF EXISTS employee cascade;

CREATE TABLE employee (
employee_id serial primary key,
employee_firstName text ,
employee_lastName text ,
employee_phoneNumber text,
employee_email text,
employee_address text,
employee_role text,
employee_dev_level text,
employee_hire_date DATE,
employee_onLeave BOOLEAN,
employee_gender text,
employee_status text
);

--- DATABASE FOR HOLIDAY ME ---

DROP TABLE IF EXISTS requests cascade;
DROP TABLE IF EXISTS request_status cascade;

--- REQUEST STATUS ---

CREATE TABLE request_status(
request_status_id serial primary key NOT NULL,
req_status varchar(10)
);

INSERT INTO request_status(request_status_id, req_status) VALUES (1, 'PENDING');
INSERT INTO request_status(request_status_id, req_status) VALUES (2, 'DECLINED');
INSERT INTO request_status(request_status_id, req_status) VALUES (3, 'APPROVED');

--- REQUESTS TABLE ---

CREATE TABLE requests(
request_id serial primary key NOT NULL,
requester_id int references employee(employee_id) NOT NULL,
request_start_date date NOT NULL,
request_report_date date NOT NULL,
request_status_id int references request_status(request_status_id) NOT NULL default 1
);
21 changes: 21 additions & 0 deletions db/holiday/holiday.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
--- DATABASE FOR HOLIDAY ME ---

DROP TABLE IF EXISTS requests cascade;
DROP TABLE IF EXISTS request_status cascade;

--- REQUEST STATUS ---

CREATE TABLE request_status(
request_status_id serial primary key NOT NULL,
req_status varchar(10)
);

--- REQUESTS TABLE ---

CREATE TABLE requests(
request_id serial primary key NOT NULL,
requester_id int references employee(employee_id) NOT NULL,
request_start_date date NOT NULL,
request_report_date date NOT NULL,
request_status_id int references request_status(request_status_id) NOT NULL default 1
);
3 changes: 3 additions & 0 deletions db/holiday/requestStatusInsertion.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
INSERT INTO request_status(req_status) VALUES ('PENDING');
INSERT INTO request_status(req_status) VALUES ('DECLINED');
INSERT INTO request_status(req_status) VALUES ('APPROVED');
3 changes: 3 additions & 0 deletions db/holiday/requestsTableInsertion.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
INSERT INTO requests(requester_id, request_start_date, request_report_date, request_status_id) values(1,'2020-02-20', '2020-02-25', 2);
INSERT INTO requests(requester_id, request_start_date, request_report_date, request_status_id) values(1,'2020-02-20', '2020-02-25', 3);
INSERT INTO requests(requester_id, request_start_date, request_report_date, request_status_id) values(1,'2020-02-20', '2020-02-25', 1);
33 changes: 33 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
version: '3'
services:
apigateway:
image: "idawud/turntablapigateway:latest"
env_file:
- .envs/.apigateway
ports:
- "80:8081"
permission:
image: "idawud/accperm:v3"
env_file:
- .envs/.permission
ports:
- "5000:5000"
gis:
image: "isammyk/gis-docker:latest"
env_file:
- .envs/.gis
ports:
- "5004:5004"
chess:
image: "francisbilla/chess:latest"
env_file:
- .envs/.chess
ports:
- "8080:8080"
holidayrequest:
image: " billalidocker/employee-service:latest"
env_file:
- .envs/.holidayrequest
ports:
- "7070:7070"

45 changes: 45 additions & 0 deletions init.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/bin/bash

#create init env files: list all services in the array, separeted by space
declare -a arr=("apigateway" "gis" "permission" "chess" "holidayrequest")

for i in "${arr[@]}"
do
filename="./.envs/.$i"
if [[ ! -e "$filename" ]]; then
mkdir -p ./.envs
touch $filename
fi
done

# install docker
if docker --version 2>&1 >/dev/null ; then
echo >&2 "docker installed"
else
sudo apt install docker -y
fi

#install docker-compose
if docker-compose --version 2>&1 >/dev/null ; then
echo >&2 "docker-compose installed"
else
sudo apt install docker-compose -y
fi

# run docker-compose
declare -i count=$(docker-compose ps | wc -l)
if [ $count -gt 2 ]; then
echo "Restarting services:...."
sudo docker-compose down
sudo docker-compose pull
sudo docker rmi $(docker images -a | grep '<none>' | awk '{print $3}')
sudo docker-compose build --no-cache
sudo docker-compose up -d
else
echo "Starting all services:....."
sudo docker-compose down
sudo docker-compose pull
sudo docker rmi $(docker images -a | grep '<none>' | awk '{print $3}')
sudo docker-compose build --no-cache
sudo docker-compose up -d
fi
Empty file added public_key.pem
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,26 @@

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import io.turntabl.employementprofilingsystem.DAO.EmployeeDAO;
import io.turntabl.employementprofilingsystem.Models.AddEmployee;
import io.turntabl.employementprofilingsystem.Models.EditEmployee;
import io.turntabl.employementprofilingsystem.Transfers.*;
import io.turntabl.employementprofilingsystem.Transfers.Employee;
import io.turntabl.employementprofilingsystem.Transfers.UpdateEmployee;
import io.turntabl.employementprofilingsystem.Utilities.Date;
import io.turntabl.employementprofilingsystem.Utilities.Parsor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.web.bind.annotation.*;

import java.sql.SQLException;
import java.util.*;
import java.util.stream.Collectors;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Api
@RestController
class EmployeeController implements EmployeeDAO{
class EmployeeController implements EmployeeDAO {
@Autowired
JdbcTemplate jdbcTemplate;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
package io.turntabl.employementprofilingsystem.Controllers;

import io.fusionauth.jwt.JWTException;
import io.fusionauth.jwt.Verifier;
import io.fusionauth.jwt.domain.JWT;
import io.fusionauth.jwt.rsa.RSAVerifier;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import io.turntabl.employementprofilingsystem.Models.AddEmployee;
import io.turntabl.employementprofilingsystem.Gmail.Email;
import io.turntabl.employementprofilingsystem.Models.RequestTO;
import io.turntabl.employementprofilingsystem.Transfers.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.nio.file.Paths;
import java.security.GeneralSecurityException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Api
@RestController
public class RequestController {

@Autowired
JdbcTemplate jdbcTemplate;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are you using a DAO for this? The controller uses the DAO, the DAO uses the JdbcTemplate.

This is fine if you're not using a DAO...

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we're not using DAO


@CrossOrigin
@ApiOperation("Make a holiday request")
@PostMapping("/api/v1/request")
public void makeARequest(@RequestBody RequestTO request) {
jdbcTemplate.update("insert into requests(requester_id, request_start_date, request_report_date) values(?,?,?)",
request.getRequester_id(), request.getRequest_start_date(), request.getRequest_report_date());

SimpleDateFormat DateFor = new SimpleDateFormat("E, dd MMMM yyyy");
String startDate = DateFor.format(request.getRequest_start_date());
String reportDate = DateFor.format(request.getRequest_report_date());

try {
Email.requestMessage("[email protected]", request.getFrom() ,"Holiday request", startDate, reportDate, request.getRequester_name());
} catch (IOException e) {
e.printStackTrace();
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
}

@CrossOrigin
@ApiOperation("Get all holiday requests for requester")
@GetMapping("/api/v1/request/requester/{id}")

public List<RequestTO> getRequestByRequesterId(@PathVariable("id") Integer id) {
return this.jdbcTemplate.query(
" select request_start_date, request_report_date, request_status.req_status from requests inner join request_status on requests.request_status_id = request_status.request_status_id where requester_id =?",
new Object[]{id},
new BeanPropertyRowMapper<>(RequestTO.class)
);
}

@CrossOrigin
@ApiOperation("Get all holiday requests")
@GetMapping("/api/v1/requests")

public List<RequestTO> getAllRequests() {
return this.jdbcTemplate.query("select request_start_date, request_report_date, request_status.req_status from requests inner join request_status on requests.request_status_id = request_status.request_status_id",
new BeanPropertyRowMapper<RequestTO>(RequestTO.class)

);
}

@CrossOrigin
@ApiOperation("Accept holiday request")
@PutMapping("/api/v1/requests/approve/{id}")
public void approveRequest(@PathVariable("id") Integer request_id) {
this.jdbcTemplate.update("update requests set request_status_id = 3 where request_status_id = 1 and request_id = ?", request_id);
}

@CrossOrigin
@ApiOperation("Decline holiday request")
@PutMapping("/api/v1/requests/decline/{id}")
public void declineRequest(@PathVariable("id") Integer request_id) {
this.jdbcTemplate.update("update requests set request_status_id = 2 where request_status_id = 1 and request_id = ?", request_id);
}

@CrossOrigin
@ApiOperation("validating employee with OIDC")
@PostMapping("/validate")
public Map<String, Object> checkToken(@RequestHeader("access-token") String token){
Map<String, Object> response = new HashMap<>();

Verifier verifier = RSAVerifier.newVerifier(Paths.get("public_key.pem"));
try {
// Verify and decode the encoded string JWT to a rich object
JWT jwt = JWT.getDecoder().decode(token,verifier);
response.put("success", true);
response.put("decoded_token", jwt);
return response;
} catch (JWTException e) {
e.getCause();
response.put("success", false);
return response;
}
}

@CrossOrigin
@ApiOperation("Checking available email")
@GetMapping("/verifymail/{email}")
public Map<String, Object> check_employee_exits(@PathVariable("email") String email) {
Map<String, Object> response = new HashMap<>();

response.put("response", this.jdbcTemplate.query("select * from employee where employee_email = ?",
new Object[]{email},
BeanPropertyRowMapper.newInstance(Employee.class)
) );
return response;
}


@CrossOrigin
@ApiOperation("Checking available email")
@PostMapping("/addemployee")
public Map<String, Object> addemployeeDetails(@RequestBody Employee employeeDetails) {
Map<String, Object> response = new HashMap<>();

SimpleJdbcInsert insertActor = new SimpleJdbcInsert(jdbcTemplate).withTableName("employee").usingGeneratedKeyColumns("employee_id");
Map<String, Object> insertEmployeeDetails = new HashMap<>();
insertEmployeeDetails.put("employee_firstname", employeeDetails.getEmployee_firstname());
insertEmployeeDetails.put("employee_lastname", employeeDetails.getEmployee_lastname());
insertEmployeeDetails.put("employee_email", employeeDetails.getEmployee_email());

Number Key = insertActor.executeAndReturnKey(insertEmployeeDetails);
if (Key != null){
response.put("success",true);
response.put("employee_id",Key.longValue());
}else {
response.put("success",false);
response.put("msg","Failed to add new employee, try again later");
}
return response;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public interface EmployeeDAO {
@PostMapping("/v1/api/employee")
Map<String, Object> addEmployee(@RequestBody AddEmployee requestData);

@ApiOperation("List of Employee Profile")
@ApiOperation("List of Employee")
@CrossOrigin(origins = "*")
@GetMapping("/v1/api/employees")
Map<String, Object> getAllEmployee();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class EmployementProfilingSystemApplication {
public static void main(String[] args) throws GeneralSecurityException, IOException {

SpringApplication.run(EmployementProfilingSystemApplication.class, args);

}

}
Loading