Index: ReserveNGo-frontend/src/components/Project/Admin/AdminDashboard.vue
===================================================================
--- ReserveNGo-frontend/src/components/Project/Admin/AdminDashboard.vue	(revision e2286fc336ef0aeee6353acf64555a2a06eb7365)
+++ ReserveNGo-frontend/src/components/Project/Admin/AdminDashboard.vue	(revision 2af3b2350cc1e659ea281d7fcc1a285eaf659392)
@@ -1,6 +1,11 @@
 <script>
 import { userStore } from '@/PiniaStores/UserStore.js'
+import { useToasts } from '@/composables/useToast.js'
+import { isValidEmail } from '@/mixins/utilFunctions.js'
+import { useAdmin } from '@/repository/Admin.ts'
+import LoadingIcon from '@/components/Project/Utility/LoadingIcon.vue'
 
 export default {
+  components: { LoadingIcon },
   data() {
     return {
@@ -16,146 +21,150 @@
       selectedLocalId: null,
       useUserStore: userStore(),
+      emailToManager: '',
+      showToast: useToasts().showToast,
+      isEmailSending: false,
+      isAddingRestaurant: false,
+      assigningManagerId: null,
+      removingManagerId: null,
     }
   },
   computed: {
     sortedRestaurants() {
-      if (!this.sortKey) return this.restaurants;
-
+      if (!this.sortKey) return this.restaurants
       return [...this.restaurants].sort((a, b) => {
-        let valueA = a[this.sortKey];
-        let valueB = b[this.sortKey];
-
+        let valueA = a[this.sortKey]
+        let valueB = b[this.sortKey]
         if (this.sortKey === 'createdAt' || this.sortKey === 'modifiedAt') {
-          valueA = new Date(valueA);
-          valueB = new Date(valueB);
+          valueA = new Date(valueA)
+          valueB = new Date(valueB)
         }
-
-        if (valueA < valueB) return this.sortOrder === 'asc' ? -1 : 1;
-        if (valueA > valueB) return this.sortOrder === 'asc' ? 1 : -1;
-        return 0;
-      });
-    }
+        if (valueA < valueB) return this.sortOrder === 'asc' ? -1 : 1
+        if (valueA > valueB) return this.sortOrder === 'asc' ? 1 : -1
+        return 0
+      })
+    },
   },
   methods: {
     sortBy(key) {
       if (this.sortKey === key) {
-        this.sortOrder = this.sortOrder === 'asc' ? 'desc' : 'asc';
+        this.sortOrder = this.sortOrder === 'asc' ? 'desc' : 'asc'
       } else {
-        this.sortKey = key;
-        this.sortOrder = 'asc';
+        this.sortKey = key
+        this.sortOrder = 'asc'
       }
     },
     formatDate(dateStr) {
-      const date = new Date(dateStr);
-      return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
-    },
-    removeRestaurant(localId) {
-      fetch(`http://localhost:8080/api/admin/delete-local/${localId}`, {
-        method: 'DELETE',
-        headers: {
-          'Content-Type': 'application/json',
-          Authorization: this.useUserStore.getToken },
-      })
-        .then((response) => {
-          if (!response.ok) console.log(response);
-          this.fetchRestaurants();
-        })
-        .catch((error) => console.log(error));
+      const date = new Date(dateStr)
+      return date.toLocaleDateString() + ' ' + date.toLocaleTimeString()
+    },
+    async removeRestaurant(localId) {
+      if (
+        !confirm('Are you sure you want to delete this restaurant? This action cannot be undone.')
+      )
+        return
+
+      try {
+        await useAdmin.deleteRestaurant(localId)
+        this.showToast('Restaurant successfully deleted!')
+        this.fetchRestaurants()
+      } catch (error) {
+        this.showToast(error.response || 'Failed to delete restaurant.', 'error')
+      }
     },
     fetchRestaurants() {
-      fetch('http://localhost:8080/api/admin/locals', {
-        method: 'GET',
-        headers: {
-          'Content-Type': 'application/json',
-          'Authorization': this.useUserStore.getToken
-        },
-      })
-        .then((res) => res.json())
-        .then((data) => (this.restaurants = data))
-        .catch((err) => console.log(err));
+      useAdmin
+        .fetchRestaurants()
+        .then((res) => (this.restaurants = res))
+        .catch((err) => console.log(err))
     },
     fetchManagers() {
-      fetch("http://localhost:8080/api/admin/local-managers", {
-        method: 'GET',
-        headers: {
-          'Content-Type': 'application/json',
-          Authorization: this.useUserStore.getToken
-        }
-      })
-        .then((res) => res.json())
-        .then((data) => (this.managers = data))
-        .catch((err) => console.log(err));
+      useAdmin
+        .fetchLocalMangers()
+        .then((res) => (this.managers = res))
+        .catch((err) => console.log(err))
     },
     fetchManagersForRestaurant(localId) {
-      fetch(`http://localhost:8080/api/admin/local-managers/${localId}`, {
-        method: 'GET',
-        headers: {
-          'Content-Type': 'application/json',
-          Authorization: this.useUserStore.getToken
-        }
-      })
-        .then((res) => res.json())
-        .then((data) => (this.managersForLocal = data))
-        .catch((err) => console.log(err));
-    },
-    assignManager(localId, managerId) {
-      fetch(`http://localhost:8080/api/admin/assign/${localId}/${managerId}`, {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/json',
-          'Authorization': this.useUserStore.getToken
-        }
-      })
-        .then((response) => {
-          if (!response.ok) throw new Error('Failed to assign manager');
-          this.managers = this.managers.filter(manager => manager.id !== managerId);
-          this.fetchRestaurants();
-          this.fetchManagersForRestaurant(localId);
-        })
-        .catch((error) => console.log(error));
-    },
-    removeManager(localId, managerId) {
-      fetch(`http://localhost:8080/api/admin/remove/${managerId}`, {
-        method: 'DELETE',
-        headers: {
-          'Content-Type': 'application/json',
-          'Authorization': this.useUserStore.getToken
-        }
-      })
-        .then((response) => {
-          if (!response.ok) throw new Error('Failed to remove manager');
-          this.fetchManagersForRestaurant(localId);
-        })
-        .catch((error) => console.log(error));
-    },
+      useAdmin
+        .fetchManagersForRestaurant(localId)
+        .then((res) => (this.managersForLocal = res))
+        .catch((err) => console.log(err))
+    },
+
+    async assignManager(localId, manager) {
+      this.assigningManagerId = manager.id
+      try {
+        await useAdmin.assignManager(localId, manager.id)
+        this.showToast(`Assigned ${manager.firstName} successfully.`, 'success')
+        this.fetchManagers()
+        this.fetchManagersForRestaurant(localId)
+      } catch (error) {
+        this.showToast(error.response || 'Failed to assign manager.', 'error')
+      } finally {
+        this.assigningManagerId = null
+      }
+    },
+
+    async removeManager(localId, manager) {
+      this.removingManagerId = manager.id
+      try {
+        await useAdmin.removeManager(manager.id)
+        this.showToast(`Removed ${manager.firstName} successfully.`, 'success')
+        this.fetchManagersForRestaurant(localId)
+      } catch (error) {
+        this.showToast(error.response || 'Failed to remove manager.', 'error')
+      } finally {
+        this.removingManagerId = null
+      }
+    },
+
     async addRestaurant() {
-      await fetch('http://localhost:8080/api/admin/add-local', {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/json',
-          'Authorization': this.useUserStore.getToken
-        },
-        body: JSON.stringify({ name: this.name })
-      })
-        .then((response) => {
-          if (!response.ok) throw new Error('Failed to add restaurant');
-          this.fetchRestaurants();
-          this.showAddRestaurantModal = false;
-        })
-        .catch((error) => console.log(error));
-    },
+      this.isAddingRestaurant = true
+      try {
+        await useAdmin.addRestaurant(this.name)
+        this.showToast('Restaurant added successfully!', 'success')
+        this.fetchRestaurants()
+        this.showAddRestaurantModal = false
+        this.name = ''
+      } catch (error) {
+        this.showToast(error.response || 'Failed to add restaurant.', 'error')
+      } finally {
+        this.isAddingRestaurant = false
+      }
+    },
+
     openAddManagerModal(localId) {
-      this.selectedLocalId = localId;
-      this.fetchManagers();
-      this.showAddManagerModal = true;
+      this.selectedLocalId = localId
+      this.fetchManagers()
+      this.showAddManagerModal = true
     },
     openEditManagersModal(localId) {
-      this.selectedLocalId = localId;
-      this.fetchManagersForRestaurant(localId);
-      this.showEditRestaurantManagersModal = true;
-    }
+      this.selectedLocalId = localId
+      this.fetchManagersForRestaurant(localId)
+      this.showEditRestaurantManagersModal = true
+    },
+
+    async sendEmailToManager() {
+      if (this.emailToManager === '') {
+        this.showToast('Fill out the email form', 'error')
+        return
+      }
+      if (!isValidEmail(this.emailToManager)) {
+        this.showToast('Please enter a valid email format', 'error')
+        return
+      }
+      this.isEmailSending = true
+      try {
+        await useAdmin.inviteManager(this.emailToManager)
+        this.showToast(`Invite sent to ${this.emailToManager}`, 'success')
+        this.emailToManager = ''
+      } catch (error) {
+        this.showToast(error.response || 'Failed to send email.', 'error')
+      } finally {
+        this.isEmailSending = false
+      }
+    },
   },
   mounted() {
-    this.fetchRestaurants();
+    this.fetchRestaurants()
   },
 }
@@ -167,10 +176,19 @@
 
     <!-- Add Restaurant Modal -->
-    <div v-if="showAddRestaurantModal" class="modal fade show d-block" tabindex="-1" style="background: rgba(0,0,0,0.5);">
+    <div
+      v-if="showAddRestaurantModal"
+      class="modal fade show d-block"
+      tabindex="-1"
+      style="background: rgba(0, 0, 0, 0.5)"
+    >
       <div class="modal-dialog">
         <div class="modal-content">
           <div class="modal-header">
             <h5 class="modal-title">Add New Restaurant</h5>
-            <button type="button" class="btn-close" @click="showAddRestaurantModal = false"></button>
+            <button
+              type="button"
+              class="btn-close"
+              @click="showAddRestaurantModal = false"
+            ></button>
           </div>
           <div class="modal-body">
@@ -178,7 +196,17 @@
               <div class="mb-3">
                 <label for="name" class="form-label">Restaurant Name</label>
-                <input v-model="name" type="text" id="name" class="form-control" placeholder="Enter restaurant name" required>
+                <input
+                  v-model="name"
+                  type="text"
+                  id="name"
+                  class="form-control"
+                  placeholder="Enter restaurant name"
+                  required
+                />
               </div>
-              <button type="submit" class="btn btn-primary">Add</button>
+              <button type="submit" class="btn btn-primary" :disabled="isAddingRestaurant">
+                <LoadingIcon v-if="isAddingRestaurant" />
+                {{ isAddingRestaurant ? 'Adding...' : 'Add' }}
+              </button>
             </form>
           </div>
@@ -188,5 +216,10 @@
 
     <!-- Add Manager Modal -->
-    <div v-if="showAddManagerModal" class="modal fade show d-block" tabindex="-1" style="background: rgba(0,0,0,0.5);">
+    <div
+      v-if="showAddManagerModal"
+      class="modal fade show d-block"
+      tabindex="-1"
+      style="background: rgba(0, 0, 0, 0.5)"
+    >
       <div class="modal-dialog modal-lg">
         <div class="modal-content">
@@ -197,7 +230,18 @@
           <div class="modal-body">
             <ul class="list-group">
-              <li v-for="manager in managers" :key="manager.id" class="list-group-item d-flex justify-content-between align-items-center">
+              <li
+                v-for="manager in managers"
+                :key="manager.id"
+                class="list-group-item d-flex justify-content-between align-items-center"
+              >
                 <span>{{ manager.firstName }} {{ manager.lastName }} - {{ manager.email }}</span>
-                <button class="btn btn-sm btn-success" @click="assignManager(selectedLocalId, manager.id)">Add</button>
+                <button
+                  class="btn btn-sm btn-success"
+                  @click="assignManager(selectedLocalId, manager)"
+                  :disabled="assigningManagerId === manager.id"
+                >
+                  <LoadingIcon v-if="assigningManagerId === manager.id" />
+                  {{ assigningManagerId === manager.id ? 'Adding...' : 'Add' }}
+                </button>
               </li>
             </ul>
@@ -208,16 +252,36 @@
 
     <!-- Edit Managers Modal -->
-    <div v-if="showEditRestaurantManagersModal" class="modal fade show d-block" tabindex="-1" style="background: rgba(0,0,0,0.5);">
+    <div
+      v-if="showEditRestaurantManagersModal"
+      class="modal fade show d-block"
+      tabindex="-1"
+      style="background: rgba(0, 0, 0, 0.5)"
+    >
       <div class="modal-dialog modal-lg">
         <div class="modal-content">
           <div class="modal-header">
             <h5 class="modal-title">Restaurant Managers</h5>
-            <button type="button" class="btn-close" @click="showEditRestaurantManagersModal = false"></button>
+            <button
+              type="button"
+              class="btn-close"
+              @click="showEditRestaurantManagersModal = false"
+            ></button>
           </div>
           <div class="modal-body">
             <ul class="list-group">
-              <li v-for="manager in managersForLocal" :key="manager.id" class="list-group-item d-flex justify-content-between align-items-center">
+              <li
+                v-for="manager in managersForLocal"
+                :key="manager.id"
+                class="list-group-item d-flex justify-content-between align-items-center"
+              >
                 <span>{{ manager.firstName }} {{ manager.lastName }} - {{ manager.email }}</span>
-                <button class="btn btn-sm btn-danger" @click="removeManager(selectedLocalId, manager.id)">Remove</button>
+                <button
+                  class="btn btn-sm btn-danger"
+                  @click="removeManager(selectedLocalId, manager)"
+                  :disabled="removingManagerId === manager.id"
+                >
+                  <LoadingIcon v-if="removingManagerId === manager.id" />
+                  {{ removingManagerId === manager.id ? 'Removing...' : 'Remove' }}
+                </button>
               </li>
             </ul>
@@ -227,63 +291,86 @@
     </div>
 
-    <!-- Restaurants Table -->
     <div class="table-responsive shadow-sm table-container">
       <table class="table table-striped table-hover align-middle">
         <thead class="table-light">
-        <tr>
-          <th style="width: 80px;">Logo</th>
-          <th style="width: 200px; cursor: pointer;" @click="sortBy('localName')">
-            Name
-            <span v-if="sortKey === 'localName'">{{ sortOrder === 'asc' ? '↑' : '↓' }}</span>
-          </th>
-          <th style="width: 180px; cursor: pointer;" @click="sortBy('createdAt')">
-            Created At
-            <span v-if="sortKey === 'createdAt'">{{ sortOrder === 'asc' ? '↑' : '↓' }}</span>
-          </th>
-          <th style="width: 180px; cursor: pointer;" @click="sortBy('modifiedAt')">
-            Modified At
-            <span v-if="sortKey === 'modifiedAt'">{{ sortOrder === 'asc' ? '↑' : '↓' }}</span>
-          </th>
-          <th class="text-end" style="width: 220px;">Actions</th>
-        </tr>
+          <tr>
+            <th style="width: 80px">Logo</th>
+            <th style="width: 200px; cursor: pointer" @click="sortBy('localName')">
+              Name<span v-if="sortKey === 'localName'">{{ sortOrder === 'asc' ? '↑' : '↓' }}</span>
+            </th>
+            <th style="width: 180px; cursor: pointer" @click="sortBy('createdAt')">
+              Created At<span v-if="sortKey === 'createdAt'">{{
+                sortOrder === 'asc' ? '↑' : '↓'
+              }}</span>
+            </th>
+            <th style="width: 180px; cursor: pointer" @click="sortBy('modifiedAt')">
+              Modified At<span v-if="sortKey === 'modifiedAt'">{{
+                sortOrder === 'asc' ? '↑' : '↓'
+              }}</span>
+            </th>
+            <th class="text-end" style="width: 220px">Actions</th>
+          </tr>
         </thead>
         <tbody>
-        <tr v-for="restaurant in sortedRestaurants" :key="restaurant.localId">
-          <td>
-            <img
-              v-if="restaurant.localLogo"
-              :src="restaurant.localLogo"
-              alt="Logo"
-              class="img-thumbnail"
-              style="width: 40px; height: 40px; object-fit: cover;"
-            />
-            <span v-else class="text-muted">No Logo</span>
-          </td>
-          <td class="text-truncate">{{ restaurant.localName }}</td>
-          <td>{{ formatDate(restaurant.createdAt) }}</td>
-          <td>{{ formatDate(restaurant.modifiedAt) }}</td>
-          <td class="text-end">
-            <div class="d-flex justify-content-end gap-2 flex-wrap">
-              <button class="btn btn-sm btn-primary" @click="openAddManagerModal(restaurant.localId)">Add Manager</button>
-              <button class="btn btn-sm btn-primary" @click="openEditManagersModal(restaurant.localId)">Edit Managers</button>
-              <button class="btn btn-sm btn-outline-danger" @click="removeRestaurant(restaurant.localId)">
-                <i class="fas fa-trash-alt"></i> Delete restaurant
-              </button>
-            </div>
-          </td>
-        </tr>
+          <tr v-for="restaurant in sortedRestaurants" :key="restaurant.localId">
+            <td>
+              <img
+                v-if="restaurant.localLogo"
+                :src="restaurant.localLogo"
+                alt="Logo"
+                class="img-thumbnail"
+                style="width: 40px; height: 40px; object-fit: cover"
+              /><span v-else class="text-muted">No Logo</span>
+            </td>
+            <td class="text-truncate">{{ restaurant.localName }}</td>
+            <td>{{ formatDate(restaurant.createdAt) }}</td>
+            <td>{{ formatDate(restaurant.modifiedAt) }}</td>
+            <td class="text-end">
+              <div class="d-flex justify-content-end gap-2 flex-wrap">
+                <button
+                  class="btn btn-sm btn-primary"
+                  @click="openAddManagerModal(restaurant.localId)"
+                >
+                  Add Manager</button
+                ><button
+                  class="btn btn-sm btn-primary"
+                  @click="openEditManagersModal(restaurant.localId)"
+                >
+                  Edit Managers</button
+                ><button
+                  class="btn btn-sm btn-outline-danger"
+                  @click="removeRestaurant(restaurant.localId)"
+                >
+                  <i class="fas fa-trash-alt"></i> Delete restaurant
+                </button>
+              </div>
+            </td>
+          </tr>
         </tbody>
       </table>
     </div>
 
-    <!-- Add Restaurant Button -->
     <button class="btn btn-success mt-3" @click="showAddRestaurantModal = true">
       + Add Restaurant
     </button>
+    <div id="sendMailGroup" class="mt-3">
+      <button @click="sendEmailToManager" class="btn btn-success">
+        <LoadingIcon v-if="isEmailSending" />
+        <span v-else>+ </span>
+        Send Manager register mail
+      </button>
+      <input
+        v-model="emailToManager"
+        class="form-control"
+        type="text"
+        placeholder="Enter manager's email"
+      />
+    </div>
   </div>
 </template>
 
 <style scoped>
-html, body {
+html,
+body {
   margin: 0;
   padding: 0;
@@ -291,5 +378,4 @@
   overflow: hidden;
 }
-
 .container {
   max-width: 1200px;
@@ -301,10 +387,8 @@
   overflow: hidden;
 }
-
 .table-container {
   flex: 1 1 auto;
   overflow-y: auto;
 }
-
 table {
   font-size: 0.95rem;
@@ -312,5 +396,4 @@
   width: 100%;
 }
-
 th,
 td {
@@ -319,5 +402,4 @@
   text-overflow: ellipsis;
 }
-
 thead th {
   position: sticky;
@@ -327,14 +409,11 @@
   user-select: none;
 }
-
 th span {
   margin-left: 5px;
   font-size: 0.8rem;
 }
-
 td img {
   display: block;
 }
-
 .text-truncate {
   overflow: hidden;
@@ -342,7 +421,19 @@
   white-space: nowrap;
 }
-
 .modal {
   display: block;
 }
+#sendMailGroup {
+  display: flex;
+}
+#sendMailGroup > .btn {
+  flex-shrink: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+#sendMailGroup > .form-control {
+  flex-grow: 1;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
 </style>
Index: ReserveNGo-frontend/src/components/Project/Auth/register_.vue
===================================================================
--- ReserveNGo-frontend/src/components/Project/Auth/register_.vue	(revision e2286fc336ef0aeee6353acf64555a2a06eb7365)
+++ ReserveNGo-frontend/src/components/Project/Auth/register_.vue	(revision 2af3b2350cc1e659ea281d7fcc1a285eaf659392)
@@ -5,4 +5,5 @@
 import LoadingIcon from '@/components/Project/Utility/LoadingIcon.vue'
 import { useAuth } from '@/repository/Authentication.ts'
+import {useToasts} from '@/composables/useToast.js'
 
 export default {
@@ -23,4 +24,5 @@
       isLoading: false,
       errorMessage: '',
+      showToast: useToasts().showToast,
     }
   },
@@ -34,13 +36,24 @@
           this.form_info.phoneNumber,
           this.form_info.password,
-          this.path,
+          this.roleType,
+          this.tokenRegister
         )
         .then((json) => {
-          this.userStore_.setLocalStorage(json)
-          router.push('/')
+          if (this.roleType === "local-manager" || this.roleType === "local-worker") {
+            router.push('/login')
+            this.showToast("Successfully registered business account")
+
+          }
+          else {
+            this.showToast("Successfully registered user account")
+            router.push('/login')
+          }
         })
         .catch((err) => {
           if (err.status === 409) {
             this.errorMessage = "It looks like an account already exists with that email address. Do you want to log in instead?"
+          }
+          else {
+            this.errorMessage = err.response || "Something Went wrong";
           }
         })
@@ -50,4 +63,20 @@
     },
   },
+  computed: {
+    tokenRegister() {
+      return this.$route.query.token || null;
+    },
+    roleType(){
+      if (this.$route.params.userType)
+        return `local-${this.$route.params.userType}`
+        //local-manager
+      else {
+        return "customer"
+      }
+
+    }
+  }
+
+
 }
 </script>
@@ -61,5 +90,5 @@
             <div class="card shadow-sm border-0">
               <div class="card-body p-4">
-                <h3 class="mb-4 text-center">Register</h3>
+                <h3 class="mb-4 text-center">Register {{roleType}}</h3>
                 <form @submit.prevent="register" method="POST">
                   <div class="mb-3">
@@ -127,14 +156,4 @@
                     />
                   </div>
-
-                  <div class="mb-4">
-                    <label for="role" class="form-label">Role</label>
-                    <select class="form-select" id="role" v-model="path" required>
-                      <option value="" disabled>Select a role</option>
-                      <option value="customer">Customer</option>
-                      <option value="local-worker">Local Worker</option>
-                      <option value="local-manager">Local Manager</option>
-                    </select>
-                  </div>
                   <div style="color: red;">{{errorMessage}}</div>
                   <div class="d-grid">
Index: ReserveNGo-frontend/src/mixins/utilFunctions.js
===================================================================
--- ReserveNGo-frontend/src/mixins/utilFunctions.js	(revision e2286fc336ef0aeee6353acf64555a2a06eb7365)
+++ ReserveNGo-frontend/src/mixins/utilFunctions.js	(revision 2af3b2350cc1e659ea281d7fcc1a285eaf659392)
@@ -25,2 +25,9 @@
 
 }
+
+export function isValidEmail(email) {
+  const emailRegex = new RegExp(
+    /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
+  );
+  return emailRegex.test(email);
+}
Index: ReserveNGo-frontend/src/repository/Admin.ts
===================================================================
--- ReserveNGo-frontend/src/repository/Admin.ts	(revision 2af3b2350cc1e659ea281d7fcc1a285eaf659392)
+++ ReserveNGo-frontend/src/repository/Admin.ts	(revision 2af3b2350cc1e659ea281d7fcc1a285eaf659392)
@@ -0,0 +1,45 @@
+import { config } from '@/constants/Api_config'
+import { HttpClient } from '@/Api_Classes/HttpClient'
+
+const BASE_API_URL = config.API_BASE_URL
+
+class Admin {
+  private readonly httpClient: HttpClient
+
+  constructor(baseUrl: string) {
+    this.httpClient = new HttpClient(baseUrl)
+  }
+
+  inviteManager(newEmail: string): Promise<any> {
+    return this.httpClient.post('invite-manager', { newEmail })
+  }
+  addRestaurant(name: string): Promise<any> {
+    return this.httpClient.post('add-local', { name })
+  }
+
+  async deleteRestaurant(localId: number): Promise<any> {
+    return this.httpClient.delete(`delete-local/${localId}`)
+  }
+
+  fetchRestaurants() : Promise<any>  {
+    return this.httpClient.get('locals')
+  }
+
+  fetchLocalMangers(): Promise<any> {
+    return this.httpClient.get('local-managers')
+  }
+
+  fetchManagersForRestaurant(localId: number): Promise<any> {
+    return this.httpClient.get(`local-managers/${localId}`)
+  }
+
+  async assignManager(localId: number, managerId: number): Promise<any> {
+    return this.httpClient.post(`assign/${localId}/${managerId}`)
+  }
+
+  async removeManager(managerId) {
+    return this.httpClient.delete(`remove/${managerId}`)
+  }
+}
+
+export const useAdmin = new Admin(BASE_API_URL + '/api/admin/', )
Index: ReserveNGo-frontend/src/repository/Authentication.ts
===================================================================
--- ReserveNGo-frontend/src/repository/Authentication.ts	(revision e2286fc336ef0aeee6353acf64555a2a06eb7365)
+++ ReserveNGo-frontend/src/repository/Authentication.ts	(revision 2af3b2350cc1e659ea281d7fcc1a285eaf659392)
@@ -22,6 +22,7 @@
     password: String,
     role: String,
+    inviteToken?: String
   ) {
-    return this.httpClient.post("register/" + role, { firstName, lastName, email, phoneNumber, password })
+    return this.httpClient.post("register/" + role, { firstName, lastName, email, phoneNumber, password }, {headers: {'Invite-Token': inviteToken} })
   }
 }
Index: ReserveNGo-frontend/src/router/index.js
===================================================================
--- ReserveNGo-frontend/src/router/index.js	(revision e2286fc336ef0aeee6353acf64555a2a06eb7365)
+++ ReserveNGo-frontend/src/router/index.js	(revision 2af3b2350cc1e659ea281d7fcc1a285eaf659392)
@@ -38,5 +38,5 @@
     },
     {
-      path: '/register',
+      path: '/register/:userType?',
       name: 'register',
       component: register_,
