diff --git a/week5_TinsaeGhilay/client/pom.xml b/week5_TinsaeGhilay/client/pom.xml
new file mode 100644
index 0000000..37ea0c2
--- /dev/null
+++ b/week5_TinsaeGhilay/client/pom.xml
@@ -0,0 +1,44 @@
+
+
+ 4.0.0
+
+ net.tinsae
+ client
+ 1.0-SNAPSHOT
+
+
+ 21
+ 21
+ 5.10.0
+
+
+
+ jakarta.enterprise
+ jakarta.enterprise.cdi-api
+ 4.1.0
+ provided
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ 4.0.0
+ provided
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit.version}
+ test
+
+
+
+
\ No newline at end of file
diff --git a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java
new file mode 100644
index 0000000..0abee46
--- /dev/null
+++ b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java
@@ -0,0 +1,78 @@
+package net.tinsae;
+
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+
+public class Client {
+ private String url;
+ private String table = "/items";
+
+ public Client(String url){
+ this.url = url+table;
+ }
+
+ private static final HttpClient client = HttpClient.newHttpClient();
+
+ public static void main(String[] args) throws Exception {
+
+
+ }
+
+
+ public int postItem(String json) throws Exception {
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(new URI(url))
+ .header("Content-Type", "application/json")
+ .POST(HttpRequest.BodyPublishers.ofString(json))
+ .build();
+
+ HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
+ return response.statusCode();
+ }
+
+ public int putItem(int id, String json) throws Exception {
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(new URI(url + "/" + id))
+ .header("Content-Type", "application/json")
+ .PUT(HttpRequest.BodyPublishers.ofString(json))
+ .build();
+
+ HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
+ return response.statusCode();
+ }
+
+ public int deleteItem(int id) throws Exception {
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(new URI(url + "/" + id))
+ .DELETE()
+ .build();
+
+ HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
+ return response.statusCode();
+ }
+
+
+ public int getItems() throws Exception {
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(new URI(url))
+ .GET()
+ .build();
+
+ HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
+ System.out.println(response.body());
+ return response.statusCode();
+ }
+
+ public int getItem(int id) throws Exception {
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(new URI(url+"/"+id))
+ .GET()
+ .build();
+
+ HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
+ System.out.println(response.body());
+ return response.statusCode();
+ }
+}
diff --git a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java
new file mode 100644
index 0000000..6c76660
--- /dev/null
+++ b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java
@@ -0,0 +1,89 @@
+package net.tinsae;
+
+import java.util.Scanner;
+
+public class Delegator {
+
+ private final Client client;
+ private final Scanner sc = new Scanner(System.in);
+
+ public Delegator(String path) {
+ client = new Client(path);
+ }
+
+ public void executeCommand(String command) {
+ switch (command) {
+ case "delete" -> delegateDelete();
+ case "insert" -> delegateInsert();
+ case "read" -> delegateRead();
+ case "update" -> delegateUpdate();
+ default -> System.err.println("Unknown command, please repeat");
+ }
+ }
+
+ private void delegateDelete() {
+ try {
+ System.out.print("ID of the item you want to delete: ");
+ int id = sc.nextInt();
+ sc.nextLine(); // consume newline
+ int response = client.deleteItem(id);
+ System.out.println("Command executed with response code " + response);
+ } catch (Exception e) {
+ System.err.println("Error in executing delete command: " + e.getMessage());
+ }
+ }
+
+ private void delegateInsert() {
+ try {
+ System.out.print("Name: ");
+ String name = sc.nextLine().strip();
+
+ System.out.print("Description: ");
+ String description = sc.nextLine();
+
+ System.out.print("Price: ");
+ float price = sc.nextFloat();
+ sc.nextLine(); // consume newline
+
+ int response = client.postItem(makeJson(name, description, price));
+ System.out.println("Command executed with response code " + response);
+
+ } catch (Exception e) {
+ System.err.println("Error in executing insert command: " + e.getMessage());
+ }
+ }
+
+ private String makeJson(String name, String desc, float price) {
+ return String.format("""
+ {
+ "name": "%s",
+ "description": "%s",
+ "price": %s
+ }
+ """, name, desc, price);
+ }
+
+ private void delegateRead() {
+ try {
+ System.out.print("Read All or One? (A/O): ");
+ String input = sc.nextLine();
+
+ if (input.equalsIgnoreCase("A")) {
+ client.getItems();
+ return;
+ }
+
+ System.out.print("Enter ID: ");
+ int id = sc.nextInt();
+ sc.nextLine(); // consume newline
+ client.getItem(id);
+
+ } catch (Exception e) {
+ System.err.println("Error in executing read command: " + e.getMessage());
+ }
+ }
+
+ private void delegateUpdate() {
+ System.out.println("Update not implemented yet");
+ }
+}
diff --git a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java
new file mode 100644
index 0000000..87516f8
--- /dev/null
+++ b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java
@@ -0,0 +1,24 @@
+package net.tinsae;
+
+import java.util.Scanner;
+public class Main {
+
+ public static void main(String[] args) {
+ String path = "http://localhost:8080/shop-1.0-SNAPSHOT/api";
+ Delegator delegator = new Delegator(path);
+ System.out.println("Hello! What do you want to do? allowed actions are \n"+
+ "Insert, update, delete and read");
+ Scanner sc = new Scanner(System.in);
+ while(sc.hasNext()){
+ String response = sc.nextLine().strip();
+ if(response.equalsIgnoreCase("exit")){
+ return;
+ }
+
+ delegator.executeCommand(response);
+
+ }
+ sc.close();
+
+ }
+}
\ No newline at end of file
diff --git a/week5_TinsaeGhilay/client/target/classes/net/tinsae/Client.class b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Client.class
new file mode 100644
index 0000000..9d2a981
Binary files /dev/null and b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Client.class differ
diff --git a/week5_TinsaeGhilay/client/target/classes/net/tinsae/Delegator.class b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Delegator.class
new file mode 100644
index 0000000..38eba4a
Binary files /dev/null and b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Delegator.class differ
diff --git a/week5_TinsaeGhilay/client/target/classes/net/tinsae/Main.class b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Main.class
new file mode 100644
index 0000000..5dcdb43
Binary files /dev/null and b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Main.class differ
diff --git a/week5_TinsaeGhilay/client/target/client-1.0-SNAPSHOT.jar b/week5_TinsaeGhilay/client/target/client-1.0-SNAPSHOT.jar
new file mode 100644
index 0000000..c6b407a
Binary files /dev/null and b/week5_TinsaeGhilay/client/target/client-1.0-SNAPSHOT.jar differ
diff --git a/week5_TinsaeGhilay/client/target/maven-archiver/pom.properties b/week5_TinsaeGhilay/client/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..50d985e
--- /dev/null
+++ b/week5_TinsaeGhilay/client/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=client
+groupId=net.tinsae
+version=1.0-SNAPSHOT
diff --git a/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..5fe1ffc
--- /dev/null
+++ b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,3 @@
+net/tinsae/Client.class
+net/tinsae/Main.class
+net/tinsae/Delegator.class
diff --git a/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..954887d
--- /dev/null
+++ b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,3 @@
+/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java
+/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java
+/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java
diff --git a/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
new file mode 100644
index 0000000..e69de29
diff --git a/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000..e69de29