Skip to content
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Chancellor Galiza Project 🚀
# Midterm exam Project 🚀

This Spring Boot Application contains five end points :

Expand Down
62 changes: 62 additions & 0 deletions frontend/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.tailwindcss.com"></script>

</head>
<body>

<section class="text-gray-600 body-font">
<div class="container px-5 py-24 mx-auto">
<div class="flex flex-col text-center w-full mb-20">
<h2 class="text-xs text-indigo-500 tracking-widest font-medium title-font mb-1">Spring Boot Project</h2>
<h1 class="sm:text-3xl text-2xl font-medium title-font text-gray-900">Java Endpoint Testing</h1>
</div>
<div class="flex flex-wrap -m-4">
<div class="p-4 md:w-1/4">

</div>
<div class="p-4 md:w-2/4">

<div class="lg:w-6/6 md:w bg-gray-100 rounded-lg p-8 flex flex-col md w-full mt-10 md:mt-0">
<form action="" id="validationForm">
<h2 class="text-gray-900 text-lg font-medium title-font mb-5">Enter your details</h2>
<div class="relative mb-4">
<label for="full-name" class="leading-7 text-sm text-gray-600">Full Name</label>
<input type="text" id="full-name" name="full-name" class="w-full bg-white rounded border border-gray-300 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-200 text-base outline-none text-gray-700 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out">
</div>
<div class="relative mb-4 flex">
<div class="mr-4 w-1/2">
<label for="first" class="leading-7 text-sm text-gray-600">First Name</label>
<input disabled type="text" id="first" name="last" class="w-full bg-gray rounded border border-gray-300 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-200 text-base outline-none text-gray-700 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out">
</div>
<div class="ml-4 w-1/2">
<label for="Last" class="leading-7 text-sm text-gray-600">Last Name</label>
<input disabled type="text" id="last" name="last" class="w-full bg-gray rounded border border-gray-300 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-200 text-base outline-none text-gray-700 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out">
</div>
</div>
<div class="relative mb-4">
<label for="email" class="leading-7 text-sm text-gray-600">Email</label>
<input type="email" id="email" name="email" class="w-full bg-white rounded border border-gray-300 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-200 text-base outline-none text-gray-700 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out">
</div>
<button type="submit" class="text-white bg-indigo-500 border-0 py-2 px-8 focus:outline-none hover:bg-indigo-600 rounded text-lg">Parse & Validate</button>
</form>
<div id="messages">
<p id="message" class="text-xs text-gray-500 mt-3"></p>
</div>
</div>

</div>
<div class="p-4 md:w-1/4">

</div>
</div>
</div>
</section>

<script src="./index.js"></script>
</body>
</html>
58 changes: 58 additions & 0 deletions frontend/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
document.getElementById('validationForm').addEventListener('submit', async function(event) {
event.preventDefault();

const email = document.getElementById('email').value;
const fullName = document.getElementById('full-name').value;
const message = document.getElementById('message');
const form = document.getElementById('validationForm');
// Clear previous results
message.innerHTML = '';

// Create Fragment
const messageFragment = document.createDocumentFragment('');

const local = 'http://localhost'
const port = '8080'
const success = true

try {
const first = document.getElementById('first')
const last = document.getElementById('last')
const nameMessage = document.getElementById('name-message');
// Parse name
const nameResponse = await fetch(`${local}:${port}/parse/name?name=${fullName}`);
const parsedName = await nameResponse.json();
console.log(parsedName);

if (parsedName.error) {
message.innerHTML += `<p style="color: red">Error parsing name: ${parsedName.error}</p>`;
} else {
first.value = parsedName.first
last.value = parsedName.last
}
} catch (error) {
message.innerHTML += `<p>Error: ${error.message}</p>`;
success = false
}

try {
// Validate email
const emailResponse = await fetch(`${local}:${port}/validate/email?email=${email}`);
const isEmailValid = await emailResponse.json();
console.log(isEmailValid)

if (!isEmailValid) {
message.innerHTML += `<p style="color: red">Email is invalid.</p>`;
} else {
message.innerHTML += `<p style="color: green">Email is valid.</p>`;
}
} catch (error) {
message.innerHTML += `<p>Error: ${error.message}</p>`;
success = false
}

if (success) {
alert('Success')
}

});
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<version>0.0.1-SNAPSHOT</version>
<name>midterm</name>
<description>midterm</description>
<url/>
<url/>
<licenses>
<license/>
</licenses>
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/com/example/midterm/ConcreteNameService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,18 @@
import org.springframework.stereotype.Component;
import service.NameService;

import utility.NameBuilder;

@Component
public class ConcreteNameService implements NameService {
@Override
public Name process(String name) throws Exception {
return null;

String[] fullName = new NameBuilder().process(name);
Name res_name = new Name();
res_name.setFirst(fullName[0]);
res_name.setLast(fullName[1]);

return res_name;
}
}
33 changes: 33 additions & 0 deletions src/main/java/com/example/midterm/ParseController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.example.midterm;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import service.NameService;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("parse")
public class ParseController {

@CrossOrigin(origins = "*")
@GetMapping("/name")
public ResponseEntity<?> processName(@RequestParam String name) {
NameService nameService = new ConcreteNameService();
try {
return ResponseEntity.ok(nameService.process(name));
} catch (Exception e) {
Map<String, String> errorResponse = new HashMap<>();
errorResponse.put("name", name);
errorResponse.put("error", "supplied name can't be parsed");
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorResponse);
}
}
}
26 changes: 26 additions & 0 deletions src/main/java/com/example/midterm/ValidateController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.example.midterm;


import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

@RestController
@RequestMapping("validate")
public class ValidateController {
public static final Pattern VALID_EMAIL_ADDRESS_REGEX =
Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE);

@CrossOrigin(origins = "*")
@GetMapping("/email")
public boolean validateEmail(@RequestParam String email) {
Matcher matcher = VALID_EMAIL_ADDRESS_REGEX.matcher(email);
return matcher.matches();
}

}
18 changes: 15 additions & 3 deletions src/main/java/utility/NameBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,14 @@ public String[] process(String name) {
log.debug("Check if clean string [{}] is from list of suffixes [{}]", o, (Object) suffix );
if(i==0 || first==null) {
first = convertName(o);
}else {
if(last==null) {
} else {
if (last==null) {
last = convertName(o);
}
} else if (last.equals("Del")) {
last = last + " " + convertName(o);
} else if (convertName(o).trim().equals("Del")) {
last = convertName(o);
}
}
}
}
Expand All @@ -60,6 +64,14 @@ public String[] process(String name) {
}

private String convertName(String inputString) {
if (inputString.trim().equals("APC")) {
return "APC";
}

if (inputString.trim().substring(0,2).equals("de")) {
return inputString.trim();
}

log.debug("Converting name [{}] to Proper Case",inputString );

if (inputString.length() == 1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public void remove() throws Exception {
nameService.process("APC User - Bsc"));
assertEquals("APC User | Bsc", new Name("APC", "User"),
nameService.process("APC User | Bsc"));
assertEquals("~~~ APC User ~~~", new Name("APC", "User"),
assertEquals("~~ ~APC User ~~~", new Name("APC", "User"),
nameService.process("~~~ APC User ~~~"));
assertEquals("APC User Certified Professional", new Name("APC", "User"),
nameService.process("APC User Certified Professional"));
Expand Down
Binary file modified target/classes/com/example/midterm/ConcreteNameService.class
Binary file not shown.
Binary file modified target/classes/com/example/midterm/MidtermApplication.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified target/classes/dto/Name.class
Binary file not shown.
Binary file modified target/classes/service/NameService.class
Binary file not shown.
Binary file modified target/classes/utility/NameBuilder.class
Binary file not shown.
Binary file not shown.