Index: jobvista-frontend/src/redux/actions/applicationActions.js
===================================================================
--- jobvista-frontend/src/redux/actions/applicationActions.js	(revision 28b3398dcd7f9cfd044c2cb7923434b06037fee2)
+++ jobvista-frontend/src/redux/actions/applicationActions.js	(revision 28b3398dcd7f9cfd044c2cb7923434b06037fee2)
@@ -0,0 +1,94 @@
+import axios from "../../axios/axiosInstance";
+import {
+    CURRENT_USER,
+    FETCH_APPLICATIONS_BY_JOB_ID,
+    FETCH_APPLICATIONS_BY_JOB_SEEKER_ID,
+    SUBMIT_APPLICATION, UPDATE_APPLICATION_STATUS
+} from "../actionTypes";
+
+export const ApplicationActions = {
+    submitApplication: (application, callback) => {
+        return dispatch => {
+            axios.post("/job-advertisements/apply", application, {
+                headers: {
+                    'Content-Type': 'multipart/form-data'
+                }
+            })
+                .then(response => {
+                    dispatch({
+                        type: SUBMIT_APPLICATION,
+                        application: response.data
+                    })
+                    callback(true, response)
+                }).catch(error => {
+                callback(false, error)
+                console.log(error)
+            })
+        }
+
+    },
+    updateApplicationStatus: (id, status, callback) => {
+        console.log(status)
+      return dispatch => {
+            // TO DO: REFACTOR
+          axios.post("/applications/" + id + "/update", {
+              id: id,
+              status: status
+          })
+              .then(response => {
+                  dispatch({
+                      type: UPDATE_APPLICATION_STATUS,
+                      application: response.data,
+                  })
+                  callback(true, response)
+              }).catch(error => {
+              callback(false, error)
+          })
+      }
+    },
+    fetchApplicationsByJobSeeker: (callback) => {
+      return dispatch => {
+          let currentUser = JSON.parse(localStorage.getItem(CURRENT_USER));
+          axios.get("/my-applications/" + currentUser.id)
+              .then(response => {
+                  dispatch({
+                      type: FETCH_APPLICATIONS_BY_JOB_SEEKER_ID,
+                      applicationsByJobSeeker: response.data
+                  })
+                  callback(true, response)
+              }).catch(error => {
+                  callback(false, error)
+          })
+      }
+    },
+
+    fetchApplicationsByJobAdId: (jobAdId, callback) => {
+        return dispatch => {
+            axios.get("/job-advertisements/" + jobAdId + "/applications")
+                .then(response => {
+                        dispatch({
+                            type: FETCH_APPLICATIONS_BY_JOB_ID,
+                            applicationsByJobAdId: response.data
+                        })
+                        callback(true, response)
+                    }
+                ).catch(error => {
+                callback(false, error)
+            })
+        }
+    },
+    downloadResume: (fileName, callback) => {
+        return dispatch => {
+            return axios.get("/resume/" + fileName, {responseType: "blob"})
+                .then(response => {
+                    const blob = new Blob([response.data], { type: 'application/pdf' });
+                    const url = window.URL.createObjectURL(blob);
+                    callback(true, url);
+                })
+
+                .catch(error => {
+                    callback(false, error)
+                })
+        }
+    }
+}
Index: jobvista-frontend/src/redux/actions/jobAdvertisementActions.js
===================================================================
--- jobvista-frontend/src/redux/actions/jobAdvertisementActions.js	(revision 19398adb44637736271a04ab58b1f528cc33908f)
+++ jobvista-frontend/src/redux/actions/jobAdvertisementActions.js	(revision 28b3398dcd7f9cfd044c2cb7923434b06037fee2)
@@ -4,5 +4,5 @@
     CURRENT_USER, DELETE_JOB_ADVERTISEMENT, EDIT_JOB_ADVERTISEMENT,
     FETCH_JOB_ADVERTISEMENTS,
-    FETCH_JOB_ADVERTISEMENTS_BY_RECRUITER
+    FETCH_JOB_ADVERTISEMENTS_BY_RECRUITER, FILTER_JOB_ADVERTISEMENTS
 } from "../actionTypes";
 
@@ -10,5 +10,9 @@
     addJobAdvertisement: (jobAdvertisement, callback) => {
         return dispatch => {
-            axios.post("/job-advertisements/add", jobAdvertisement)
+            axios.post("/job-advertisements/add",  jobAdvertisement, {
+                headers: {
+                    'Content-Type': 'application/json'
+                },
+            })
                 .then(response => {
                     dispatch({
@@ -52,10 +56,10 @@
     },
     fetchJobAdvertisementById: (id, callback) => {
-        axios.get("/job-advertisements/view/" + id)
+        axios.get("/job-advertisements/" + id)
             .then(response => {
                 callback(true, response)
             }).catch(error => {
-                callback(false, error)
-            })
+            callback(false, error)
+        })
     },
 
@@ -74,6 +78,14 @@
         }
     },
+    filterJobAdvertisements: (filter, callback) => {
+        axios.post("/job-advertisements/filtered", filter)
+            .then(response => {
+                callback(true, response)
+            }).catch((error) => {
+            callback(false, error)        })
 
-    fetchJobAdvertisementsByRecruiter: (id, callback) => {
+    },
+
+    fetchJobAdvertisementsByRecruiter: (callback) => {
         return dispatch => {
             let currentUser = JSON.parse(localStorage.getItem(CURRENT_USER));
@@ -86,8 +98,19 @@
                     callback(true, response)
                 }).catch((error) => {
-                console.log("ERROR")
                 callback(false, error)
             })
         }
+    },
+
+    filterJobAdvertisementsByRecruiter: (filter, callback) => {
+
+        let currentUser = JSON.parse(localStorage.getItem(CURRENT_USER));
+        axios.post("/job-advertisements/recruiter/" + currentUser.id + "/filtered", filter)
+            .then(response => {
+                callback(true, response)
+            }).catch((error) => {
+            callback(false, error)
+        })
+
     },
 
