Index: Farmatiko.sln
===================================================================
--- Farmatiko.sln	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko.sln	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -8,5 +8,5 @@
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FarmatikoData", "FarmatikoData\FarmatikoData.csproj", "{5BC55BDD-A064-4CE7-8606-D2FF42699EBF}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FarmatikoServices", "FarmatikoServices\FarmatikoServices.csproj", "{D207CD1B-4C31-4414-9EF4-DC18F219CBF6}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FarmatikoServices", "FarmatikoServices\FarmatikoServices.csproj", "{D207CD1B-4C31-4414-9EF4-DC18F219CBF6}"
 EndProject
 Global
Index: Farmatiko/ClientApp/src/app/login/login.component.html
===================================================================
--- Farmatiko/ClientApp/src/app/login/login.component.html	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/ClientApp/src/app/login/login.component.html	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -6,5 +6,5 @@
   <div class="example-container">
     <mat-form-field>
-      <input matInput placeholder="Email" [(ngModel)]="this.username" formControlName="email">
+      <input matInput placeholder="Email" [(ngModel)]="this.username" formControlName="username">
     </mat-form-field>
 
Index: Farmatiko/ClientApp/src/app/shared/data.service.ts
===================================================================
--- Farmatiko/ClientApp/src/app/shared/data.service.ts	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ Farmatiko/ClientApp/src/app/shared/data.service.ts	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,208 @@
+import { Injectable,  } from '@angular/core';
+import { HttpClient, HttpErrorResponse } from '@angular/common/http';
+
+import { Observable } from 'rxjs';
+import { map, catchError } from 'rxjs/operators';
+
+import { IHealthFacilities, IHealthcareWorkers, IMedicine, IPandemic, IPharmacy, IPharmacyHead, IPharmacyHeadRequest } from './interfaces';
+
+@Injectable()
+export class DataService {
+    baseFacilitiesUrl: string = '/api/facilities';
+    baseWorkersUrl: string = '/api/workers';
+    baseMedicineUrl: string = '/api/medicines';
+    basePandemicUrl: string = '/api/pandemic';
+    basePharmacyUrl: string = '/api/pharmacy';
+    basePharmacyHead: string = '/api/pharmacyhead';
+
+    constructor(private http: HttpClient) {
+
+    }
+
+    //Facility GET
+    getFacilities() : Observable<IHealthFacilities[]> {
+        return this.http.get<IHealthFacilities[]>(this.baseFacilitiesUrl)
+                   .pipe(
+                        map((facilities: IHealthFacilities[]) => {
+                            return facilities;
+                        }),
+                        catchError(this.handleError)
+                   );
+    }
+    searchFacilities(searchquery: string) : Observable<IHealthFacilities[]> {
+        return this.http.get<IHealthFacilities[]>(this.baseFacilitiesUrl + '/search/' + searchquery)
+                   .pipe(
+                        map((facilities: IHealthFacilities[]) => {
+                            return facilities;
+                        }),
+                        catchError(this.handleError)
+                   );
+    }
+    getFacility(id: string) : Observable<IHealthFacilities> {
+        return this.http.get<IHealthFacilities>(this.baseFacilitiesUrl + '/' + id)
+                   .pipe(catchError(this.handleError));
+    }
+
+
+    //Worker GET
+    getWorkers() : Observable<IHealthcareWorkers[]> {
+        return this.http.get<IHealthcareWorkers[]>(this.baseWorkersUrl)
+                   .pipe(
+                        map((workers: IHealthcareWorkers[]) => {
+                            return workers;
+                        }),
+                        catchError(this.handleError)
+                   );
+    }
+    searchWorkers(searchquery: string) : Observable<IHealthcareWorkers[]> {
+        return this.http.get<IHealthcareWorkers[]>(this.baseWorkersUrl + '/search/' + searchquery)
+                   .pipe(
+                        map((workers: IHealthcareWorkers[]) => {
+                            return workers;
+                        }),
+                        catchError(this.handleError)
+                   );
+    }
+    getWorker(id: string) : Observable<IHealthcareWorkers> {
+        return this.http.get<IHealthcareWorkers>(this.baseWorkersUrl + '/' + id)
+                   .pipe(catchError(this.handleError));
+    }
+
+
+    //Medicine GET
+    getMedicines() : Observable<IMedicine[]> {
+        return this.http.get<IMedicine[]>(this.baseMedicineUrl)
+                   .pipe(
+                        map((medicines: IMedicine[]) => {
+                            return medicines;
+                        }),
+                        catchError(this.handleError)
+                   );
+    }
+    searchMedicines(searchquery: string) : Observable<IMedicine[]> {
+        return this.http.get<IMedicine[]>(this.baseMedicineUrl + '/search/' + searchquery)
+                   .pipe(
+                        map((medicines: IMedicine[]) => {
+                            return medicines;
+                        }),
+                        catchError(this.handleError)
+                   );
+    }
+    getMedicine(id: string) : Observable<IMedicine> {
+        return this.http.get<IMedicine>(this.baseMedicineUrl + '/' + id)
+                   .pipe(catchError(this.handleError));
+    }
+
+
+    getPandemic() : Observable<IPandemic[]> {
+        return this.http.get<IPandemic[]>(this.basePandemicUrl)
+                   .pipe(catchError(this.handleError));
+    }
+
+
+    //Pharmacy GET
+    getPharmacies() : Observable<IPharmacy[]> {
+        return this.http.get<IPharmacy[]>(this.basePharmacyUrl)
+                   .pipe(
+                        map((pharmacies: IPharmacy[]) => {
+                            return pharmacies;
+                        }),
+                        catchError(this.handleError)
+                   );
+    }
+    searchPharmacies(searchquery: string) : Observable<IPharmacy[]> {
+        return this.http.get<IPharmacy[]>(this.basePharmacyUrl + '/search/' + searchquery)
+                   .pipe(
+                        map((pharmacies: IPharmacy[]) => {
+                            return pharmacies;
+                        }),
+                        catchError(this.handleError)
+                   );
+    }
+    getPharmacy(id: string) : Observable<IPharmacy> {
+        return this.http.get<IPharmacy>(this.basePharmacyUrl + '/' + id)
+                   .pipe(catchError(this.handleError));
+    }
+
+    //PharmacyHead GET
+    getPharmacyHeads() : Observable<IPharmacyHead[]> {
+        return this.http.get<IPharmacyHead[]>(this.basePharmacyHead)
+                   .pipe(
+                        map((pharmacyheads: IPharmacyHead[]) => {
+                            return pharmacyheads;
+                        }),
+                        catchError(this.handleError)
+                   );
+    }
+    getClaimingRequests() : Observable<IPharmacyHeadRequest[]> {
+        return this.http.get<IPharmacyHeadRequest[]>(this.basePharmacyHead + '/requests')
+                   .pipe(
+                        map((requests: IPharmacyHeadRequest[]) => {
+                            return requests;
+                        }),
+                        catchError(this.handleError)
+                   );
+    }
+    loginPharmacyHead(email: string, passwd: string) : Observable<any> {
+        let postData = {username : email ,password :passwd};
+        return this.http.post<any>(this.basePharmacyHead + '/login', postData)
+                   .pipe(
+                        map((data) => {
+                            return data;
+                        }),
+                        catchError(this.handleError)
+                    );
+    }
+    getPharmacyHead(id: string) : Observable<IPharmacyHead> {
+        return this.http.get<IPharmacyHead>(this.basePharmacyHead + '/' + id)
+                   .pipe(catchError(this.handleError));
+    }
+    //PharmacyHead POST
+    insertPharmacyHead(head: IPharmacyHead) : Observable<IPharmacyHead> {
+        return this.http.post<IPharmacyHead>(this.basePharmacyHead + '/add', head)
+                   .pipe(
+                        map((data) => {
+                            return data;
+                        }),
+                        catchError(this.handleError)
+                    );
+    }
+    claimPharmacy(req: IPharmacyHeadRequest) : Observable<IPharmacyHeadRequest> {
+        return this.http.post<IPharmacyHeadRequest>(this.basePharmacyHead + '/requests', req)
+                    .pipe(
+                        map((data) => {
+                            return data;
+                        }),
+                        catchError(this.handleError)
+                    );
+    }
+    //PharmacyHead PUT
+    updatePharmacyHead(head: IPharmacyHead) : Observable<IPharmacyHead> {
+        return this.http.put<IPharmacyHead>(this.basePharmacyHead + '/' + head.id, head)
+                   .pipe(
+                        map((data) => {
+                            return data;
+                        }),
+                        catchError(this.handleError)
+                    );
+    }
+    //PharmacyHead DELETE
+    deletePharmacyHead(id: string) : Observable<boolean> {
+        return this.http.delete<boolean>(this.basePharmacyHead + '/delete/' + id)
+                   .pipe(catchError(this.handleError));
+    }
+    deleteClaimingRequest(id: string) : Observable<boolean> {
+        return this.http.delete<boolean>(this.basePharmacyHead + '/requests/' + id)
+                   .pipe(catchError(this.handleError));
+    }
+
+    private handleError(error: HttpErrorResponse) {
+        console.error('server error:', error);
+        if (error.error instanceof Error) {
+          let errMessage = error.error.message;
+          return Observable.throw(errMessage);
+        }
+        return Observable.throw(error || 'ASP.NET Core server error');
+    }
+
+}
Index: Farmatiko/ClientApp/src/app/shared/interfaces.ts
===================================================================
--- Farmatiko/ClientApp/src/app/shared/interfaces.ts	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/ClientApp/src/app/shared/interfaces.ts	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -55,4 +55,5 @@
     Passwd: string;
     Name: string;
+    originalUserName?: string;
     Role?: string;
 }  
Index: Farmatiko/ClientApp/src/app/shared/services/auth.service.ts
===================================================================
--- Farmatiko/ClientApp/src/app/shared/services/auth.service.ts	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/ClientApp/src/app/shared/services/auth.service.ts	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -11,7 +11,8 @@
   username: string;
   role: string;
+  originalUserName?: string;
   accessToken: string;
   refreshToken: string;
-  head: IPharmacyHead;
+  head?: IPharmacyHead;
 }
 
@@ -35,8 +36,11 @@
         this.http.get<LoginResult>(`${this.apiUrl}/user`).subscribe((x) => {
           this._user.next({
-            Email: x.username,
-            Role: x.role,
+            Email: x.head.Email,
+            Role: x.head.Role,
+            originalUserName: x.head.originalUserName,
             Passwd: x.head.Passwd,
-            Name: x.head.Name
+            Name: x.head.Name,
+            PharmacyMedicines: x.head.PharmacyMedicines,
+            Pharmacy: x.head.Pharmacy
           });
         });
@@ -60,8 +64,11 @@
         map((x) => {
           this._user.next({
-            Email: x.username,
-            Role: x.role,
+            Email: x.head.Email,
+            Role: x.head.Role,
+            originalUserName: x.head.originalUserName,
             Passwd: x.head.Passwd,
-            Name: x.head.Name
+            Name: x.head.Name,
+            PharmacyMedicines: x.head.PharmacyMedicines,
+            Pharmacy: x.head.Pharmacy
           });
           this.setLocalStorage(x);
@@ -98,8 +105,11 @@
         map((x) => {
           this._user.next({
-            Email: x.username,
-            Role: x.role,
+            Email: x.head.Email,
+            Role: x.head.Role,
+            originalUserName: x.head.originalUserName,
             Passwd: x.head.Passwd,
-            Name: x.head.Name
+            Name: x.head.Name,
+            PharmacyMedicines: x.head.PharmacyMedicines,
+            Pharmacy: x.head.Pharmacy
           });
           this.setLocalStorage(x);
Index: Farmatiko/ClientApp/src/environments/environment.ts
===================================================================
--- Farmatiko/ClientApp/src/environments/environment.ts	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/ClientApp/src/environments/environment.ts	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -5,5 +5,5 @@
 export const environment = {
   production: false,
-  baseApiUrl: 'https://localhost:44342/',
+  baseApiUrl: 'https://localhost:5001/',
 };
 
Index: Farmatiko/Controllers/AdminController.cs
===================================================================
--- Farmatiko/Controllers/AdminController.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/Controllers/AdminController.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -5,8 +5,11 @@
 using FarmatikoData.Models;
 using FarmatikoServices.FarmatikoServiceInterfaces;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 
 namespace Farmatiko.Controllers
 {
+    [ApiController]
+    [Authorize(Roles = "PharmacyHead")]
     public class AdminController : Controller
     {
@@ -40,5 +43,5 @@
         [HttpPost]
         [Route("api/pharmacyhead/add")]
-        public async Task<IActionResult> AddPharmacyHead(PharmacyHead pharmacyHead)
+        public async Task<IActionResult> AddPharmacyHead([FromBody]PharmacyHead pharmacyHead)
         {
             await _service.AddPharmacyHead(pharmacyHead);
@@ -46,20 +49,23 @@
         }
 
-        [HttpPost]
+        [HttpDelete]
         [Route("api/pharmacyhead/delete/{Id}")] 
-        public async Task<IActionResult> RemovePharmacyHead([FromQuery]int Id)
+        public async Task<IActionResult> RemovePharmacyHead([FromRoute] int Id)
         {
             await _service.RemovePharmacyHead(Id);
             return Ok();
         }
-        [HttpPost]
-        public IActionResult RejectRequset(RequestPharmacyHead req)
+        [HttpDelete]
+        [Route("api/pharmacyhead/requests/{Id}")]
+        public IActionResult RejectRequest([FromRoute] int Id)
         {
-            bool Success = _adminService.RejectRequest(req);
+            bool Success = _adminService.RejectRequest(Id);
             return Ok(Success);
         }
         [HttpPost]
-        public async Task<IActionResult> ApproveRequest(PharmacyHead pharmacyHead)
+        [Route("api/pharmacyhead/{Id}")]
+        public async Task<IActionResult> ApproveRequest([FromRoute]int Id, [FromBody]PharmacyHead pharmacyHead)
         {
+            int id = Id;
             await _phservice.UpdatePharmacyHead(pharmacyHead);
             return Ok();
Index: Farmatiko/Controllers/ErrorController.cs
===================================================================
--- Farmatiko/Controllers/ErrorController.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/Controllers/ErrorController.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -1,15 +1,31 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
+﻿using System.Net;
+using Microsoft.AspNetCore.Diagnostics;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
 
 namespace Farmatiko.Controllers
 {
+    [ApiController]
     public class ErrorController : Controller
     {
-        public IActionResult Index()
+        private readonly ILogger<ErrorController> _logger;
+
+        public ErrorController(ILogger<ErrorController> logger)
         {
-            return View();
+            _logger = logger;
+        }
+        [Route("/Error")]
+        public IActionResult Error()
+        {
+            var exception = HttpContext.Features.Get<IExceptionHandlerFeature>();
+            var statusCode = exception.Error.GetType().Name switch
+            {
+                "ArgumentException" => HttpStatusCode.BadRequest,
+                "Exception" => HttpStatusCode.InternalServerError,
+                /*"NotFoundResult" => HttpStatusCode.NotFound,*/
+                _ => HttpStatusCode.ServiceUnavailable
+            };
+            _logger.LogInformation(statusCode.ToString() + " " + exception.ToString());
+            return Problem(detail: exception.Error.Message, statusCode: (int)statusCode);
         }
     }
Index: Farmatiko/Controllers/FarmatikoController.cs
===================================================================
--- Farmatiko/Controllers/FarmatikoController.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/Controllers/FarmatikoController.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -11,10 +11,22 @@
     {
         private readonly IService _service;
-        public FarmatikoController(IService service)
+        private readonly IProcessJSONService _JSONservice;
+        public FarmatikoController(IService service, IProcessJSONService JSONservice)
         {
             _service = service;
+            _JSONservice = JSONservice;
         }
         // Workers
         //Get
+        [HttpGet]
+        [Route("api/getData")]
+        public void InsertData()
+        {
+            //_JSONservice.DownloadPharmaciesExcel();
+            //_JSONservice.GetProcessedHealthcareWorkersFromJSON();
+            //_JSONservice.GetProcessedHealthFacilitiesFromJSON();
+            //_JSONservice.GetProcessedMedicinesFromJSON();
+            //_JSONservice.GetProcessedPandemicsFromJSONApi();
+        }
         [HttpGet]
         [Route("api/workers")]
@@ -25,12 +37,12 @@
         }
         [HttpGet]
-        [Route("api/workers/search/{Query}")]
-        public async Task<IEnumerable<HealthcareWorker>> SearchWorkers(string Query)
+        [Route("api/workers/search/{query}")]
+        public async Task<IEnumerable<HealthcareWorker>> SearchWorkers([FromRoute]string query)
         {
-            return await _service.SearchWorkers(Query);
+            return await _service.SearchWorkers(query);
         }
         [HttpGet]
         [Route("api/workers/{id}")]
-        public async Task<HealthcareWorker> GetWorker(int Id)
+        public async Task<HealthcareWorker> GetWorker([FromRoute] int Id)
         {
             return await _service.GetWorker(Id);
@@ -48,14 +60,14 @@
         }
         [HttpGet]
-        [Route("api/facilities/search/{Query}")]
-        public async Task<IEnumerable<HealthFacility>> SearchFacilities(string Query)
+        [Route("api/facilities/search/{query}")]
+        public async Task<IEnumerable<HealthFacility>> SearchFacilities([FromRoute] string query)
         {
-            return await _service.SearchFacilities(Query);
+            return await _service.SearchFacilities(query);
         }
         [HttpGet]
-        [Route("api/facilities/{Id}")]
-        public async Task<HealthFacility> GetFacility(int Id)
+        [Route("api/facilities/{id}")]
+        public async Task<HealthFacility> GetFacility([FromRoute] int id)
         {
-            return await _service.GetFacility(Id);
+            return await _service.GetFacility(id);
         }
         //Post
@@ -70,12 +82,12 @@
         }
         [HttpGet]
-        [Route("api/medicines/search/{Query}")]
-        public async Task<IEnumerable<Medicine>> SearchMedicines(string Query)
+        [Route("api/medicines/search/{query}")]
+        public async Task<IEnumerable<Medicine>> SearchMedicines([FromRoute] string query)
         {
-            return await _service.SearchMedicines(Query);
+            return await _service.SearchMedicines(query);
         }
         [HttpGet]
         [Route("api/medicines/{Id}")]
-        public async Task<Medicine> GetMedicine(int Id)
+        public async Task<Medicine> GetMedicine([FromRoute] int Id)
         {
             return await _service.GetMedicine(Id);
@@ -98,5 +110,5 @@
         [HttpGet]
         [Route("api/pharmacy/search/{Query}")]
-        public async Task<IEnumerable<Pharmacy>> SearchPharmacies(string Query)
+        public async Task<IEnumerable<Pharmacy>> SearchPharmacies([FromRoute] string Query)
         {
             return await _service.SearchPharmacies(Query);
@@ -104,5 +116,5 @@
         [HttpGet]
         [Route("api/pharmacy/{Id}")]
-        public async Task<Pharmacy> GetPharmacy(int Id)
+        public async Task<Pharmacy> GetPharmacy([FromRoute] int Id)
         {
             return await _service.GetPharmacy(Id);
Index: Farmatiko/Controllers/LoginController.cs
===================================================================
--- Farmatiko/Controllers/LoginController.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ Farmatiko/Controllers/LoginController.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,236 @@
+﻿using System;
+using System.ComponentModel.DataAnnotations;
+using System.Security.Claims;
+using System.Text.Json.Serialization;
+using System.Threading.Tasks;
+using FarmatikoData.Models;
+using FarmatikoServices.Auth;
+using FarmatikoServices.FarmatikoServiceInterfaces;
+using FarmatikoServices.Infrastructure;
+using Microsoft.AspNetCore.Authentication;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using Microsoft.IdentityModel.Tokens;
+
+namespace Farmatiko.Controllers
+{
+    [ApiController]
+    public class LoginController : ControllerBase
+    {
+        private readonly ILogger<LoginController> _logger;
+        private readonly IAuthService _authService;
+        private readonly IJwtAuthManager _jwtAuthManager;
+        private readonly IPHService _pHService;
+
+        public LoginController(ILogger<LoginController> logger, IAuthService authService, IJwtAuthManager jwtAuthManager, IPHService pHService)
+        {
+            _logger = logger;
+            _authService = authService;
+            _jwtAuthManager = jwtAuthManager;
+            _pHService = pHService;
+        }
+
+        [AllowAnonymous]
+        [HttpPost("api/pharmacyhead/login")]
+        public ActionResult Login([FromBody] LoginRequest request)
+        {
+            if (!ModelState.IsValid)
+            {
+                return BadRequest();
+            }
+
+            if (!_authService.IsValidUserCredentials(request.UserName, request.Password))
+            {
+                return Unauthorized();
+            }
+
+            var role = _authService.GetUserRole(request.UserName);
+            var claims = new[]
+            {
+                new Claim(ClaimTypes.Name,request.UserName),
+                new Claim(ClaimTypes.Role, role)
+            };
+
+            var jwtResult = _jwtAuthManager.GenerateTokens(request.UserName, claims, DateTime.Now);
+            _logger.LogInformation($"User [{request.UserName}] logged in the system.");
+            return Ok(new LoginResult
+            {
+                UserName = request.UserName,
+                Role = role,
+                AccessToken = jwtResult.AccessToken,
+                RefreshToken = jwtResult.RefreshToken.TokenString,
+                Head = _pHService.GetPharmacyHead(request.UserName)
+            });
+        }
+
+        [HttpGet("api/pharmacyhead/user")]
+        [Authorize]
+        public ActionResult GetCurrentUser()
+        {
+            return Ok(new LoginResult
+            {
+                UserName = User.Identity.Name,
+                Role = User.FindFirst(ClaimTypes.Role)?.Value ?? string.Empty,
+                OriginalUserName = User.FindFirst("OriginalUserName")?.Value
+            });
+        }
+
+        [HttpPost("api/pharmacyhead/logout")]
+        [Authorize]
+        public ActionResult Logout()
+        {
+            // optionally "revoke" JWT token on the server side --> add the current token to a block-list
+            // https://github.com/auth0/node-jsonwebtoken/issues/375
+
+            var userName = User.Identity.Name;
+            _jwtAuthManager.RemoveRefreshTokenByUserName(userName);
+            _logger.LogInformation($"User [{userName}] logged out the system.");
+            return Ok();
+        }
+
+        [HttpPost("api/pharmacyhead/refresh-token")]
+        [Authorize]
+        public async Task<ActionResult> RefreshToken([FromBody] RefreshTokenRequest request)
+        {
+            try
+            {
+                var userName = User.Identity.Name;
+                _logger.LogInformation($"User [{userName}] is trying to refresh JWT token.");
+
+                if (string.IsNullOrWhiteSpace(request.RefreshToken))
+                {
+                    return Unauthorized();
+                }
+
+                var accessToken = await HttpContext.GetTokenAsync("Bearer", "access_token");
+                var jwtResult = _jwtAuthManager.Refresh(request.RefreshToken, accessToken, DateTime.Now);
+                _logger.LogInformation($"User [{userName}] has refreshed JWT token.");
+                return Ok(new LoginResult
+                {
+                    UserName = userName,
+                    Role = User.FindFirst(ClaimTypes.Role)?.Value ?? string.Empty,
+                    AccessToken = jwtResult.AccessToken,
+                    RefreshToken = jwtResult.RefreshToken.TokenString
+                });
+            }
+            catch (SecurityTokenException e)
+            {
+                return Unauthorized(e.Message); // return 401 so that the client side can redirect the user to login page
+            }
+        }
+
+        [HttpPost("api/pharmacyhead/impersonation")]
+        [Authorize(Roles = UserRoles.Admin)]
+        public ActionResult Impersonate([FromBody] ImpersonationRequest request)
+        {
+            var userName = User.Identity.Name;
+            _logger.LogInformation($"User [{userName}] is trying to impersonate [{request.UserName}].");
+
+            var impersonatedRole = _authService.GetUserRole(request.UserName);
+            if (string.IsNullOrWhiteSpace(impersonatedRole))
+            {
+                _logger.LogInformation($"User [{userName}] failed to impersonate [{request.UserName}] due to the target user not found.");
+                return BadRequest($"The target user [{request.UserName}] is not found.");
+            }
+            if (impersonatedRole == UserRoles.Admin)
+            {
+                _logger.LogInformation($"User [{userName}] is not allowed to impersonate another Admin.");
+                return BadRequest("This action is not supported.");
+            }
+
+            var claims = new[]
+            {
+                new Claim(ClaimTypes.Name,request.UserName),
+                new Claim(ClaimTypes.Role, impersonatedRole),
+                new Claim("OriginalUserName", userName)
+            };
+
+            var jwtResult = _jwtAuthManager.GenerateTokens(request.UserName, claims, DateTime.Now);
+            _logger.LogInformation($"User [{request.UserName}] is impersonating [{request.UserName}] in the system.");
+            return Ok(new LoginResult
+            {
+                UserName = request.UserName,
+                Role = impersonatedRole,
+                OriginalUserName = userName,
+                AccessToken = jwtResult.AccessToken,
+                RefreshToken = jwtResult.RefreshToken.TokenString
+            });
+        }
+
+        [HttpPost("api/pharmacyhead/stop-impersonation")]
+        public ActionResult StopImpersonation()
+        {
+            var userName = User.Identity.Name;
+            var originalUserName = User.FindFirst("OriginalUserName")?.Value;
+            if (string.IsNullOrWhiteSpace(originalUserName))
+            {
+                return BadRequest("You are not impersonating anyone.");
+            }
+            _logger.LogInformation($"User [{originalUserName}] is trying to stop impersonate [{userName}].");
+
+            var role = _authService.GetUserRole(originalUserName);
+            var claims = new[]
+            {
+                new Claim(ClaimTypes.Name,originalUserName),
+                new Claim(ClaimTypes.Role, role)
+            };
+
+            var jwtResult = _jwtAuthManager.GenerateTokens(originalUserName, claims, DateTime.Now);
+            _logger.LogInformation($"User [{originalUserName}] has stopped impersonation.");
+            return Ok(new LoginResult
+            {
+                UserName = originalUserName,
+                Role = role,
+                OriginalUserName = null,
+                AccessToken = jwtResult.AccessToken,
+                RefreshToken = jwtResult.RefreshToken.TokenString
+            });
+        }
+    }
+
+    public class LoginRequest
+    {
+        [Required]
+        [JsonPropertyName("username")]
+        public string UserName { get; set; }
+
+        [Required]
+        [JsonPropertyName("password")]
+        public string Password { get; set; }
+    }
+
+    public class LoginResult
+    {
+        [JsonPropertyName("username")]
+        public string UserName { get; set; }
+
+        [JsonPropertyName("role")]
+        public string Role { get; set; }
+
+        [JsonPropertyName("originalUserName")]
+        public string OriginalUserName { get; set; }
+
+        [JsonPropertyName("accessToken")]
+        public string AccessToken { get; set; }
+
+        [JsonPropertyName("refreshToken")]
+        public string RefreshToken { get; set; }
+        [JsonPropertyName("head")]
+        public PharmacyHead Head { get; set; }
+    }
+
+    public class RefreshTokenRequest
+    {
+        [JsonPropertyName("refreshToken")]
+        public string RefreshToken { get; set; }
+    }
+
+    public class ImpersonationRequest
+    {
+        [JsonPropertyName("username")]
+        public string UserName { get; set; }
+    }
+}
+
Index: Farmatiko/Controllers/PharmacyHeadController.cs
===================================================================
--- Farmatiko/Controllers/PharmacyHeadController.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/Controllers/PharmacyHeadController.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -1,9 +1,7 @@
-﻿using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
+﻿using System.Collections.Generic;
 using System.Threading.Tasks;
-using FarmatikoData.FarmatikoRepoInterfaces;
 using FarmatikoData.Models;
 using FarmatikoServices.FarmatikoServiceInterfaces;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 
@@ -11,4 +9,5 @@
 {
     [ApiController]
+    [Authorize(Roles = "PharmacyHead")]
     public class PharmacyHeadController : Controller
     {
@@ -20,15 +19,14 @@
 
         //GET
-        //Mi trebaat rutite
-        [HttpGet]
+        /*[HttpGet]
         [Route("api/pharmacyhead")]
-        public async Task<IEnumerable<PharmacyHead>> GetPharmacyHeadInfo(string Token)
+        public async Task<IEnumerable<PharmacyHead>> GetPharmacyHeadInfo()
         {
-            var PHeads = await _PHService.GetPharmacyHeadInfo(Token);
+            var PHeads = await _PHService.GetPharmacyHeadInfo();
             return PHeads;
-        }
+        }*/
         [HttpGet]
         [Route("api/pharmacyhead/{Id}")]
-        public async Task<PharmacyHead> GetPharmacyHeadById(int Id)
+        public async Task<PharmacyHead> GetPharmacyHeadById([FromRoute]int Id)
         {
             var Phead = await _PHService.GetPharmacyHeadByIdAsync(Id);
@@ -38,5 +36,5 @@
         [HttpPost]
         [Route("api/pharmacyhead/add")]
-        public async Task<IActionResult> AddPharmacyHead(PharmacyHead pharmacyHead)
+        public async Task<IActionResult> AddPharmacyHead([FromBody]PharmacyHead pharmacyHead)
         {
             bool Success = await _PHService.Add(pharmacyHead);
@@ -44,10 +42,10 @@
         }
 
-        [HttpPost]
+        /*[HttpPost]
         [Route("api/pharmacyhead/login")]
         public async Task<int> Login([FromBody]PharmacyHead pharmacyHead)
         {
             return await _PHService.Login(pharmacyHead);
-        }
+        }*/
         [HttpPut]
         [Route("api/pharmacyhead/{Id}")]
@@ -58,5 +56,5 @@
         [HttpPost]
         [Route("api/pharmacyhead/requests")]
-        public async Task<IActionResult> ClaimPharmacy(RequestPharmacyHead pharmacy)
+        public async Task<IActionResult> ClaimPharmacy([FromBody]RequestPharmacyHead pharmacy)
         {
             bool Success = await _PHService.ClaimPharmacy(pharmacy);
@@ -65,5 +63,5 @@
         [HttpDelete]
         [Route("api/pharmacyhead/delete/{Id}")]
-        public async Task<IActionResult> Remove([FromQuery] int Id)
+        public async Task<IActionResult> Remove([FromRoute] int Id)
         {
             bool Success = await _PHService.Remove(Id);
@@ -72,5 +70,5 @@
         [HttpPost]
         [Route("api/pharmacyhead/requests/{Id}")]
-        public async Task<IActionResult> RemoveClaimingRequest([FromQuery] int Id)
+        public async Task<IActionResult> RemoveClaimingRequest([FromRoute] int Id)
         {
             bool Success = await _PHService.RemoveClaimingRequest(Id);
Index: rmatiko/Controllers/SystemController.cs
===================================================================
--- Farmatiko/Controllers/SystemController.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ 	(revision )
@@ -1,13 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Mvc;
-
-namespace Farmatiko.Controllers
-{
-    public class SystemController : Controller
-    {
-        
-    }
-}
Index: Farmatiko/Farmatiko.csproj
===================================================================
--- Farmatiko/Farmatiko.csproj	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/Farmatiko.csproj	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -14,4 +14,5 @@
 
   <ItemGroup>
+    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.9" />
     <PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.6" />
     <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.6" />
Index: Farmatiko/Startup.cs
===================================================================
--- Farmatiko/Startup.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/Startup.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -7,5 +7,4 @@
 using FarmatikoData;
 using Microsoft.EntityFrameworkCore;
-using FarmatikoServices;
 using FarmatikoData.FarmatikoRepoInterfaces;
 using FarmatikoData.FarmatikoRepo;
@@ -13,4 +12,10 @@
 using FarmatikoServices.Services;
 using Microsoft.Extensions.Logging;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.IdentityModel.Tokens;
+using System.Text;
+using FarmatikoServices.Auth;
+using FarmatikoServices.Infrastructure;
+using System;
 
 namespace Farmatiko
@@ -59,4 +64,57 @@
 
             services.AddTransient<ILogger, Logger<ProcessJSONService>>();
+
+            // services.AddTransient<ISystemService, SystemService>();
+
+
+            var jwtTokenConfig = Configuration.GetSection("jwtTokenConfig").Get<JwtTokenConfig>();
+            services.AddSingleton(jwtTokenConfig);
+
+            services.AddAuthentication(o =>
+            {
+                o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
+                o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
+                o.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme;
+            }).AddJwtBearer(x =>
+            {
+                x.RequireHttpsMetadata = true;
+                x.SaveToken = true;
+                x.TokenValidationParameters = new TokenValidationParameters
+                {
+                    ValidateIssuer = true,
+                    ValidIssuer = jwtTokenConfig.Issuer,
+                    ValidateIssuerSigningKey = true,
+                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtTokenConfig.Secret)),
+                    ValidAudience = jwtTokenConfig.Audience,
+                    ValidateAudience = true,
+                    ValidateLifetime = true,
+                    ClockSkew = TimeSpan.FromMinutes(1)
+                };
+            });
+
+            /*.AddJwtBearer(cfg =>
+                     {
+                         cfg.RequireHttpsMetadata = false;
+                         cfg.SaveToken = true;
+                         cfg.IncludeErrorDetails = true;
+                         cfg.TokenValidationParameters = new TokenValidationParameters()
+                         {
+                             ValidIssuer = Configuration.GetSection("TokenIssuer").Value,
+                             ValidAudience = Configuration.GetSection("TokenIssuer").Value,
+                             IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration.GetSection("SecretKey").Value))
+                         };
+
+                     });
+*/
+            services.AddSingleton<IJwtAuthManager, JwtAuthManager>();
+            services.AddHostedService<JwtRefreshTokenCache>();
+            services.AddScoped<IAuthService, AuthService>();
+            //If we add imgs
+            /*services.Configure<FormOptions>(o => {
+                o.ValueLengthLimit = int.MaxValue;
+                o.MultipartBodyLengthLimit = int.MaxValue;
+                o.MemoryBufferThreshold = int.MaxValue;
+            });*/
+
         }
 
@@ -74,7 +132,15 @@
                 app.UseHsts();
             }
-
+            app.UseExceptionHandler("/Error");
             app.UseHttpsRedirection();
             app.UseStaticFiles();
+
+            // if we add imgs
+            /*app.UseStaticFiles(new StaticFileOptions()
+            {
+                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot")),
+                RequestPath = new PathString("/wwwroot")
+            });*/
+
             if (!env.IsDevelopment())
             {
@@ -84,4 +150,7 @@
             app.UseRouting();
 
+            app.UseAuthentication();
+            app.UseAuthorization();
+
             app.UseCors(MyAllowSpecificOrigins);
 
@@ -90,5 +159,5 @@
                 endpoints.MapControllerRoute(
                     name: "default",
-                    pattern: "{controller}/{action=Index}/{id?}");
+                    pattern: "api/{controller}/{action=Index}/{id?}");
             });
 
Index: Farmatiko/appsettings.json
===================================================================
--- Farmatiko/appsettings.json	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ Farmatiko/appsettings.json	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -12,7 +12,16 @@
   "EPPlus": {
     "ExcelPackage": {
-      "LicenseContext": "NonCommercial" 
+      "LicenseContext": "NonCommercial"
     }
   },
-  "AllowedHosts": "*"
+  "AllowedHosts": "*",
+  "jwtTokenConfig": {
+    "secret": "1234567890123456789",
+    "issuer": "FARMATIKO",
+    "audience": "FARMATIKO",
+    "accessTokenExpiration": 20,
+    "refreshTokenExpiration": 60
+  },
+  "SecretKey": "PEJcK2bD4E2BKdNmAlUl",
+  "TokenIssuer": "FARMATIKOISSUER"
 }
Index: FarmatikoData/FarmatikoData.csproj
===================================================================
--- FarmatikoData/FarmatikoData.csproj	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoData/FarmatikoData.csproj	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -4,13 +4,4 @@
     <TargetFramework>netcoreapp3.1</TargetFramework>
   </PropertyGroup>
-
-  <ItemGroup>
-    <Compile Remove="Migrations\20200729091456_Second migration.cs" />
-    <Compile Remove="Migrations\20200729091456_Second migration.Designer.cs" />
-    <Compile Remove="Migrations\20200729091727_Second Migration.cs" />
-    <Compile Remove="Migrations\20200729091727_Second Migration.Designer.cs" />
-    <Compile Remove="Migrations\20200729101719_Third Migration.cs" />
-    <Compile Remove="Migrations\20200729101719_Third Migration.Designer.cs" />
-  </ItemGroup>
 
   <ItemGroup>
Index: FarmatikoData/FarmatikoDataContext.cs
===================================================================
--- FarmatikoData/FarmatikoDataContext.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoData/FarmatikoDataContext.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -17,4 +17,5 @@
         public virtual DbSet<MedicineList> MedicineLists { get; set; }
         public virtual DbSet<RequestPharmacyHead> PHRequests { get; set; }
+        public virtual DbSet<User> Users { get; set; }
     }
 }
Index: FarmatikoData/FarmatikoRepo/AdminRepo.cs
===================================================================
--- FarmatikoData/FarmatikoRepo/AdminRepo.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoData/FarmatikoRepo/AdminRepo.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -31,6 +31,7 @@
         }
         //POST
-        public void RemoveClaimRequest(RequestPharmacyHead req)
+        public void RemoveClaimRequest(int Id)
         {
+            var req = _context.PHRequests.Where(x => x.Id == Id).FirstOrDefault();
             _context.PHRequests.Remove(req);
             _context.SaveChanges();
Index: FarmatikoData/FarmatikoRepo/PHRepo.cs
===================================================================
--- FarmatikoData/FarmatikoRepo/PHRepo.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoData/FarmatikoRepo/PHRepo.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -71,4 +71,11 @@
             await _context.SaveChangesAsync();
         }
+
+        public PharmacyHead GetPharmacyHeadByUserName(string userName)
+        {
+            return _context.PharmacyHeads
+                .Where(x => x.Email.Equals(userName))
+                .FirstOrDefault();
+        }
     }
 }
Index: FarmatikoData/FarmatikoRepo/Repository.cs
===================================================================
--- FarmatikoData/FarmatikoRepo/Repository.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoData/FarmatikoRepo/Repository.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -19,5 +19,5 @@
         public async Task<IEnumerable<HealthcareWorker>> GetAllWorkers()
         {
-            var Workers = await Task.Run(() => _context.HealthcareWorkers.Take(10));
+            var Workers = await _context.HealthcareWorkers.Take(5).ToListAsync();
             return Workers;
         }
@@ -25,5 +25,5 @@
         public async Task<IEnumerable<HealthFacility>> GetFacilities()
         {
-            var Facilities = await Task.Run(() => _context.HealthFacilities.Take(10));
+            var Facilities = await _context.HealthFacilities.Take(5).ToListAsync();
             return Facilities;
         }
@@ -43,5 +43,5 @@
         public async Task<IEnumerable<Medicine>> GetMedicines()
         {
-            var Medicines = await Task.Run(() => _context.Medicines.Take(10));
+            var Medicines = await _context.Medicines.Take(3).ToListAsync();
             return Medicines;
         }
@@ -49,5 +49,5 @@
         public async Task<Pandemic> GetPandemic()
         {
-            var Pandemic = await Task.Run(() => _context.Pandemics.FirstOrDefault());
+            var Pandemic = await _context.Pandemics.FirstOrDefaultAsync();
             return Pandemic;
         }
@@ -55,5 +55,5 @@
         public async Task<IEnumerable<Pharmacy>> GetPharmacies()
         {
-            var Pharmacies = await Task.Run(() => _context.Pharmacies.Take(10));
+            var Pharmacies = await _context.Pharmacies.Take(5).ToListAsync();
             return Pharmacies;
         }
@@ -73,7 +73,7 @@
         public async Task<IEnumerable<HealthFacility>> SearchFacilities(string query)
         {
-            var SearchQuery = await Task.Run(() => _context.HealthFacilities
-            .Where(x => x.Name.Equals(query))
-            .OrderBy(x => x.Name));
+            var SearchQuery = await _context.HealthFacilities
+            .Where(x => x.Name.Contains(query))
+            .OrderBy(x => x.Name).Take(3).ToListAsync();
 
             return SearchQuery;
@@ -82,7 +82,7 @@
         public async Task<IEnumerable<Medicine>> SearchMedicines(string query)
         {
-            var SearchQuery = await Task.Run(() => _context.Medicines
-            .Where(x => x.Name.Equals(query))
-            .OrderBy(x => x.Name));
+            var SearchQuery = await _context.Medicines
+            .Where(x => x.Name.Contains(query))
+            .OrderBy(x => x.Name).Take(5).ToListAsync();
 
             return SearchQuery;
@@ -91,7 +91,7 @@
         public async Task<IEnumerable<Pharmacy>> SearchPharmacies(string query)
         {
-            var SearchQuery = await Task.Run(() => _context.Pharmacies
-            .Where(x => x.Name.Equals(query))
-            .OrderBy(x => x.Name));
+            var SearchQuery = await _context.Pharmacies.Take(5)
+            .Where(x => x.Name.Contains(query))
+            .OrderBy(x => x.Name).Take(5).ToListAsync();
 
             return SearchQuery;
@@ -100,13 +100,13 @@
         public async Task<IEnumerable<HealthcareWorker>> SearchWorkers(string query)
         {
-            var SearchQuery = await Task.Run(() => _context.HealthcareWorkers
-            .Where(x => x.Name.Equals(query))
-            .OrderBy(x => x.Name));
-
-            return SearchQuery;
-        }
-        public async Task<HealthFacility> GetFacilityJSON(string healthFacility)
-        {
-            var Facility = await Task.Run(() => _context.HealthFacilities.Where(x => x.Name.Equals(healthFacility)).FirstOrDefault());
+            var SearchQuery = await _context.HealthcareWorkers.Take(5)
+            .Where(x => x.Name.Contains(query))
+            .OrderBy(x => x.Name).Take(5).ToListAsync();
+
+            return SearchQuery;
+        }
+        public HealthFacility GetFacilityJSON(string healthFacility)
+        {
+            var Facility = _context.HealthFacilities.Where(x => x.Name.Equals(healthFacility)).FirstOrDefault();
             return Facility;
         }
@@ -116,41 +116,41 @@
         public async Task AddWorker(HealthcareWorker Worker)
         {
-            await Task.Run(() => _context.HealthcareWorkers.Add(Worker));
-            await _context.SaveChangesAsync();
+            await _context.HealthcareWorkers.AddAsync(Worker);
+            _context.SaveChanges();
         }
 
         public async Task AddFacility(HealthFacility healthFacility)
         {
-            await Task.Run(() => _context.HealthFacilities.Add(healthFacility));
-            await _context.SaveChangesAsync();
+            await _context.HealthFacilities.AddAsync(healthFacility);
+            _context.SaveChanges();
         }
 
         public async Task AddPharmacy(Pharmacy pharmacy)
         {
-            await Task.Run(() => _context.Pharmacies.Add(pharmacy));
-            await _context.SaveChangesAsync();
+            await _context.Pharmacies.AddAsync(pharmacy);
+            _context.SaveChanges();
         }
 
         public async Task AddPharmacyHead(PharmacyHead pharmacyHead)
         {
-            await Task.Run(() => _context.PharmacyHeads.Add(pharmacyHead));
-            await _context.SaveChangesAsync();
+            await _context.PharmacyHeads.AddAsync(pharmacyHead);
+            _context.SaveChanges();
         }
 
         public async Task AddMedicines(Medicine medicine)
         {
-            await Task.Run(() => _context.Medicines.Add(medicine));
-            await _context.SaveChangesAsync();
+            await _context.Medicines.AddAsync(medicine);
+            _context.SaveChanges();
         }
 
         public async Task AddPandemic(Pandemic pandemic)
         {
-            await Task.Run(() => _context.Pandemics.Add(pandemic));
-            await _context.SaveChangesAsync();
+            var pand = await _context.Pandemics.AddAsync(pandemic);
+            _context.SaveChanges();
         }
 
         public async Task UpdateFacility(HealthFacility healthFacility)
         {
-            var Facility = await Task.Run(() => _context.HealthFacilities.Where(x => x.Id == healthFacility.Id).FirstOrDefault());
+            var Facility = await _context.HealthFacilities.Where(x => x.Id == healthFacility.Id).FirstOrDefaultAsync();
             Facility.Address = healthFacility.Address;
             Facility.Email = healthFacility.Email;
@@ -159,5 +159,5 @@
             Facility.Phone = healthFacility.Phone;
             Facility.Type = healthFacility.Type;
-            await _context.SaveChangesAsync();
+            _context.SaveChanges();
         }
 
@@ -165,10 +165,10 @@
         {
             await Task.Run(() => _context.Medicines.Remove(medicine));
-            await _context.SaveChangesAsync();
+            _context.SaveChanges();
         }
 
         public async Task UpdatePandemic(Pandemic pandemic)
         {
-            var Pandemic = await Task.Run(() => _context.Pandemics.Where(x => x.Id == pandemic.Id).FirstOrDefault());
+            var Pandemic = await _context.Pandemics.Where(x => x.Id == pandemic.Id).FirstOrDefaultAsync();
             Pandemic.ActiveGlobal = pandemic.ActiveGlobal;
             Pandemic.ActiveMK = pandemic.ActiveMK;
@@ -179,5 +179,5 @@
             Pandemic.TotalGlobal = pandemic.TotalGlobal;
             Pandemic.TotalMK = pandemic.TotalMK;
-            await _context.SaveChangesAsync();
+            _context.SaveChanges();
         }
 
@@ -185,5 +185,5 @@
         {
             await Task.Run(() => _context.Pharmacies.Remove(pharmacy));
-            await _context.SaveChangesAsync();
+            _context.SaveChanges();
         }
         //not impl
@@ -195,10 +195,10 @@
         public async Task UpadatePharmacy(Pharmacy pharmacy)
         {
-            var Pharmacy = await Task.Run(() => _context.Pharmacies.Where(x => x.Id == pharmacy.Id).FirstOrDefault());
+            var Pharmacy = await _context.Pharmacies.Where(x => x.Id == pharmacy.Id).FirstOrDefaultAsync();
             Pharmacy.Name = pharmacy.Name;
             Pharmacy.Location = pharmacy.Location;
             Pharmacy.WorkAllTime = pharmacy.WorkAllTime;
             Pharmacy.Address = pharmacy.Address;
-            await _context.SaveChangesAsync();
+            _context.SaveChanges();
         }
         //ke vidime
@@ -212,7 +212,19 @@
             var PHead = await _context.PharmacyHeads.Where(x => x.Id == Id).FirstOrDefaultAsync();
             PHead.DeletedOn = DateTime.UtcNow;
-            await _context.SaveChangesAsync();
-        }
-
+            _context.SaveChanges();
+        }
+
+        public IDictionary<string, User> GetUsers()
+        {
+            var users = _context.Users.ToDictionary(x => x.Email, x => new User
+            {
+                Id = x.Id,
+                Name = x.Name,
+                Email = x.Email,
+                Password = x.Password,
+                UserRole = x.UserRole
+            });
+            return users;
+        }
     }
 }
Index: FarmatikoData/FarmatikoRepoInterfaces/IAdminRepo.cs
===================================================================
--- FarmatikoData/FarmatikoRepoInterfaces/IAdminRepo.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoData/FarmatikoRepoInterfaces/IAdminRepo.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -12,5 +12,5 @@
         Task<IEnumerable<RequestPharmacyHead>> GetClaimingRequests();
         Task<IEnumerable<PharmacyHead>> GetPharmacyHeads();
-        void RemoveClaimRequest(RequestPharmacyHead req);
+        void RemoveClaimRequest(int Id);
     }
 }
Index: FarmatikoData/FarmatikoRepoInterfaces/IPHRepo.cs
===================================================================
--- FarmatikoData/FarmatikoRepoInterfaces/IPHRepo.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoData/FarmatikoRepoInterfaces/IPHRepo.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -17,4 +17,5 @@
         Task Remove(PharmacyHead phead);
         Task RemoveClaimingRequest(int id);
+        PharmacyHead GetPharmacyHeadByUserName(string userName);
     }
 }
Index: FarmatikoData/FarmatikoRepoInterfaces/IRepository.cs
===================================================================
--- FarmatikoData/FarmatikoRepoInterfaces/IRepository.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoData/FarmatikoRepoInterfaces/IRepository.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -24,5 +24,6 @@
         Task<IEnumerable<Pharmacy>> SearchPharmacies(string query);
         Task<IEnumerable<HealthcareWorker>> SearchWorkers(string query);
-        Task<HealthFacility> GetFacilityJSON(string healthFacility);
+        HealthFacility GetFacilityJSON(string healthFacility);
+        IDictionary<string, User> GetUsers();
 
         //POST
Index: rmatikoData/Migrations/20200722131856_Initial migration.Designer.cs
===================================================================
--- FarmatikoData/Migrations/20200722131856_Initial migration.Designer.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ 	(revision )
@@ -1,334 +1,0 @@
-﻿// <auto-generated />
-using System;
-using FarmatikoData;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-namespace FarmatikoData.Migrations
-{
-    [DbContext(typeof(FarmatikoDataContext))]
-    [Migration("20200722131856_Initial migration")]
-    partial class Initialmigration
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder
-                .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn)
-                .HasAnnotation("ProductVersion", "3.1.6")
-                .HasAnnotation("Relational:MaxIdentifierLength", 63);
-
-            modelBuilder.Entity("FarmatikoData.Models.HealthFacilities", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer")
-                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
-                    b.Property<string>("Address")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<DateTime>("DeletedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<string>("Email")
-                        .HasColumnType("text");
-
-                    b.Property<string>("Municipality")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Phone")
-                        .HasColumnType("text");
-
-                    b.Property<string>("Type")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("HealthFacilities");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.HealthcareWorkers", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer")
-                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
-                    b.Property<string>("Branch")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<DateTime>("DeletedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<int>("FacilityId")
-                        .HasColumnType("integer");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Title")
-                        .HasColumnType("text");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("FacilityId");
-
-                    b.ToTable("HealthcareWorkers");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.Medicine", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer")
-                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
-                    b.Property<DateTime>("CreatedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<DateTime>("DeletedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<string>("Form")
-                        .HasColumnType("text");
-
-                    b.Property<string>("Manufacturer")
-                        .HasColumnType("text");
-
-                    b.Property<int?>("MedicineListId")
-                        .HasColumnType("integer");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("text");
-
-                    b.Property<string>("Packaging")
-                        .HasColumnType("text");
-
-                    b.Property<float>("Price")
-                        .HasColumnType("real");
-
-                    b.Property<string>("Strength")
-                        .HasColumnType("text");
-
-                    b.Property<string>("WayOfIssuing")
-                        .HasColumnType("text");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MedicineListId");
-
-                    b.ToTable("Medicines");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.MedicineList", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer")
-                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
-                    b.Property<DateTime>("CreatedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<DateTime>("DeletedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<bool>("HasMedicine")
-                        .HasColumnType("boolean");
-
-                    b.Property<int?>("MedicinesId")
-                        .HasColumnType("integer");
-
-                    b.Property<int?>("PharmacyHeadId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MedicinesId");
-
-                    b.HasIndex("PharmacyHeadId");
-
-                    b.ToTable("MedicineLists");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.Pandemic", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer")
-                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
-                    b.Property<int>("ActiveGlobal")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("ActiveMK")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("CreatedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<int>("DeathsGlobal")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("DeathsMK")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("DeletedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("text");
-
-                    b.Property<int>("NewMK")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("TotalGlobal")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("TotalMK")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Pandemics");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.Pharmacy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer")
-                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
-                    b.Property<string>("Address")
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<DateTime>("DeletedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<string>("Location")
-                        .HasColumnType("text");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("text");
-
-                    b.Property<int?>("PharmacyHeadId")
-                        .HasColumnType("integer");
-
-                    b.Property<bool>("WorkAllTime")
-                        .HasColumnType("boolean");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("PharmacyHeadId");
-
-                    b.ToTable("Pharmacies");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.PharmacyHead", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer")
-                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
-                    b.Property<DateTime>("CreatedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<DateTime>("DeletedOn")
-                        .HasColumnType("timestamp without time zone");
-
-                    b.Property<string>("Email")
-                        .HasColumnType("text");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("text");
-
-                    b.Property<string>("Password")
-                        .HasColumnType("text");
-
-                    b.Property<int?>("PharmacyId")
-                        .HasColumnType("integer");
-
-                    b.Property<int?>("PharmacyMedicinesId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("PharmacyId");
-
-                    b.HasIndex("PharmacyMedicinesId");
-
-                    b.ToTable("PharmacyHeads");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.HealthcareWorkers", b =>
-                {
-                    b.HasOne("FarmatikoData.Models.HealthFacilities", "Facility")
-                        .WithMany()
-                        .HasForeignKey("FacilityId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.Medicine", b =>
-                {
-                    b.HasOne("FarmatikoData.Models.MedicineList", null)
-                        .WithMany("MedicinesList")
-                        .HasForeignKey("MedicineListId");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.MedicineList", b =>
-                {
-                    b.HasOne("FarmatikoData.Models.Medicine", "Medicines")
-                        .WithMany()
-                        .HasForeignKey("MedicinesId");
-
-                    b.HasOne("FarmatikoData.Models.PharmacyHead", null)
-                        .WithMany("MedicineLists")
-                        .HasForeignKey("PharmacyHeadId");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.Pharmacy", b =>
-                {
-                    b.HasOne("FarmatikoData.Models.PharmacyHead", null)
-                        .WithMany("PharmaciesList")
-                        .HasForeignKey("PharmacyHeadId");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.PharmacyHead", b =>
-                {
-                    b.HasOne("FarmatikoData.Models.Pharmacy", "Pharmacy")
-                        .WithMany()
-                        .HasForeignKey("PharmacyId");
-
-                    b.HasOne("FarmatikoData.Models.MedicineList", "PharmacyMedicines")
-                        .WithMany()
-                        .HasForeignKey("PharmacyMedicinesId");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}
Index: rmatikoData/Migrations/20200722131856_Initial migration.cs
===================================================================
--- FarmatikoData/Migrations/20200722131856_Initial migration.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ 	(revision )
@@ -1,268 +1,0 @@
-﻿using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-namespace FarmatikoData.Migrations
-{
-    public partial class Initialmigration : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "HealthFacilities",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    CreatedOn = table.Column<DateTime>(nullable: false, defaultValueSql: "now()"),
-                    DeletedOn = table.Column<DateTime>(nullable: true),
-                    Name = table.Column<string>(nullable: false),
-                    Municipality = table.Column<string>(nullable: false),
-                    Address = table.Column<string>(nullable: false),
-                    Type = table.Column<string>(nullable: false),
-                    Email = table.Column<string>(nullable: true),
-                    Phone = table.Column<string>(nullable: true)
-                },
-                constraints: table => 
-                {
-                    table.PrimaryKey("PK_HealthFacilities", x => x.Id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Pandemics",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    CreatedOn = table.Column<DateTime>(nullable: false, defaultValueSql: "now()"),
-                    DeletedOn = table.Column<DateTime>(nullable: true),
-                    Name = table.Column<string>(nullable: true),
-                    TotalMK = table.Column<int>(nullable: false),
-                    ActiveMK = table.Column<int>(nullable: false),
-                    DeathsMK = table.Column<int>(nullable: false),
-                    NewMK = table.Column<int>(nullable: false),
-                    TotalGlobal = table.Column<int>(nullable: false),
-                    DeathsGlobal = table.Column<int>(nullable: false),
-                    ActiveGlobal = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Pandemics", x => x.Id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "HealthcareWorkers",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    CreatedOn = table.Column<DateTime>(nullable: false, defaultValueSql: "now()"),
-                    DeletedOn = table.Column<DateTime>(nullable: true),
-                    Name = table.Column<string>(nullable: false),
-                    Branch = table.Column<string>(nullable: false),
-                    FacilityId = table.Column<int>(nullable: false),
-                    Title = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_HealthcareWorkers", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_HealthcareWorkers_HealthFacilities_FacilityId",
-                        column: x => x.FacilityId,
-                        principalTable: "HealthFacilities",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Medicines",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    CreatedOn = table.Column<DateTime>(nullable: false, defaultValueSql: "now()"),
-                    DeletedOn = table.Column<DateTime>(nullable: true),
-                    Name = table.Column<string>(nullable: true),
-                    Strength = table.Column<string>(nullable: true),
-                    Form = table.Column<string>(nullable: true),
-                    WayOfIssuing = table.Column<string>(nullable: true),
-                    Manufacturer = table.Column<string>(nullable: true),
-                    Price = table.Column<float>(nullable: false),
-                    Packaging = table.Column<string>(nullable: true),
-                    MedicineListId = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Medicines", x => x.Id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "PharmacyHeads",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    CreatedOn = table.Column<DateTime>(nullable: false, defaultValueSql: "now()"),
-                    DeletedOn = table.Column<DateTime>(nullable: true),
-                    PharmacyMedicinesId = table.Column<int>(nullable: true),
-                    PharmacyId = table.Column<int>(nullable: true),
-                    Email = table.Column<string>(nullable: true),
-                    Name = table.Column<string>(nullable: true),
-                    Password = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_PharmacyHeads", x => x.Id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "MedicineLists",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    CreatedOn = table.Column<DateTime>(nullable: false, defaultValueSql: "now()"),
-                    DeletedOn = table.Column<DateTime>(nullable: true),
-                    MedicinesId = table.Column<int>(nullable: true),
-                    HasMedicine = table.Column<bool>(nullable: false),
-                    PharmacyHeadId = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_MedicineLists", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_MedicineLists_Medicines_MedicinesId",
-                        column: x => x.MedicinesId,
-                        principalTable: "Medicines",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "FK_MedicineLists_PharmacyHeads_PharmacyHeadId",
-                        column: x => x.PharmacyHeadId,
-                        principalTable: "PharmacyHeads",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Pharmacies",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    CreatedOn = table.Column<DateTime>(nullable: false, defaultValueSql: "now()"),
-                    DeletedOn = table.Column<DateTime>(nullable: true),
-                    Name = table.Column<string>(nullable: true),
-                    Location = table.Column<string>(nullable: true),
-                    Address = table.Column<string>(nullable: true),
-                    WorkAllTime = table.Column<bool>(nullable: false),
-                    PharmacyHeadId = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Pharmacies", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Pharmacies_PharmacyHeads_PharmacyHeadId",
-                        column: x => x.PharmacyHeadId,
-                        principalTable: "PharmacyHeads",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_HealthcareWorkers_FacilityId",
-                table: "HealthcareWorkers",
-                column: "FacilityId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_MedicineLists_MedicinesId",
-                table: "MedicineLists",
-                column: "MedicinesId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_MedicineLists_PharmacyHeadId",
-                table: "MedicineLists",
-                column: "PharmacyHeadId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Medicines_MedicineListId",
-                table: "Medicines",
-                column: "MedicineListId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Pharmacies_PharmacyHeadId",
-                table: "Pharmacies",
-                column: "PharmacyHeadId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_PharmacyHeads_PharmacyId",
-                table: "PharmacyHeads",
-                column: "PharmacyId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_PharmacyHeads_PharmacyMedicinesId",
-                table: "PharmacyHeads",
-                column: "PharmacyMedicinesId");
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_Medicines_MedicineLists_MedicineListId",
-                table: "Medicines",
-                column: "MedicineListId",
-                principalTable: "MedicineLists",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_PharmacyHeads_MedicineLists_PharmacyMedicinesId",
-                table: "PharmacyHeads",
-                column: "PharmacyMedicinesId",
-                principalTable: "MedicineLists",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_PharmacyHeads_Pharmacies_PharmacyId",
-                table: "PharmacyHeads",
-                column: "PharmacyId",
-                principalTable: "Pharmacies",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_MedicineLists_Medicines_MedicinesId",
-                table: "MedicineLists");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_MedicineLists_PharmacyHeads_PharmacyHeadId",
-                table: "MedicineLists");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_Pharmacies_PharmacyHeads_PharmacyHeadId",
-                table: "Pharmacies");
-
-            migrationBuilder.DropTable(
-                name: "HealthcareWorkers");
-
-            migrationBuilder.DropTable(
-                name: "Pandemics");
-
-            migrationBuilder.DropTable(
-                name: "HealthFacilities");
-
-            migrationBuilder.DropTable(
-                name: "Medicines");
-
-            migrationBuilder.DropTable(
-                name: "PharmacyHeads");
-
-            migrationBuilder.DropTable(
-                name: "Pharmacies");
-
-            migrationBuilder.DropTable(
-                name: "MedicineLists");
-        }
-    }
-}
Index: FarmatikoData/Migrations/20201104230858_InitialMigration.Designer.cs
===================================================================
--- FarmatikoData/Migrations/20201104230858_InitialMigration.Designer.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoData/Migrations/20201104230858_InitialMigration.Designer.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,387 @@
+﻿// <auto-generated />
+using System;
+using FarmatikoData;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+namespace FarmatikoData.Migrations
+{
+    [DbContext(typeof(FarmatikoDataContext))]
+    [Migration("20201104230858_InitialMigration")]
+    partial class InitialMigration
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn)
+                .HasAnnotation("ProductVersion", "3.1.6")
+                .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+            modelBuilder.Entity("FarmatikoData.Models.HealthFacility", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Email")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Municipality")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Phone")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Type")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("HealthFacilities");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.HealthcareWorker", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Branch")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<int>("FacilityId")
+                        .HasColumnType("integer");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Title")
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("FacilityId");
+
+                    b.ToTable("HealthcareWorkers");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.Medicine", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Form")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Manufacturer")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Packaging")
+                        .HasColumnType("text");
+
+                    b.Property<float>("Price")
+                        .HasColumnType("real");
+
+                    b.Property<string>("Strength")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("WayOfIssuing")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Medicines");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.MedicineList", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<bool>("HasMedicine")
+                        .HasColumnType("boolean");
+
+                    b.Property<int>("MedicineId")
+                        .HasColumnType("integer");
+
+                    b.Property<int?>("PharmacyHeadId")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("MedicineId");
+
+                    b.HasIndex("PharmacyHeadId");
+
+                    b.ToTable("MedicineLists");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.Pandemic", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<long>("ActiveGlobal")
+                        .HasColumnType("bigint");
+
+                    b.Property<int>("ActiveMK")
+                        .HasColumnType("integer");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<long>("DeathsGlobal")
+                        .HasColumnType("bigint");
+
+                    b.Property<int>("DeathsMK")
+                        .HasColumnType("integer");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int>("NewMK")
+                        .HasColumnType("integer");
+
+                    b.Property<long>("TotalGlobal")
+                        .HasColumnType("bigint");
+
+                    b.Property<int>("TotalMK")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Pandemics");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.Pharmacy", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Location")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int?>("PharmacyHeadId")
+                        .HasColumnType("integer");
+
+                    b.Property<bool>("WorkAllTime")
+                        .HasColumnType("boolean");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("PharmacyHeadId");
+
+                    b.ToTable("Pharmacies");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.PharmacyHead", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Email")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Password")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("PharmacyHeads");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.RequestPharmacyHead", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<int>("HeadId")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("PharmacyId")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("HeadId");
+
+                    b.HasIndex("PharmacyId");
+
+                    b.ToTable("PHRequests");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.User", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Email")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Password")
+                        .HasColumnType("text");
+
+                    b.Property<int>("UserRole")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Users");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.HealthcareWorker", b =>
+                {
+                    b.HasOne("FarmatikoData.Models.HealthFacility", "Facility")
+                        .WithMany()
+                        .HasForeignKey("FacilityId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.MedicineList", b =>
+                {
+                    b.HasOne("FarmatikoData.Models.Medicine", "Medicine")
+                        .WithMany()
+                        .HasForeignKey("MedicineId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FarmatikoData.Models.PharmacyHead", null)
+                        .WithMany("MedicineLists")
+                        .HasForeignKey("PharmacyHeadId");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.Pharmacy", b =>
+                {
+                    b.HasOne("FarmatikoData.Models.PharmacyHead", null)
+                        .WithMany("PharmaciesList")
+                        .HasForeignKey("PharmacyHeadId");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.RequestPharmacyHead", b =>
+                {
+                    b.HasOne("FarmatikoData.Models.PharmacyHead", "Head")
+                        .WithMany()
+                        .HasForeignKey("HeadId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FarmatikoData.Models.Pharmacy", "Pharmacy")
+                        .WithMany()
+                        .HasForeignKey("PharmacyId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
Index: FarmatikoData/Migrations/20201104230858_InitialMigration.cs
===================================================================
--- FarmatikoData/Migrations/20201104230858_InitialMigration.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoData/Migrations/20201104230858_InitialMigration.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,276 @@
+﻿using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+namespace FarmatikoData.Migrations
+{
+    public partial class InitialMigration : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.CreateTable(
+                name: "HealthFacilities",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    CreatedOn = table.Column<DateTime>(nullable: false),
+                    DeletedOn = table.Column<DateTime>(nullable: true),
+                    Name = table.Column<string>(nullable: false),
+                    Municipality = table.Column<string>(nullable: false),
+                    Address = table.Column<string>(nullable: false),
+                    Type = table.Column<string>(nullable: false),
+                    Email = table.Column<string>(nullable: true),
+                    Phone = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_HealthFacilities", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Medicines",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    CreatedOn = table.Column<DateTime>(nullable: false),
+                    DeletedOn = table.Column<DateTime>(nullable: true),
+                    Name = table.Column<string>(nullable: false),
+                    Strength = table.Column<string>(nullable: false),
+                    Form = table.Column<string>(nullable: true),
+                    WayOfIssuing = table.Column<string>(nullable: false),
+                    Manufacturer = table.Column<string>(nullable: false),
+                    Price = table.Column<float>(nullable: false),
+                    Packaging = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Medicines", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Pandemics",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    CreatedOn = table.Column<DateTime>(nullable: false),
+                    DeletedOn = table.Column<DateTime>(nullable: true),
+                    Name = table.Column<string>(nullable: false),
+                    TotalMK = table.Column<int>(nullable: false),
+                    ActiveMK = table.Column<int>(nullable: false),
+                    DeathsMK = table.Column<int>(nullable: false),
+                    NewMK = table.Column<int>(nullable: false),
+                    TotalGlobal = table.Column<long>(nullable: false),
+                    DeathsGlobal = table.Column<long>(nullable: false),
+                    ActiveGlobal = table.Column<long>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Pandemics", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "PharmacyHeads",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    CreatedOn = table.Column<DateTime>(nullable: false),
+                    DeletedOn = table.Column<DateTime>(nullable: true),
+                    Email = table.Column<string>(nullable: false),
+                    Name = table.Column<string>(nullable: false),
+                    Password = table.Column<string>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_PharmacyHeads", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Users",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    CreatedOn = table.Column<DateTime>(nullable: false),
+                    DeletedOn = table.Column<DateTime>(nullable: true),
+                    Name = table.Column<string>(nullable: true),
+                    Email = table.Column<string>(nullable: true),
+                    Password = table.Column<string>(nullable: true),
+                    UserRole = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Users", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "HealthcareWorkers",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    CreatedOn = table.Column<DateTime>(nullable: false),
+                    DeletedOn = table.Column<DateTime>(nullable: true),
+                    Name = table.Column<string>(nullable: false),
+                    Branch = table.Column<string>(nullable: false),
+                    FacilityId = table.Column<int>(nullable: false),
+                    Title = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_HealthcareWorkers", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_HealthcareWorkers_HealthFacilities_FacilityId",
+                        column: x => x.FacilityId,
+                        principalTable: "HealthFacilities",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "MedicineLists",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    CreatedOn = table.Column<DateTime>(nullable: false),
+                    DeletedOn = table.Column<DateTime>(nullable: true),
+                    MedicineId = table.Column<int>(nullable: false),
+                    HasMedicine = table.Column<bool>(nullable: false),
+                    PharmacyHeadId = table.Column<int>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_MedicineLists", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_MedicineLists_Medicines_MedicineId",
+                        column: x => x.MedicineId,
+                        principalTable: "Medicines",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_MedicineLists_PharmacyHeads_PharmacyHeadId",
+                        column: x => x.PharmacyHeadId,
+                        principalTable: "PharmacyHeads",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Pharmacies",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    CreatedOn = table.Column<DateTime>(nullable: false),
+                    DeletedOn = table.Column<DateTime>(nullable: true),
+                    Name = table.Column<string>(nullable: false),
+                    Location = table.Column<string>(nullable: false),
+                    Address = table.Column<string>(nullable: false),
+                    WorkAllTime = table.Column<bool>(nullable: false),
+                    PharmacyHeadId = table.Column<int>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Pharmacies", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_Pharmacies_PharmacyHeads_PharmacyHeadId",
+                        column: x => x.PharmacyHeadId,
+                        principalTable: "PharmacyHeads",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "PHRequests",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    CreatedOn = table.Column<DateTime>(nullable: false),
+                    DeletedOn = table.Column<DateTime>(nullable: true),
+                    HeadId = table.Column<int>(nullable: false),
+                    PharmacyId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_PHRequests", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_PHRequests_PharmacyHeads_HeadId",
+                        column: x => x.HeadId,
+                        principalTable: "PharmacyHeads",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_PHRequests_Pharmacies_PharmacyId",
+                        column: x => x.PharmacyId,
+                        principalTable: "Pharmacies",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_HealthcareWorkers_FacilityId",
+                table: "HealthcareWorkers",
+                column: "FacilityId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_MedicineLists_MedicineId",
+                table: "MedicineLists",
+                column: "MedicineId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_MedicineLists_PharmacyHeadId",
+                table: "MedicineLists",
+                column: "PharmacyHeadId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Pharmacies_PharmacyHeadId",
+                table: "Pharmacies",
+                column: "PharmacyHeadId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_PHRequests_HeadId",
+                table: "PHRequests",
+                column: "HeadId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_PHRequests_PharmacyId",
+                table: "PHRequests",
+                column: "PharmacyId");
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "HealthcareWorkers");
+
+            migrationBuilder.DropTable(
+                name: "MedicineLists");
+
+            migrationBuilder.DropTable(
+                name: "Pandemics");
+
+            migrationBuilder.DropTable(
+                name: "PHRequests");
+
+            migrationBuilder.DropTable(
+                name: "Users");
+
+            migrationBuilder.DropTable(
+                name: "HealthFacilities");
+
+            migrationBuilder.DropTable(
+                name: "Medicines");
+
+            migrationBuilder.DropTable(
+                name: "Pharmacies");
+
+            migrationBuilder.DropTable(
+                name: "PharmacyHeads");
+        }
+    }
+}
Index: FarmatikoData/Migrations/20201105055526_NewMigration.Designer.cs
===================================================================
--- FarmatikoData/Migrations/20201105055526_NewMigration.Designer.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoData/Migrations/20201105055526_NewMigration.Designer.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,387 @@
+﻿// <auto-generated />
+using System;
+using FarmatikoData;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+namespace FarmatikoData.Migrations
+{
+    [DbContext(typeof(FarmatikoDataContext))]
+    [Migration("20201105055526_NewMigration")]
+    partial class NewMigration
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn)
+                .HasAnnotation("ProductVersion", "3.1.6")
+                .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+            modelBuilder.Entity("FarmatikoData.Models.HealthFacility", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Email")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Municipality")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Phone")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Type")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("HealthFacilities");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.HealthcareWorker", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Branch")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<int>("FacilityId")
+                        .HasColumnType("integer");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Title")
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("FacilityId");
+
+                    b.ToTable("HealthcareWorkers");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.Medicine", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Form")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Manufacturer")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Packaging")
+                        .HasColumnType("text");
+
+                    b.Property<float>("Price")
+                        .HasColumnType("real");
+
+                    b.Property<string>("Strength")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("WayOfIssuing")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Medicines");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.MedicineList", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<bool>("HasMedicine")
+                        .HasColumnType("boolean");
+
+                    b.Property<int>("MedicineId")
+                        .HasColumnType("integer");
+
+                    b.Property<int?>("PharmacyHeadId")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("MedicineId");
+
+                    b.HasIndex("PharmacyHeadId");
+
+                    b.ToTable("MedicineLists");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.Pandemic", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<long>("ActiveGlobal")
+                        .HasColumnType("bigint");
+
+                    b.Property<int>("ActiveMK")
+                        .HasColumnType("integer");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<long>("DeathsGlobal")
+                        .HasColumnType("bigint");
+
+                    b.Property<int>("DeathsMK")
+                        .HasColumnType("integer");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int>("NewMK")
+                        .HasColumnType("integer");
+
+                    b.Property<long>("TotalGlobal")
+                        .HasColumnType("bigint");
+
+                    b.Property<int>("TotalMK")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Pandemics");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.Pharmacy", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Location")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int?>("PharmacyHeadId")
+                        .HasColumnType("integer");
+
+                    b.Property<bool>("WorkAllTime")
+                        .HasColumnType("boolean");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("PharmacyHeadId");
+
+                    b.ToTable("Pharmacies");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.PharmacyHead", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Email")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Password")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("PharmacyHeads");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.RequestPharmacyHead", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<int>("HeadId")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("PharmacyId")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("HeadId");
+
+                    b.HasIndex("PharmacyId");
+
+                    b.ToTable("PHRequests");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.User", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Email")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Password")
+                        .HasColumnType("text");
+
+                    b.Property<int>("UserRole")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Users");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.HealthcareWorker", b =>
+                {
+                    b.HasOne("FarmatikoData.Models.HealthFacility", "Facility")
+                        .WithMany()
+                        .HasForeignKey("FacilityId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.MedicineList", b =>
+                {
+                    b.HasOne("FarmatikoData.Models.Medicine", "Medicine")
+                        .WithMany()
+                        .HasForeignKey("MedicineId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FarmatikoData.Models.PharmacyHead", null)
+                        .WithMany("MedicineLists")
+                        .HasForeignKey("PharmacyHeadId");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.Pharmacy", b =>
+                {
+                    b.HasOne("FarmatikoData.Models.PharmacyHead", null)
+                        .WithMany("PharmaciesList")
+                        .HasForeignKey("PharmacyHeadId");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.RequestPharmacyHead", b =>
+                {
+                    b.HasOne("FarmatikoData.Models.PharmacyHead", "Head")
+                        .WithMany()
+                        .HasForeignKey("HeadId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FarmatikoData.Models.Pharmacy", "Pharmacy")
+                        .WithMany()
+                        .HasForeignKey("PharmacyId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
Index: FarmatikoData/Migrations/20201105055526_NewMigration.cs
===================================================================
--- FarmatikoData/Migrations/20201105055526_NewMigration.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoData/Migrations/20201105055526_NewMigration.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,17 @@
+﻿using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace FarmatikoData.Migrations
+{
+    public partial class NewMigration : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+
+        }
+    }
+}
Index: FarmatikoData/Migrations/FarmatikoDataContextModelSnapshot.cs
===================================================================
--- FarmatikoData/Migrations/FarmatikoDataContextModelSnapshot.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoData/Migrations/FarmatikoDataContextModelSnapshot.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -20,5 +20,5 @@
                 .HasAnnotation("Relational:MaxIdentifierLength", 63);
 
-            modelBuilder.Entity("FarmatikoData.Models.HealthFacilities", b =>
+            modelBuilder.Entity("FarmatikoData.Models.HealthFacility", b =>
                 {
                     b.Property<int>("Id")
@@ -60,5 +60,5 @@
                 });
 
-            modelBuilder.Entity("FarmatikoData.Models.HealthcareWorkers", b =>
+            modelBuilder.Entity("FarmatikoData.Models.HealthcareWorker", b =>
                 {
                     b.Property<int>("Id")
@@ -111,7 +111,9 @@
 
                     b.Property<string>("Manufacturer")
-                        .HasColumnType("text");
-
-                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
                         .HasColumnType("text");
 
@@ -123,7 +125,9 @@
 
                     b.Property<string>("Strength")
+                        .IsRequired()
                         .HasColumnType("text");
 
                     b.Property<string>("WayOfIssuing")
+                        .IsRequired()
                         .HasColumnType("text");
 
@@ -149,5 +153,5 @@
                         .HasColumnType("boolean");
 
-                    b.Property<int?>("MedicineId")
+                    b.Property<int>("MedicineId")
                         .HasColumnType("integer");
 
@@ -190,4 +194,5 @@
 
                     b.Property<string>("Name")
+                        .IsRequired()
                         .HasColumnType("text");
 
@@ -214,4 +219,5 @@
 
                     b.Property<string>("Address")
+                        .IsRequired()
                         .HasColumnType("text");
 
@@ -223,7 +229,9 @@
 
                     b.Property<string>("Location")
-                        .HasColumnType("text");
-
-                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
                         .HasColumnType("text");
 
@@ -255,30 +263,81 @@
 
                     b.Property<string>("Email")
-                        .HasColumnType("text");
-
-                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
                         .HasColumnType("text");
 
                     b.Property<string>("Password")
-                        .HasColumnType("text");
-
-                    b.Property<int?>("PharmacyId")
-                        .HasColumnType("integer");
-
-                    b.Property<int?>("PharmacyMedicinesId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("PharmacyHeads");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.RequestPharmacyHead", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<int>("HeadId")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("PharmacyId")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("HeadId");
 
                     b.HasIndex("PharmacyId");
 
-                    b.HasIndex("PharmacyMedicinesId");
-
-                    b.ToTable("PharmacyHeads");
-                });
-
-            modelBuilder.Entity("FarmatikoData.Models.HealthcareWorkers", b =>
-                {
-                    b.HasOne("FarmatikoData.Models.HealthFacilities", "Facility")
+                    b.ToTable("PHRequests");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.User", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime?>("DeletedOn")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<string>("Email")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Password")
+                        .HasColumnType("text");
+
+                    b.Property<int>("UserRole")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Users");
+                });
+
+            modelBuilder.Entity("FarmatikoData.Models.HealthcareWorker", b =>
+                {
+                    b.HasOne("FarmatikoData.Models.HealthFacility", "Facility")
                         .WithMany()
                         .HasForeignKey("FacilityId")
@@ -291,5 +350,7 @@
                     b.HasOne("FarmatikoData.Models.Medicine", "Medicine")
                         .WithMany()
-                        .HasForeignKey("MedicineId");
+                        .HasForeignKey("MedicineId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
 
                     b.HasOne("FarmatikoData.Models.PharmacyHead", null)
@@ -305,13 +366,17 @@
                 });
 
-            modelBuilder.Entity("FarmatikoData.Models.PharmacyHead", b =>
-                {
+            modelBuilder.Entity("FarmatikoData.Models.RequestPharmacyHead", b =>
+                {
+                    b.HasOne("FarmatikoData.Models.PharmacyHead", "Head")
+                        .WithMany()
+                        .HasForeignKey("HeadId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
                     b.HasOne("FarmatikoData.Models.Pharmacy", "Pharmacy")
                         .WithMany()
-                        .HasForeignKey("PharmacyId");
-
-                    b.HasOne("FarmatikoData.Models.MedicineList", "PharmacyMedicines")
-                        .WithMany()
-                        .HasForeignKey("PharmacyMedicinesId");
+                        .HasForeignKey("PharmacyId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
                 });
 #pragma warning restore 612, 618
Index: FarmatikoData/Models/PharmacyHead.cs
===================================================================
--- FarmatikoData/Models/PharmacyHead.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoData/Models/PharmacyHead.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -16,6 +16,6 @@
         [Required]
         public string Password { get; set; }
-        public ICollection<MedicineList> MedicineLists { get; set; }
-        public ICollection<Pharmacy> PharmaciesList { get; set; }
+        public List<MedicineList> MedicineLists { get; set; }
+        public List<Pharmacy> PharmaciesList { get; set; }
 
     }
Index: FarmatikoData/Models/User.cs
===================================================================
--- FarmatikoData/Models/User.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoData/Models/User.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,20 @@
+﻿using FarmatikoData.Base;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FarmatikoData.Models
+{
+    public class User : BaseEntity
+    {
+        public enum Role
+        {
+            Admin,
+            PharmacyHead
+        }
+        public string Name { get; set; }
+        public string Email { get; set; }
+        public string Password { get; set; }
+        public Role UserRole { get; set; }
+    }
+}
Index: FarmatikoServices/Auth/AuthService.cs
===================================================================
--- FarmatikoServices/Auth/AuthService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoServices/Auth/AuthService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,69 @@
+﻿using FarmatikoData.FarmatikoRepoInterfaces;
+using FarmatikoData.Models;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace FarmatikoServices.Auth
+{
+    public class AuthService : IAuthService
+    {
+        private readonly ILogger<AuthService> _logger;
+        private readonly IRepository _repository;
+
+        private readonly IDictionary<string, string> _users = new Dictionary<string, string>();
+        
+        // inject your database here for user validation
+        public AuthService(ILogger<AuthService> logger, IRepository repository)
+        {
+            _logger = logger;
+            _repository = repository;
+        }
+
+        public bool IsValidUserCredentials(string userName, string password)
+        {
+            _logger.LogInformation($"Validating user [{userName}]");
+            if (string.IsNullOrWhiteSpace(userName))
+            {
+                return false;
+            }
+
+            if (string.IsNullOrWhiteSpace(password))
+            {
+                return false;
+            }
+
+            return _repository.GetUsers().TryGetValue(userName, out var p) && p.Password == password;
+        }
+
+        public bool IsAnExistingUser(string userName)
+        {
+            return _repository.GetUsers().ContainsKey(userName);
+        }
+
+        public string GetUserRole(string userName)
+        {
+            if (!IsAnExistingUser(userName))
+            {
+                return string.Empty;
+            }
+
+            var user = _repository.GetUsers().Where(x => x.Value.Email == userName).FirstOrDefault().Value.UserRole;
+
+            /*if (userName == "admin@farmatiko.mk")
+            {
+                return nameof(user);
+            }*/
+            return user.ToString();
+        }
+    }
+
+    public static class UserRoles
+    {
+        public const string Admin = nameof(User.Role.Admin);
+        public const string PharmacyHead = nameof(User.Role.PharmacyHead);
+    }
+}
+
Index: FarmatikoServices/Auth/IAuthService.cs
===================================================================
--- FarmatikoServices/Auth/IAuthService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoServices/Auth/IAuthService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FarmatikoServices.Auth
+{
+    public interface IAuthService
+    {
+        bool IsAnExistingUser(string userName);
+        bool IsValidUserCredentials(string userName, string password);
+        string GetUserRole(string userName);
+    }
+}
Index: FarmatikoServices/FarmatikoServiceInterfaces/IAdminService.cs
===================================================================
--- FarmatikoServices/FarmatikoServiceInterfaces/IAdminService.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoServices/FarmatikoServiceInterfaces/IAdminService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -12,5 +12,5 @@
         Task<IEnumerable<PharmacyHead>> GetPharmacyHeads();
         Task<IEnumerable<RequestPharmacyHead>> GetClaimingRequests();
-        bool RejectRequest(RequestPharmacyHead req);
+        bool RejectRequest(int Id);
     }
 }
Index: FarmatikoServices/FarmatikoServiceInterfaces/IPHService.cs
===================================================================
--- FarmatikoServices/FarmatikoServiceInterfaces/IPHService.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoServices/FarmatikoServiceInterfaces/IPHService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -10,5 +10,5 @@
     public interface IPHService
     {
-        Task<IEnumerable<PharmacyHead>> GetPharmacyHeadInfo(string Token);
+        Task<IEnumerable<PharmacyHead>> GetPharmacyHeadInfo();
         Task UpdatePharmacyHead(PharmacyHead pharmacyHead);
         Task<int> Login(PharmacyHead pharmacyHead);
@@ -18,4 +18,5 @@
         Task<bool> Remove(int id);
         Task<bool> RemoveClaimingRequest(int id);
+        PharmacyHead GetPharmacyHead(string userName);
     }
 }
Index: FarmatikoServices/FarmatikoServiceInterfaces/IProcessJSONService.cs
===================================================================
--- FarmatikoServices/FarmatikoServiceInterfaces/IProcessJSONService.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoServices/FarmatikoServiceInterfaces/IProcessJSONService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -9,9 +9,9 @@
     public interface IProcessJSONService
     {
-        Task<HealthFacility> GetProcessedHealthFacilitiesFromJSON();
-        Task<Pandemic> GetProcessedPandemicsFromJSONApi();
-        Task<HealthcareWorker> GetProcessedHealthcareWorkersFromJSON();
-        Task<Medicine> GetProcessedMedicinesFromJSON();
-        Task<Medicine> ReadPharmaciesFromExcel();
+        void GetProcessedHealthFacilitiesFromJSON();
+        void GetProcessedPandemicsFromJSONApi();
+        void GetProcessedHealthcareWorkersFromJSON();
+        void GetProcessedMedicinesFromJSON();
+        void DownloadPharmaciesExcel();
     }
 }
Index: FarmatikoServices/FarmatikoServiceInterfaces/IService.cs
===================================================================
--- FarmatikoServices/FarmatikoServiceInterfaces/IService.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoServices/FarmatikoServiceInterfaces/IService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -15,5 +15,5 @@
         Task<IEnumerable<HealthFacility>> SearchFacilities(string query);
         Task<HealthFacility> GetFacility(int id);
-        Task<HealthFacility> GetFacilityJSON(string healthFacility);
+        HealthFacility GetFacilityJSON(string healthFacility);
         Task<Medicine> GetMedicine(int id);
         Task<IEnumerable<Medicine>> SearchMedicines(string query);
Index: FarmatikoServices/FarmatikoServices.csproj
===================================================================
--- FarmatikoServices/FarmatikoServices.csproj	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoServices/FarmatikoServices.csproj	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -6,7 +6,10 @@
 
   <ItemGroup>
+    <PackageReference Include="AngleSharp" Version="0.14.0" />
     <PackageReference Include="EPPlus" Version="5.4.0" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
     <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
-    <PackageReference Include="RestSharp" Version="106.11.4" />
+    <PackageReference Include="RestSharp" Version="106.11.7" />
+    <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.8.0" />
   </ItemGroup>
 
@@ -15,3 +18,7 @@
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="Services\ExcellDocs\" />
+  </ItemGroup>
+
 </Project>
Index: FarmatikoServices/Infrastructure/IJwtAuthManager.cs
===================================================================
--- FarmatikoServices/Infrastructure/IJwtAuthManager.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoServices/Infrastructure/IJwtAuthManager.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Immutable;
+using System.IdentityModel.Tokens.Jwt;
+using System.Security.Claims;
+
+namespace FarmatikoServices.Infrastructure
+{
+    public interface IJwtAuthManager
+    {
+        IImmutableDictionary<string, RefreshToken> UsersRefreshTokensReadOnlyDictionary { get; }
+        JwtAuthResult GenerateTokens(string username, Claim[] claims, DateTime now);
+        JwtAuthResult Refresh(string refreshToken, string accessToken, DateTime now);
+        void RemoveExpiredRefreshTokens(DateTime now);
+        void RemoveRefreshTokenByUserName(string userName);
+        (ClaimsPrincipal, JwtSecurityToken) DecodeJwtToken(string token);
+    }
+}
Index: FarmatikoServices/Infrastructure/JwtAuthManager.cs
===================================================================
--- FarmatikoServices/Infrastructure/JwtAuthManager.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoServices/Infrastructure/JwtAuthManager.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,151 @@
+﻿using System;
+using System.Collections.Concurrent;
+using System.Collections.Immutable;
+using System.IdentityModel.Tokens.Jwt;
+using System.Linq;
+using System.Security.Claims;
+using System.Security.Cryptography;
+using System.Text;
+using System.Text.Json.Serialization;
+using FarmatikoServices.Infrastructure;
+using Microsoft.IdentityModel.Tokens;
+
+namespace FarmatikoServices.Infrastructure
+{
+    
+
+    public class JwtAuthManager : IJwtAuthManager
+    {
+        public IImmutableDictionary<string, RefreshToken> UsersRefreshTokensReadOnlyDictionary => _usersRefreshTokens.ToImmutableDictionary();
+        private readonly ConcurrentDictionary<string, RefreshToken> _usersRefreshTokens;  // can store in a database or a distributed cache
+        private readonly JwtTokenConfig _jwtTokenConfig;
+        private readonly byte[] _secret;
+
+        public JwtAuthManager(JwtTokenConfig jwtTokenConfig)
+        {
+            _jwtTokenConfig = jwtTokenConfig;
+            _usersRefreshTokens = new ConcurrentDictionary<string, RefreshToken>();
+            _secret = Encoding.ASCII.GetBytes(jwtTokenConfig.Secret);
+        }
+
+        // optional: clean up expired refresh tokens
+        public void RemoveExpiredRefreshTokens(DateTime now)
+        {
+            var expiredTokens = _usersRefreshTokens.Where(x => x.Value.ExpireAt < now).ToList();
+            foreach (var expiredToken in expiredTokens)
+            {
+                _usersRefreshTokens.TryRemove(expiredToken.Key, out _);
+            }
+        }
+
+        // can be more specific to ip, user agent, device name, etc.
+        public void RemoveRefreshTokenByUserName(string userName)
+        {
+            var refreshTokens = _usersRefreshTokens.Where(x => x.Value.UserName == userName).ToList();
+            foreach (var refreshToken in refreshTokens)
+            {
+                _usersRefreshTokens.TryRemove(refreshToken.Key, out _);
+            }
+        }
+
+        public JwtAuthResult GenerateTokens(string username, Claim[] claims, DateTime now)
+        {
+            var shouldAddAudienceClaim = string.IsNullOrWhiteSpace(claims?.FirstOrDefault(x => x.Type == JwtRegisteredClaimNames.Aud)?.Value);
+            var jwtToken = new JwtSecurityToken(
+                _jwtTokenConfig.Issuer,
+                shouldAddAudienceClaim ? _jwtTokenConfig.Audience : string.Empty,
+                claims,
+                expires: now.AddMinutes(_jwtTokenConfig.AccessTokenExpiration),
+                signingCredentials: new SigningCredentials(new SymmetricSecurityKey(_secret), SecurityAlgorithms.HmacSha256Signature));
+            var accessToken = new JwtSecurityTokenHandler().WriteToken(jwtToken);
+
+            var refreshToken = new RefreshToken
+            {
+                UserName = username,
+                TokenString = GenerateRefreshTokenString(),
+                ExpireAt = now.AddMinutes(_jwtTokenConfig.RefreshTokenExpiration)
+            };
+            _usersRefreshTokens.AddOrUpdate(refreshToken.TokenString, refreshToken, (s, t) => refreshToken);
+
+            return new JwtAuthResult
+            {
+                AccessToken = accessToken,
+                RefreshToken = refreshToken
+            };
+        }
+
+        public JwtAuthResult Refresh(string refreshToken, string accessToken, DateTime now)
+        {
+            var (principal, jwtToken) = DecodeJwtToken(accessToken);
+            if (jwtToken == null || !jwtToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256Signature))
+            {
+                throw new SecurityTokenException("Invalid token");
+            }
+
+            var userName = principal.Identity.Name;
+            if (!_usersRefreshTokens.TryGetValue(refreshToken, out var existingRefreshToken))
+            {
+                throw new SecurityTokenException("Invalid token");
+            }
+            if (existingRefreshToken.UserName != userName || existingRefreshToken.ExpireAt < now)
+            {
+                throw new SecurityTokenException("Invalid token");
+            }
+
+            return GenerateTokens(userName, principal.Claims.ToArray(), now); // need to recover the original claims
+        }
+
+        public (ClaimsPrincipal, JwtSecurityToken) DecodeJwtToken(string token)
+        {
+            if (string.IsNullOrWhiteSpace(token))
+            {
+                throw new SecurityTokenException("Invalid token");
+            }
+            var principal = new JwtSecurityTokenHandler()
+                .ValidateToken(token,
+                    new TokenValidationParameters
+                    {
+                        ValidateIssuer = true,
+                        ValidIssuer = _jwtTokenConfig.Issuer,
+                        ValidateIssuerSigningKey = true,
+                        IssuerSigningKey = new SymmetricSecurityKey(_secret),
+                        ValidAudience = _jwtTokenConfig.Audience,
+                        ValidateAudience = true,
+                        ValidateLifetime = true,
+                        ClockSkew = TimeSpan.FromMinutes(1)
+                    },
+                    out var validatedToken);
+            return (principal, validatedToken as JwtSecurityToken);
+        }
+
+        private static string GenerateRefreshTokenString()
+        {
+            var randomNumber = new byte[32];
+            using var randomNumberGenerator = RandomNumberGenerator.Create();
+            randomNumberGenerator.GetBytes(randomNumber);
+            return Convert.ToBase64String(randomNumber);
+        }
+    }
+
+    public class JwtAuthResult
+    {
+        [JsonPropertyName("accessToken")]
+        public string AccessToken { get; set; }
+
+        [JsonPropertyName("refreshToken")]
+        public RefreshToken RefreshToken { get; set; }
+    }
+
+    public class RefreshToken
+    {
+        [JsonPropertyName("username")]
+        public string UserName { get; set; }    // can be used for usage tracking
+        // can optionally include other metadata, such as user agent, ip address, device name, and so on
+
+        [JsonPropertyName("tokenString")]
+        public string TokenString { get; set; }
+
+        [JsonPropertyName("expireAt")]
+        public DateTime ExpireAt { get; set; }
+    }
+}
Index: FarmatikoServices/Infrastructure/JwtRefreshTokenCache.cs
===================================================================
--- FarmatikoServices/Infrastructure/JwtRefreshTokenCache.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoServices/Infrastructure/JwtRefreshTokenCache.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,42 @@
+﻿using System;
+using System.Threading;
+using System.Threading.Tasks;
+using FarmatikoServices.Infrastructure;
+using Microsoft.Extensions.Hosting;
+
+namespace FarmatikoServices.Infrastructure
+{
+    public class JwtRefreshTokenCache : IHostedService, IDisposable
+    {
+        private Timer _timer;
+        private readonly IJwtAuthManager _jwtAuthManager;
+
+        public JwtRefreshTokenCache(IJwtAuthManager jwtAuthManager)
+        {
+            _jwtAuthManager = jwtAuthManager;
+        }
+
+        public Task StartAsync(CancellationToken stoppingToken)
+        {
+            // remove expired refresh tokens from cache every minute
+            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
+            return Task.CompletedTask;
+        }
+
+        private void DoWork(object state)
+        {
+            _jwtAuthManager.RemoveExpiredRefreshTokens(DateTime.Now);
+        }
+
+        public Task StopAsync(CancellationToken stoppingToken)
+        {
+            _timer?.Change(Timeout.Infinite, 0);
+            return Task.CompletedTask;
+        }
+
+        public void Dispose()
+        {
+            _timer?.Dispose();
+        }
+    }
+}
Index: FarmatikoServices/Infrastructure/JwtTokenConfig.cs
===================================================================
--- FarmatikoServices/Infrastructure/JwtTokenConfig.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoServices/Infrastructure/JwtTokenConfig.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,22 @@
+﻿using System.Text.Json.Serialization;
+
+namespace FarmatikoServices.Infrastructure
+{
+    public class JwtTokenConfig
+    {
+        [JsonPropertyName("secret")]
+        public string Secret { get; set; }
+
+        [JsonPropertyName("issuer")]
+        public string Issuer { get; set; }
+
+        [JsonPropertyName("audience")]
+        public string Audience { get; set; }
+
+        [JsonPropertyName("accessTokenExpiration")]
+        public int AccessTokenExpiration { get; set; }
+
+        [JsonPropertyName("refreshTokenExpiration")]
+        public int RefreshTokenExpiration { get; set; }
+    }
+}
Index: FarmatikoServices/Services/AdminService.cs
===================================================================
--- FarmatikoServices/Services/AdminService.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoServices/Services/AdminService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -36,9 +36,9 @@
         }
 
-        public bool RejectRequest(RequestPharmacyHead req)
+        public bool RejectRequest(int Id)
         {
-            if (req != null)
+            if (Id >= 0)
             {
-                _adminRepo.RemoveClaimRequest(req);
+                _adminRepo.RemoveClaimRequest(Id);
                 return true;
             }
Index: FarmatikoServices/Services/PHService.cs
===================================================================
--- FarmatikoServices/Services/PHService.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoServices/Services/PHService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -38,5 +38,5 @@
         }
 
-        public async Task<IEnumerable<PharmacyHead>> GetPharmacyHeadInfo(string Token)
+        public async Task<IEnumerable<PharmacyHead>> GetPharmacyHeadInfo()
         {
             var PHeads = await _iPHRepo.GetPharmacyHeadInfo();
@@ -92,4 +92,13 @@
             return false;
         }
+
+        public PharmacyHead GetPharmacyHead(string userName)
+        {
+            if (userName != null)
+            {
+                return _iPHRepo.GetPharmacyHeadByUserName(userName);
+            }
+            return default;
+        }
     }
 }
Index: FarmatikoServices/Services/ProcessJSONService.cs
===================================================================
--- FarmatikoServices/Services/ProcessJSONService.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoServices/Services/ProcessJSONService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -13,4 +13,5 @@
 using OfficeOpenXml;
 using System.IO;
+using Microsoft.VisualBasic;
 
 namespace FarmatikoServices.Services
@@ -26,43 +27,61 @@
             _service = service;
         }
-
-        public async Task<Medicine> ReadPharmaciesFromExcel()
-        {
-            try
-            {
-                var client = new WebClient();
-                string Path = client.DownloadString(@"C:\Users\dslez\Desktop\apteki-fzo.xlsx");
-                using (var package = new ExcelPackage(new FileInfo(Path)))
-                {
-                    var Sheet = package.Workbook.Worksheets[1];
-                    for (int i = 2; i < Sheet.Dimension.End.Row; ++i)
+        //Excel reader
+        private async Task<bool> ReadPharmaciesFromExcel(string Path)
+        {
+            using (var package = new ExcelPackage(new FileInfo(Path)))
+            {
+                var Sheet = package.Workbook.Worksheets[1];
+                for (int i = 2; i < Sheet.Dimension.End.Row; ++i)
+                {
+                    Pharmacy pharmacy = new Pharmacy()
                     {
-                        Pharmacy pharmacy = new Pharmacy()
-                        {
-                            Name = Sheet.Cells[i, 2].Value.ToString(),
-                            Address = Sheet.Cells[i, 3].Value.ToString(),
-                            Location = Sheet.Cells[i, 4].Value.ToString(),
-                            WorkAllTime = false
-                        };
-                        await _service.AddPharmacy(pharmacy);
-                    }
-                }
-
-            }
-            catch(Exception e)
+                        Name = Sheet.Cells[i, 2].Value.ToString(),
+                        Address = Sheet.Cells[i, 3].Value.ToString(),
+                        Location = Sheet.Cells[i, 4].Value.ToString(),
+                        WorkAllTime = false
+                    };
+                    await _service.AddPharmacy(pharmacy);
+                    return true;
+                }
+            }
+            return false;
+        }
+        public async void DownloadPharmaciesExcel()
+        {
+            try
+            {
+                string pathToSave1 = Directory.GetCurrentDirectory() + @"\ExcellDocs\1.xlsx";
+
+                string pathToSave2 = Directory.GetCurrentDirectory() + @"\ExcellDocs\2.xlsx";
+                var client = new WebClient();
+                string url1 = "http://data.gov.mk/dataset/d84c31d9-e749-4b17-9faf-a5b4db3e7a70/resource/ce446f5c-e541-46f6-9e8c-67568059cbc6/download/registar-na-apteki-vnatre-vo-mreza-na-fzo-12.08.2020.xlsx";
+                string url2 = "http://data.gov.mk/dataset/d84c31d9-e749-4b17-9faf-a5b4db3e7a70/resource/a16379b4-ec81-4de7-994d-0ee503d71b55/download/registar-na-apteki-nadvor-od-mreza-na-fzo-12.08.2020.xlsx";
+                int count = 0;
+                Uri uri1 = new Uri(url1);
+                Uri uri2 = new Uri(url2);
+                client.DownloadFile(uri1, @pathToSave1);
+                client.DownloadFile(uri2, @pathToSave2);
+
+
+                bool Success = await ReadPharmaciesFromExcel(pathToSave1);
+                _logger.LogInformation(Success.ToString() + "1");
+                Success = await ReadPharmaciesFromExcel(pathToSave2);
+                _logger.LogInformation(Success.ToString() + "2");
+            }
+            catch (Exception e)
             {
                 _logger.LogInformation(e.Message);
                 throw new Exception("Cannot process Medicines from Excel.");
             }
-            return null;
-        }
-
-
-        public async Task<HealthFacility> GetProcessedHealthFacilitiesFromJSON()
-        {
-            try
-            {
-                var client = new WebClient();
-                var json = client.DownloadString(@"C:\Users\dslez\Desktop\ustanovi.json");
+        }
+
+        //Healthfacilities
+        public async void GetProcessedHealthFacilitiesFromJSON()
+        {
+            try
+            {
+                var client = new WebClient();
+                var json = client.DownloadString(@"http://www.otvorenipodatoci.gov.mk/datastore/dump/505db453-4de2-4761-8a81-2800f7820b06?format=json");
 
                 var jsonResponse = JObject.Parse(json);
@@ -78,37 +97,48 @@
                     var Phone = obj[11];
                     var Type = obj[5];
-                    HealthFacility healthFacility = new HealthFacility(Name, Municipality, Address, Type, Email, Phone);
-                    await Task.Run(() => _service.AddFacility(healthFacility));
-
-                }
-
-            }
-            catch (Exception e)
-            {
-                _logger.LogInformation(e.Message);
-                throw new Exception("Cannot process health facilities from JSON.");
-            }
-            return null;
-        }
-
-        public async Task<Pandemic> GetProcessedPandemicsFromJSONApi()
-        {
-            try
-            {
-                var client = new RestClient("https://api.covid19api.com/summary");
+                    HealthFacility healthFacility = new HealthFacility();
+                    //Name, Municipality, Address, Type, Email, Phone
+                    healthFacility.Name = Convert.ToString(Name);
+                    healthFacility.Municipality = Convert.ToString(Municipality);
+                    healthFacility.Address = Convert.ToString(Address);
+                    healthFacility.Type = Convert.ToString(Type);
+                    healthFacility.Email = Convert.ToString(Email);
+                    healthFacility.Phone = Convert.ToString(Phone);
+                    await _service.AddFacility(healthFacility);
+
+                }
+
+            }
+            catch (Exception e)
+            {
+                _logger.LogInformation(e.Message);
+                throw new Exception("Cannot process health facilities from JSON." + e.Message);
+            }
+        }
+        //Pandemics
+        public async void GetProcessedPandemicsFromJSONApi()
+        {
+            try
+            {
+                var Date = DateTime.UtcNow.ToString("yyyy-MM-dd");
+                var client = new RestClient($"https://api.covid19tracking.narrativa.com/api/{Date}/country/north_macedonia");
                 var response = client.Execute(new RestRequest());
                 string original = response.Content;
                 var jsonResponsePandemic = JObject.Parse(original);
-                var global = JObject.Parse(jsonResponsePandemic.GetValue("Global").ToString());
-                var TotalConfirmed = long.Parse(global.GetValue("TotalConfirmed").ToString());
-                var TotalDeaths = long.Parse(global.GetValue("TotalDeaths").ToString());
-                var TotalRecovered = long.Parse(global.GetValue("TotalRecovered").ToString());
-
-                var mk = JArray.Parse(jsonResponsePandemic.GetValue("Countries").ToString());
-                dynamic objP = mk[100];
-                var TotalMk = Int32.Parse(objP.GetValue("TotalConfirmed").ToString());
-                var TotalDeathsMK = Int32.Parse(objP.GetValue("TotalDeaths").ToString());
-                var TotalRecoveredMK = Int32.Parse(objP.GetValue("TotalRecovered").ToString());
-                var NewMK = Int32.Parse(objP.GetValue("NewConfirmed").ToString());
+                var global = JObject.Parse(jsonResponsePandemic.GetValue("total").ToString());
+                var TotalConfirmed = long.Parse(global.GetValue("today_confirmed").ToString());
+                var TotalDeaths = long.Parse(global.GetValue("today_deaths").ToString());
+                var TotalRecovered = long.Parse(global.GetValue("today_new_recovered").ToString());
+
+                var mk = JObject.Parse(jsonResponsePandemic.GetValue("dates").ToString());
+
+                var date = JObject.Parse(mk.GetValue(Date).ToString());
+                var country = JObject.Parse(date.GetValue("countries").ToString());
+                var mkd = JObject.Parse(country.GetValue("North Macedonia").ToString());
+                dynamic objP = mkd;
+                var TotalMk = Int32.Parse(objP.GetValue("today_confirmed").ToString());
+                var TotalDeathsMK = Int32.Parse(objP.GetValue("today_deaths").ToString());
+                var TotalRecoveredMK = Int32.Parse(objP.GetValue("today_recovered").ToString());
+                var NewMK = Int32.Parse(objP.GetValue("today_new_confirmed").ToString());
 
                 var Name = "Coronavirus";
@@ -117,19 +147,18 @@
 
                 Pandemic pandemic = new Pandemic(Name, TotalMk, ActiveMk, TotalDeathsMK, NewMK, TotalConfirmed, TotalDeaths, ActiveGlobal);
-                await Task.Run(() => _service.AddPandemic(pandemic));
-            }
-            catch (Exception e)
-            {
-                _logger.LogInformation(e.Message);
-            }
-            return null;
-        }
-
-        public async Task<HealthcareWorker> GetProcessedHealthcareWorkersFromJSON()
-        {
-            try
-            {
-                var client = new WebClient();
-                var jsonW = client.DownloadString(@"C:\Users\dslez\Desktop\rabotnici.json");
+                await _service.AddPandemic(pandemic);
+            }
+            catch (Exception e)
+            {
+                _logger.LogInformation(e.Message);
+            }
+        }
+        //Healthcare workers
+        public async void GetProcessedHealthcareWorkersFromJSON()
+        {
+            try
+            {
+                var client = new WebClient();
+                var jsonW = client.DownloadString(@"http://www.otvorenipodatoci.gov.mk/datastore/dump/5b661887-685b-4189-b6bb-9b52eb8ace16?format=json");
 
                 var jsonResponseW = JObject.Parse(jsonW);
@@ -139,35 +168,53 @@
                 {
                     dynamic obj = JsonConvert.DeserializeObject(rec.ToString());
-                    var Name = obj[4];
-                    var Branch = obj[2];
-                    var FacilityName = obj[1];
-                    var Title = obj[3];
-                    HealthFacility facility = await _service.GetFacilityJSON(FacilityName);
-                    HealthFacility Facility = new HealthFacility(facility.Name, facility.Municipality, facility.Address,
-                                                                        facility.Type, facility.Email, facility.Phone);
-                    HealthcareWorker healthcareWorker = new HealthcareWorker(Name, Branch, Facility, Title);
-                    /*Facility.Name = obj[1];
-                    Facility.Municipality = "WorkerFacilityMunicipality";
-                    Facility.Address = "WorkerFacilityAddress";*/
-                    /*healthcareWorker.Name = Name;
-                    healthcareWorker.Branch = Branch;
-                    healthcareWorker.Facility = Facility;
-                    healthcareWorker.Title = Title;*/
-                    await Task.Run(() => _service.AddWorker(healthcareWorker));
-                }
-            }
-            catch (Exception e)
-            {
-                _logger.LogInformation(e.Message);
-            }
-            return null;
-        }
-
-        public async Task<Medicine> GetProcessedMedicinesFromJSON()
-        {
-            try
-            {
-                var client = new WebClient();
-                var jsonM = client.DownloadString(@"C:\Users\dslez\Desktop\lekovi.json");
+                    var Name = Convert.ToString(obj[4]);
+                    var Branch = Convert.ToString(obj[2]);
+                    var FacilityName = Convert.ToString(obj[1]);
+                    var Title = Convert.ToString(obj[3]);
+
+                    HealthFacility facility = _service.GetFacilityJSON(Convert.ToString(FacilityName));
+
+                    if (facility != null)
+                    {
+                        HealthFacility Facility = new HealthFacility(
+                           facility.Name,
+                           facility.Municipality,
+                           facility.Address,
+                           facility.Type,
+                           facility.Email,
+                           facility.Phone
+                           );
+                        HealthcareWorker healthcareWorker = new HealthcareWorker(Name, Branch, Facility, Title);
+                        await _service.AddWorker(healthcareWorker);
+                    }
+                    else
+                    {
+                        HealthFacility Facility = new HealthFacility(
+                           Convert.ToString(FacilityName),
+                           "",
+                           "",
+                           Convert.ToString(Branch),
+                           "",
+                           ""
+                           );
+                        HealthcareWorker healthcareWorker = new HealthcareWorker(Name, Branch, Facility, Title);
+                        await _service.AddWorker(healthcareWorker);
+                    }
+                    
+
+                }
+            }
+            catch (Exception e)
+            {
+                _logger.LogInformation(e.Message);
+            }
+        }
+        //Medicines
+        public async void GetProcessedMedicinesFromJSON()
+        {
+            try
+            {
+                var client = new WebClient();
+                var jsonM = client.DownloadString(@"http://www.otvorenipodatoci.gov.mk/datastore/dump/ecff2aef-9c8e-4efd-a557-96df4fff9adb?format=json");
 
                 var jsonResponseM = JObject.Parse(jsonM);
@@ -182,22 +229,17 @@
                     var WayOfIssuing = obj[9];
                     var Manufacturer = obj[11];
-                    var Price = float.Parse(obj[17]);
+                    var Price = float.Parse(Convert.ToString(obj[17]));
                     var Packaging = obj[8];
-                    Medicine medicine = new Medicine(Name, Strength, Form, WayOfIssuing, Manufacturer, Price, Packaging);
-                    /*medicine.Name = Name;
-                    medicine.Strength = Strength;
-                    medicine.Form = Form;
-                    medicine.WayOfIssuing = WayOfIssuing;
-                    medicine.Manufacturer = Manufacturer;
-                    medicine.Price = Price;
-                    medicine.Packaging = Packaging;*/
-                    await Task.Run(() => _service.AddMedicines(medicine));
-                }
-            }
-            catch (Exception e)
-            {
-                _logger.LogInformation(e.Message);
-            }
-            return null;
+                    string price = Convert.ToString(Price);
+                    Medicine medicine = new Medicine(Convert.ToString(Name), Convert.ToString(Strength), Convert.ToString(Form), Convert.ToString(WayOfIssuing), Convert.ToString(Manufacturer), Price, Convert.ToString(Packaging));
+
+                    await _service.AddMedicines(medicine);
+                }
+            }
+            catch (Exception e)
+            {
+                _logger.LogInformation(e.Message);
+                throw new Exception("medicine");
+            }
         }
     }
Index: FarmatikoServices/Services/Service.cs
===================================================================
--- FarmatikoServices/Services/Service.cs	(revision 1f4846d43046b2d1c3d0e073a7646afd3ea15785)
+++ FarmatikoServices/Services/Service.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -103,5 +103,5 @@
             if (healthFacilities != null)
                 await _repository.AddFacility(healthFacilities);
-            throw new Exception("Facility is null");
+            else throw new Exception("Facility is null");
         }
         //za json(Sys updateer)
@@ -110,5 +110,5 @@
             if (medicine != null)
                 await _repository.AddMedicines(medicine);
-            throw new Exception("Medicine is null");
+            else throw new Exception("Medicine is null");
         }
         //za json(Sys updateer)
@@ -117,5 +117,5 @@
             if (pandemic != null)
                 await _repository.AddPandemic(pandemic);
-            throw new Exception("Pandemic is null");
+            else throw new Exception("Pandemic is null");
         }
         // Samo PharmacyHead i Admin imaat pristap
@@ -124,5 +124,5 @@
             if (pharmacy != null)
                 await _repository.AddPharmacy(pharmacy);
-            throw new Exception("Pharmacy is null");
+            else throw new Exception("Pharmacy is null");
         }
         // Ovaa kontrola ja ima samo admin
@@ -150,5 +150,5 @@
             if (worker != null)
                 await _repository.AddWorker(worker);
-            throw new Exception("Worker is null");
+            else throw new Exception("Worker is null");
         }
 
@@ -158,5 +158,5 @@
             if (healthFacilities != null)
                 await _repository.UpdateFacility(healthFacilities);
-            throw new Exception("Facility is null");
+            else throw new Exception("Facility is null");
         }
         //PharmacyHead
@@ -165,5 +165,5 @@
             if (medicine != null)
                 await _repository.RemoveMedicine(medicine);
-            throw new Exception("Medicine is null");
+            else throw new Exception("Medicine is null");
         }
         //PharmacyHead
@@ -172,5 +172,5 @@
             if (medicine != null)
                 await _repository.UpdateMedicine(medicine);
-            throw new Exception("Medicine is null");
+            else throw new Exception("Medicine is null");
         }
         //za json(Sys updateer)
@@ -179,5 +179,5 @@
             if (pandemic != null)
                 await _repository.UpdatePandemic(pandemic);
-            throw new Exception("Pandemic is null");
+            else throw new Exception("Pandemic is null");
         }
         //PharmacyHead
@@ -186,5 +186,5 @@
             if (pharmacy != null)
                 await _repository.RemovePharmacy(pharmacy);
-            throw new Exception("Pharmacy is null");
+            else throw new Exception("Pharmacy is null");
         }
         //PharamcyHead
@@ -193,5 +193,5 @@
             if (pharmacy != null)
                 await _repository.UpadatePharmacy(pharmacy);
-            throw new Exception("Pharmacy is null");
+            else throw new Exception("Pharmacy is null");
         }
         //za json(Sys updateer)
@@ -200,5 +200,5 @@
             if (worker != null)
                 await _repository.UpdateWorker(worker);
-            throw new Exception("Worker is null");
+            else throw new Exception("Worker is null");
         }
 
@@ -209,11 +209,11 @@
                 await _repository.RemovePharmacyHead(Id);
             }
-            throw new Exception("Index out of bounds.");
-        }
-
-        public async Task<HealthFacility> GetFacilityJSON(string healthFacility)
+            else throw new Exception("Index out of bounds.");
+        }
+
+        public HealthFacility GetFacilityJSON(string healthFacility)
         {
             if (healthFacility != null)
-                return await _repository.GetFacilityJSON(healthFacility);
+                return _repository.GetFacilityJSON(healthFacility);
             return null;
         }
Index: FarmatikoServices/Services/SystemService.cs
===================================================================
--- FarmatikoServices/Services/SystemService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
+++ FarmatikoServices/Services/SystemService.cs	(revision d23bf729827076ac66d32cd20b19204530df8103)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FarmatikoServices.Services
+{
+    public interface ISystemService
+    {
+
+    }
+    public class SystemService
+    {
+
+    }
+}
