Index: jobvista-frontend/src/redux/actionTypes.js
===================================================================
--- jobvista-frontend/src/redux/actionTypes.js	(revision d8b6c91094bd4c748b347d914a3c4c3745d51587)
+++ jobvista-frontend/src/redux/actionTypes.js	(revision 19398adb44637736271a04ab58b1f528cc33908f)
@@ -4,2 +4,8 @@
 export const UPDATE_TOKEN = "UPDATE_TOKEN"
 export const CURRENT_USER = "CURRENT_USER"
+
+export const ADD_JOB_ADVERTISEMENT = "ADD_JOB_ADVERTISEMENT"
+export const EDIT_JOB_ADVERTISEMENT = "EDIT_JOB_ADVERTISEMENT"
+export const DELETE_JOB_ADVERTISEMENT = "DELETE_JOB_ADVERTISEMENT"
+export const FETCH_JOB_ADVERTISEMENTS = "FETCH_JOB_ADVERTISEMENTS"
+export const FETCH_JOB_ADVERTISEMENTS_BY_RECRUITER = "FETCH_JOB_ADVERTISEMENTS_BY_RECRUITER"
Index: jobvista-frontend/src/redux/actions/authActions.js
===================================================================
--- jobvista-frontend/src/redux/actions/authActions.js	(revision d8b6c91094bd4c748b347d914a3c4c3745d51587)
+++ jobvista-frontend/src/redux/actions/authActions.js	(revision 19398adb44637736271a04ab58b1f528cc33908f)
@@ -43,6 +43,7 @@
                 const response = jwtResponse.data;
                 const token = response.token;
-                //const refreshToken = response.refreshToken; // Corrected typo
+                //const refreshToken = response.refreshToken;
                 const user = {
+                    id: response.id,
                     email: response.email,
                     name: response.name,
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 19398adb44637736271a04ab58b1f528cc33908f)
@@ -0,0 +1,102 @@
+import axios from "../../axios/axiosInstance";
+import {
+    ADD_JOB_ADVERTISEMENT,
+    CURRENT_USER, DELETE_JOB_ADVERTISEMENT, EDIT_JOB_ADVERTISEMENT,
+    FETCH_JOB_ADVERTISEMENTS,
+    FETCH_JOB_ADVERTISEMENTS_BY_RECRUITER
+} from "../actionTypes";
+
+export const JobAdvertisementActions = {
+    addJobAdvertisement: (jobAdvertisement, callback) => {
+        return dispatch => {
+            axios.post("/job-advertisements/add", jobAdvertisement)
+                .then(response => {
+                    dispatch({
+                        type: ADD_JOB_ADVERTISEMENT,
+                        jobAdvertisement: response.data
+                    })
+                    callback(true, response)
+                }).catch((error) => {
+                callback(false, error)
+            })
+        }
+    },
+    editJobAdvertisement: (jobAdvertisement, id, callback) => {
+        return dispatch => {
+            axios.put("/job-advertisements/edit/" + id, jobAdvertisement)
+                .then(response => {
+                    dispatch({
+                        type: EDIT_JOB_ADVERTISEMENT,
+                        jobAdvertisement: response.data
+                    })
+                    callback(true, response)
+                }).catch((error) => {
+                callback(false, error)
+            })
+        }
+    },
+    deleteJobAdvertisement: (id, callback) => {
+        return dispatch => {
+            axios.delete("/job-advertisements/delete/" + id)
+                .then(response => {
+                    dispatch({
+                        type: DELETE_JOB_ADVERTISEMENT,
+                        id: id
+                    })
+                    callback(true)
+                }).catch(error => {
+                callback(false, error)
+            })
+
+        }
+    },
+    fetchJobAdvertisementById: (id, callback) => {
+        axios.get("/job-advertisements/view/" + id)
+            .then(response => {
+                callback(true, response)
+            }).catch(error => {
+                callback(false, error)
+            })
+    },
+
+    fetchJobAdvertisements: (callback) => {
+        return dispatch => {
+            axios.get("/job-advertisements/all")
+                .then(response => {
+                    dispatch({
+                        type: FETCH_JOB_ADVERTISEMENTS,
+                        jobAdvertisements: response.data,
+                    })
+                    callback(true, response)
+                }).catch((error) => {
+                callback(false, error)
+            })
+        }
+    },
+
+    fetchJobAdvertisementsByRecruiter: (id, callback) => {
+        return dispatch => {
+            let currentUser = JSON.parse(localStorage.getItem(CURRENT_USER));
+            axios.get("/job-advertisements/recruiter/" + currentUser.id)
+                .then(response => {
+                    dispatch({
+                        type: FETCH_JOB_ADVERTISEMENTS_BY_RECRUITER,
+                        jobAdvertisementsByRecruiter: response.data,
+                    })
+                    callback(true, response)
+                }).catch((error) => {
+                console.log("ERROR")
+                callback(false, error)
+            })
+        }
+    },
+
+    fetchRecruiterDetailsById: (id, callback) => {
+        axios.get("/recruiter/info/" + id)
+            .then(response => {
+                callback(true, response)
+            }).catch(error => {
+            callback(false, error)
+        })
+    }
+}
Index: jobvista-frontend/src/redux/reducers/authReducer.js
===================================================================
--- jobvista-frontend/src/redux/reducers/authReducer.js	(revision d8b6c91094bd4c748b347d914a3c4c3745d51587)
+++ jobvista-frontend/src/redux/reducers/authReducer.js	(revision 19398adb44637736271a04ab58b1f528cc33908f)
@@ -21,5 +21,5 @@
         case UPDATE_TOKEN:
             let token = action.payload;
-            let currentUser = null
+            let currentUser = "";
             if(!isExpired(token)) {
                 localStorage.setItem(AUTH_TOKEN, token);
@@ -37,11 +37,10 @@
             };
         case SIGN_OUT:
-            console.log("BRISAM")
             localStorage.removeItem(CURRENT_USER);
             localStorage.removeItem(AUTH_TOKEN);
             return {
                 ...state,
-                currentUser: null,
-                token: null
+                currentUser: "",
+                token: "",
             }
 
Index: jobvista-frontend/src/redux/reducers/jobAdvertisementReducer.js
===================================================================
--- jobvista-frontend/src/redux/reducers/jobAdvertisementReducer.js	(revision 19398adb44637736271a04ab58b1f528cc33908f)
+++ jobvista-frontend/src/redux/reducers/jobAdvertisementReducer.js	(revision 19398adb44637736271a04ab58b1f528cc33908f)
@@ -0,0 +1,63 @@
+import {
+    ADD_JOB_ADVERTISEMENT,
+    CURRENT_USER, DELETE_JOB_ADVERTISEMENT, EDIT_JOB_ADVERTISEMENT,
+    FETCH_JOB_ADVERTISEMENTS,
+    FETCH_JOB_ADVERTISEMENTS_BY_RECRUITER
+} from "../actionTypes";
+import {sortElementsByDateCreated} from "../../utils/utils";
+import {useSelector} from "react-redux";
+
+const initialState = {
+    jobAdvertisements: [],
+    jobAdvertisementsByRecruiter: []
+}
+
+let currentUser = JSON.parse(localStorage.getItem(CURRENT_USER))
+export const JobAdvertisementReducer = (state = initialState, action) => {
+    let jobAdvertisements;
+    let jobAdvertisementsByRecruiter;
+    switch (action.type) {
+        case ADD_JOB_ADVERTISEMENT:
+
+            return {
+                ...state,
+                jobAdvertisements: sortElementsByDateCreated([...state.jobAdvertisements, action.jobAdvertisement]),
+                jobAdvertisementsByRecruiter: sortElementsByDateCreated([...state.jobAdvertisementsByRecruiter, action.jobAdvertisement])
+            }
+        case EDIT_JOB_ADVERTISEMENT:
+            jobAdvertisements = state.jobAdvertisements.filter(jobAd => jobAd.id !== action.jobAdvertisement.id)
+            jobAdvertisementsByRecruiter = state.jobAdvertisementsByRecruiter.filter(jobAd => jobAd.id !== action.jobAdvertisement.id)
+
+            return {
+                jobAdvertisements: sortElementsByDateCreated([...jobAdvertisements, action.jobAdvertisement]),
+                jobAdvertisementsByRecruiter: sortElementsByDateCreated([...jobAdvertisementsByRecruiter, action.jobAdvertisement])
+            }
+        case DELETE_JOB_ADVERTISEMENT:
+            jobAdvertisements = state.jobAdvertisements.filter(jobAd => jobAd.id !== action.id)
+            jobAdvertisementsByRecruiter = state.jobAdvertisementsByRecruiter.filter(jobAd => jobAd.id !== action.id)
+
+            return {
+                jobAdvertisements: sortElementsByDateCreated([...jobAdvertisements]),
+                jobAdvertisementsByRecruiter: sortElementsByDateCreated([...jobAdvertisementsByRecruiter])
+            }
+
+        case FETCH_JOB_ADVERTISEMENTS:
+            return {
+                ...state,
+                jobAdvertisements: sortElementsByDateCreated(action.jobAdvertisements)
+            }
+
+        case FETCH_JOB_ADVERTISEMENTS_BY_RECRUITER:
+            return {
+                ...state,
+                jobAdvertisementsByRecruiter: sortElementsByDateCreated(action.jobAdvertisementsByRecruiter)
+            }
+
+        default:
+            return {
+                ...state,
+            };
+    }
+}
+
+export default JobAdvertisementReducer
Index: jobvista-frontend/src/redux/store.js
===================================================================
--- jobvista-frontend/src/redux/store.js	(revision d8b6c91094bd4c748b347d914a3c4c3745d51587)
+++ jobvista-frontend/src/redux/store.js	(revision 19398adb44637736271a04ab58b1f528cc33908f)
@@ -2,5 +2,5 @@
 import { combineReducers } from 'redux';
 import authReducer from "./reducers/authReducer";
-import { thunk } from 'redux-thunk';
+import jobAdReducer from "./reducers/jobAdvertisementReducer";
 
 // const rootReducer = combineReducers({
@@ -15,5 +15,6 @@
 export const store = configureStore({
     reducer: {
-        auth: authReducer
+        auth: authReducer,
+        jobAd: jobAdReducer
     },
 });
