Changeset f554983


Ignore:
Timestamp:
02/14/21 17:54:35 (17 months ago)
Author:
Dimitar Slezenkovski <dslezenkovski@…>
Branches:
master
Children:
472dd7e
Parents:
6e6f04b
Message:

Add cron job for updating data, with Quartz.NET

Files:
6 added
1 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • Farmatiko/Controllers/FarmatikoController.cs

    r6e6f04b rf554983  
    2626            //_JSONservice.DownloadPharmaciesExcel();
    2727            //_JSONservice.GetProcessedHealthcareWorkersFromJSON();
    28             //_JSONservice.GetProcessedHealthFacilitiesFromJSON();
    29             //_JSONservice.GetProcessedMedicinesFromJSON();
    30             //_JSONservice.GetProcessedPandemicsFromJSONApi();
     28            //await _JSONservice.GetProcessedHealthFacilitiesFromJSON();
     29            //await _JSONservice.GetProcessedMedicinesFromJSON();
    3130        }
    3231        [HttpGet]
  • Farmatiko/Program.cs

    r6e6f04b rf554983  
    33using System.Linq;
    44using System.Threading.Tasks;
     5using FarmatikoServices.Services;
    56using Microsoft.AspNetCore.Hosting;
    67using Microsoft.Extensions.Configuration;
     8using Microsoft.Extensions.DependencyInjection;
    79using Microsoft.Extensions.Hosting;
    810using Microsoft.Extensions.Logging;
     
    2224                {
    2325                    webBuilder.UseStartup<Startup>();
     26                   
    2427                });
    2528    }
  • Farmatiko/Startup.cs

    r6e6f04b rf554983  
    1818using FarmatikoServices.Infrastructure;
    1919using System;
     20using Quartz;
     21using Quartz.Impl;
     22using Quartz.Spi;
     23using FarmatikoServices.Services.JobDTO;
     24
    2025namespace Farmatiko
    2126{
     
    2328    {
    2429        readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
    25 
    2630        public Startup(IConfiguration configuration)
    2731        {
     
    5357            services.AddEntityFrameworkNpgsql().AddDbContext<FarmatikoDataContext>(opt => opt.UseNpgsql(connectionString));
    5458
     59
     60
    5561            services.AddScoped<IPHRepo, PHRepo>();
    5662            services.AddScoped<IRepository, Repository>();
    5763            services.AddScoped<IAdminRepo, AdminRepo>();
     64            services.AddTransient<IUpdateDataRepo, UpdateDataRepo>();
    5865
    59             services.AddScoped<IPHService, PHService>();
     66            services.AddTransient<IPHService, PHService>();
    6067            services.AddTransient<IAdminService, AdminService>();
    6168            services.AddTransient<IService, Service>();
     
    6471
    6572            services.AddTransient<ILogger, Logger<ProcessJSONService>>();
    66 
    67             // services.AddTransient<ISystemService, SystemService>();
    6873
    6974
     
    116121                o.MemoryBufferThreshold = int.MaxValue;
    117122            });*/
     123
     124            services.AddSingleton<IJobFactory, SingletonUpdateDataJobFactory>();
     125            services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
     126
     127            services.AddTransient<UpdateDataJob>();
     128            services.AddSingleton(new JobSchedule(
     129            jobType: typeof(UpdateDataJob),
     130            cronExpression: "0/30 * * * * ?"));
     131
     132
     133            // "0 0 12 */7 * ?"
     134
     135
     136            services.AddHostedService<UpdateDataHostedService>();
    118137
    119138        }
  • Farmatiko/appsettings.json

    r6e6f04b rf554983  
    2424  },
    2525  "SecretKey": "PEJcK2bD4E2BKdNmAlUl",
    26   "TokenIssuer": "FARMATIKOISSUER"
     26  "TokenIssuer": "FARMATIKOISSUER",
     27  "ifStartup": "true"
    2728}
  • FarmatikoData/FarmatikoRepo/Repository.cs

    r6e6f04b rf554983  
    274274            var PHreqs = await _context.PHRequests.Where(x => x.Head.Id.Equals(PHead.Id)).FirstOrDefaultAsync();
    275275            PHead.Pharmacies.Select(x => x.PheadId = null);
    276             //PHead.Pharmacies.Select(x => x.PharmacyHead = null);
     276            PHead.Pharmacies.Select(x => x.PharmacyHead = null);
    277277            _context.PHRequests.Remove(PHreqs);
    278278            _context.PharmacyHeads.Remove(PHead);
  • FarmatikoServices/FarmatikoServiceInterfaces/IProcessJSONService.cs

    r6e6f04b rf554983  
    1010    {
    1111        void GetProcessedHealthFacilitiesFromJSON();
    12         void GetProcessedPandemicsFromJSONApi();
    1312        void GetProcessedHealthcareWorkersFromJSON();
    1413        void GetProcessedMedicinesFromJSON();
  • FarmatikoServices/FarmatikoServiceInterfaces/IService.cs

    r6e6f04b rf554983  
    22using FarmatikoData.Models;
    33using System.Collections.Generic;
    4 using System.Linq;
    54using System.Threading.Tasks;
    65
     
    98    public interface IService
    109    {
    11         //GET
     10        Task AddFacility(HealthFacility healthFacility);
     11        Task AddMedicines(Medicine medicine);
     12        Task AddPandemic(Pandemic pandemic);
     13        void AddPharmacy(Pharmacy pharmacy);
     14        Task<bool> AddPharmacyHead(PharmacyHeadDto pharmacyHead);
     15        Task AddWorker(HealthcareWorker worker);
    1216        Task<IEnumerable<HealthcareWorker>> GetAllWorkers();
    13         Task<IEnumerable<HealthcareWorker>> SearchWorkers(string query);
    14         Task<HealthcareWorker> GetWorker(int id);
    1517        Task<IEnumerable<HealthFacility>> GetFacilities();
    16         Task<IEnumerable<HealthFacility>> SearchFacilities(string query);
    1718        Task<HealthFacility> GetFacility(int id);
    1819        HealthFacility GetFacilityJSON(string healthFacility);
    1920        Task<Medicine> GetMedicine(int id);
    20         Task<IEnumerable<MedicineDTO>> SearchMedicines(string query);
    2121        Task<List<MedicineDTO>> GetMedicines();
    2222        Pandemic GetPandemic();
    2323        Task<List<PharmacyDTO>> GetPharmacies();
     24        Task<Pharmacy> GetPharmacy(int id);
     25        Task<HealthcareWorker> GetWorker(int id);
     26        Task RemoveMedicine(Medicine medicine);
     27        Task RemovePharmacy(Pharmacy pharmacy);
     28        Task RemovePharmacyHead(int Id);
     29        Task<IEnumerable<HealthFacility>> SearchFacilities(string query);
     30        Task<IEnumerable<MedicineDTO>> SearchMedicines(string query);
    2431        Task<IEnumerable<PharmacyDTO>> SearchPharmacies(string query);
    25         Task<Pharmacy> GetPharmacy(int id);
    26         //POST
    27         Task AddWorker(HealthcareWorker worker);
    28         Task AddFacility(HealthFacility healthFacilities);
    29         void AddPharmacy(Pharmacy pharmacy);
    30         Task<bool> AddPharmacyHead(PharmacyHeadDto pharmacyHead);
    31         Task AddMedicines(Medicine medicine);
    32         Task AddPandemic(Pandemic pandemic);
     32        Task<IEnumerable<HealthcareWorker>> SearchWorkers(string query);
    3333        Task UpdateFacility(HealthFacility healthFacilities);
    34         Task RemoveMedicine(Medicine medicine);
    35         Task RemovePharmacyHead(int Id);
     34        Task UpdateMedicine(Medicine medicine);
    3635        Task UpdatePandemic(Pandemic pandemic);
    37         Task RemovePharmacy(Pharmacy pharmacy);
     36        Task UpdatePharmacy(Pharmacy pharmacy);
    3837        Task UpdateWorker(HealthcareWorker worker);
    39         Task UpdatePharmacy(Pharmacy pharmacy);
    4038    }
    4139}
  • FarmatikoServices/FarmatikoServices.csproj

    r6e6f04b rf554983  
    1111    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
    1212    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
     13    <PackageReference Include="Quartz.AspNetCore" Version="3.2.4" />
    1314    <PackageReference Include="RestSharp" Version="106.11.7" />
    1415    <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.8.0" />
  • FarmatikoServices/Services/PHService.cs

    r6e6f04b rf554983  
    8383                            PHMedicines.Add(medicine);
    8484                    }
    85 
    86                     if (!pharmacyHead.Medicines.Equals(PHMedicines))
    87                     {
    88                         /*
    89                          * USELESS
    90                          * if (pharmacyHead.Medicines.Count() == 0)
     85                    foreach(var phMed in PHMedicines)
     86                    {
     87                        if (!pharmacyHead.Medicines.Contains(phMed))
    9188                        {
    92                             phead.Medicines = null;
    93                             int PHMId = phead.Medicines.Select(x => x.Id).Single();
    94                             int phId = phead.Medicines.Select(x => x.PheadId).Single();
    95                             int medId = phead.Medicines.Select(x => x.MedicineId).Single();
    96                             _iPHRepo.DeletePHMedicine(PHMId, phId, medId);
    97                             return;
    98                         }*/
    99                         if (phead.Medicines != null && phead.Medicines.Count() > 0)
    100                         {
    101                             foreach (var med in pharmacyHead.Medicines)
    102                             {
    103                                 Medicine medicine = new Medicine()
     89                            /*
     90                             * USELESS
     91                             * if (pharmacyHead.Medicines.Count() == 0)
     92                            {
     93                                phead.Medicines = null;
     94                                int PHMId = phead.Medicines.Select(x => x.Id).Single();
     95                                int phId = phead.Medicines.Select(x => x.PheadId).Single();
     96                                int medId = phead.Medicines.Select(x => x.MedicineId).Single();
     97                                _iPHRepo.DeletePHMedicine(PHMId, phId, medId);
     98                                return;
     99                            }*/
     100                            if (phead.Medicines != null && phead.Medicines.Count() > 0)
     101                            {
     102                                foreach (var med in pharmacyHead.Medicines)
    104103                                {
    105                                     Name = med.Name,
    106                                     Form = med.Form,
    107                                     Manufacturer = med.Manufacturer,
    108                                     Medicines = med.Medicines,
    109                                     Packaging = med.Packaging,
    110                                     Price = med.Price,
    111                                     Strength = med.Strength,
    112                                     WayOfIssuing = med.WayOfIssuing
    113                                 };
    114 
    115                                 PharmacyHeadMedicine phm = new PharmacyHeadMedicine()
     104                                    Medicine medicine = new Medicine()
     105                                    {
     106                                        Name = med.Name,
     107                                        Form = med.Form,
     108                                        Manufacturer = med.Manufacturer,
     109                                        Medicines = med.Medicines,
     110                                        Packaging = med.Packaging,
     111                                        Price = med.Price,
     112                                        Strength = med.Strength,
     113                                        WayOfIssuing = med.WayOfIssuing
     114                                    };
     115
     116                                    PharmacyHeadMedicine phm = new PharmacyHeadMedicine()
     117                                    {
     118                                        PheadId = phead.Id,
     119                                        Head = phead,
     120                                        MedicineId = med.Id,
     121                                        Medicine = medicine
     122                                    };
     123
     124                                    bool ifExists = phead.Medicines.Contains(phm);
     125                                    if (!ifExists)
     126                                        list.Add(phm);
     127
     128                                }
     129                            }
     130                            else
     131                            {
     132                                foreach (var med in pharmacyHead.Medicines)
    116133                                {
    117                                     PheadId = phead.Id,
    118                                     Head = phead,
    119                                     MedicineId = med.Id,
    120                                     Medicine = medicine
    121                                 };
    122 
    123                                 bool ifExists = phead.Medicines.Contains(phm);
    124                                 if (!ifExists)
    125                                     list.Add(phm);
    126 
     134                                    PharmacyHead head1 = new PharmacyHead()
     135                                    {
     136                                        Id = pharmacyHead.Id,
     137                                        Name = pharmacyHead.Name,
     138                                        Email = pharmacyHead.Email,
     139                                        Password = pharmacyHead.Password
     140                                    };
     141                                    PharmacyHeadMedicine phmed = new PharmacyHeadMedicine()
     142                                    {
     143                                        Head = head1,
     144                                        Medicine = med
     145                                    };
     146                                    list.Add(phmed);
     147                                }
    127148                            }
     149
     150
     151                            phead.Medicines = list;
     152
     153                            await _iPHRepo.UpdatePharmacyHead(phead);
     154
    128155                        }
    129                         else
    130                         {
    131                             foreach (var med in pharmacyHead.Medicines)
    132                             {
    133                                 PharmacyHead head1 = new PharmacyHead()
    134                                 {
    135                                     Id = pharmacyHead.Id,
    136                                     Name = pharmacyHead.Name,
    137                                     Email = pharmacyHead.Email,
    138                                     Password = pharmacyHead.Password
    139                                 };
    140                                 PharmacyHeadMedicine phMed = new PharmacyHeadMedicine()
    141                                 {
    142                                     Head = head1,
    143                                     Medicine = med
    144                                 };
    145                                 list.Add(phMed);
    146                             }
    147                         }
    148 
    149 
    150                         phead.Medicines = list;
    151 
    152                         await _iPHRepo.UpdatePharmacyHead(phead);
    153 
    154156                    }
     157                   
    155158                }
    156159                PharmacyHead head = new PharmacyHead()
  • FarmatikoServices/Services/ProcessJSONService.cs

    r6e6f04b rf554983  
    1313using GemBox.Spreadsheet;
    1414using System.Text;
     15using FarmatikoData.FarmatikoRepoInterfaces;
    1516
    1617namespace FarmatikoServices.Services
     
    2021
    2122        private readonly ILogger _logger;
     23        private readonly IUpdateDataRepo _repo;
    2224        private readonly IService _service;
    23         public ProcessJSONService(ILogger logger, IService service)
     25        public ProcessJSONService(ILogger logger, IUpdateDataRepo repo, IService service)
    2426        {
    2527            _logger = logger;
     28            _repo = repo;
    2629            _service = service;
    2730        }
     
    7780                bool Success = ReadPharmaciesFromExcel(pathToSave1);
    7881                _logger.LogInformation(Success.ToString() + "1");
    79                /* Success = await ReadPharmaciesFromExcel(pathToSave2);
    80                 _logger.LogInformation(Success.ToString() + "2");*/
     82
     83               
    8184            }
    8285            catch (Exception e)
     
    8891
    8992        //Healthfacilities
    90         public async void GetProcessedHealthFacilitiesFromJSON()
     93        public void GetProcessedHealthFacilitiesFromJSON()
    9194        {
    9295            try
     
    115118                    healthFacility.Email = Convert.ToString(Email);
    116119                    healthFacility.Phone = Convert.ToString(Phone);
    117                     await _service.AddFacility(healthFacility);
    118 
    119                 }
    120 
     120                    _service.AddFacility(healthFacility);
     121
     122                }
     123               
    121124            }
    122125            catch (Exception e)
     
    126129            }
    127130        }
    128         //Pandemics
    129         public async void GetProcessedPandemicsFromJSONApi()
    130         {
    131             try
    132             {
    133                 var Date = DateTime.UtcNow.ToString("yyyy-MM-dd");
    134                 var client = new RestClient($"https://api.covid19tracking.narrativa.com/api/{Date}/country/north_macedonia");
    135                 var response = client.Execute(new RestRequest());
    136                 string original = response.Content;
    137                 var jsonResponsePandemic = JObject.Parse(original);
    138                 var global = JObject.Parse(jsonResponsePandemic.GetValue("total").ToString());
    139                 var TotalConfirmed = long.Parse(global.GetValue("today_confirmed").ToString());
    140                 var TotalDeaths = long.Parse(global.GetValue("today_deaths").ToString());
    141                 var TotalRecovered = long.Parse(global.GetValue("today_new_recovered").ToString());
    142 
    143                 var mk = JObject.Parse(jsonResponsePandemic.GetValue("dates").ToString());
    144 
    145                 var date = JObject.Parse(mk.GetValue(Date).ToString());
    146                 var country = JObject.Parse(date.GetValue("countries").ToString());
    147                 var mkd = JObject.Parse(country.GetValue("North Macedonia").ToString());
    148                 dynamic objP = mkd;
    149                 var TotalMk = Int32.Parse(objP.GetValue("today_confirmed").ToString());
    150                 var TotalDeathsMK = Int32.Parse(objP.GetValue("today_deaths").ToString());
    151                 var TotalRecoveredMK = Int32.Parse(objP.GetValue("today_recovered").ToString());
    152                 var NewMK = Int32.Parse(objP.GetValue("today_new_confirmed").ToString());
    153 
    154                 var Name = "Coronavirus";
    155                 var ActiveMk = TotalMk - (TotalRecoveredMK + TotalDeathsMK);
    156                 var ActiveGlobal = TotalConfirmed - (TotalRecovered + TotalDeaths);
    157 
    158                 Pandemic pandemic = new Pandemic(Name, TotalMk, ActiveMk, TotalDeathsMK, NewMK, TotalConfirmed, TotalDeaths, ActiveGlobal);
    159                 await _service.AddPandemic(pandemic);
    160             }
    161             catch (Exception e)
    162             {
    163                 _logger.LogInformation(e.Message);
    164             }
    165         }
     131             
    166132        //Healthcare workers
    167         public async void GetProcessedHealthcareWorkersFromJSON()
     133        public void GetProcessedHealthcareWorkersFromJSON()
    168134        {
    169135            try
     
    183149                    var Title = Convert.ToString(obj[3]);
    184150
    185                     HealthFacility facility = _service.GetFacilityJSON(Convert.ToString(FacilityName));
     151                    HealthFacility facility = _repo.GetFacilityJSON(Convert.ToString(FacilityName));
    186152
    187153                    if (facility != null && facility != default)
     
    196162                           );
    197163                        HealthcareWorker healthcareWorker = new HealthcareWorker(Name, Branch, Facility, Title);
    198                         await _service.AddWorker(healthcareWorker);
     164                        _service.AddWorker(healthcareWorker);
    199165                    }
    200166                    else
     
    209175                           );
    210176                        HealthcareWorker healthcareWorker = new HealthcareWorker(Name, Branch, Facility, Title);
    211                         await _service.AddWorker(healthcareWorker);
     177                        _service.AddWorker(healthcareWorker);
    212178                    }
    213179                   
    214180
    215181                }
     182               
    216183            }
    217184            catch (Exception e)
     
    221188        }
    222189        //Medicines
    223         public async void GetProcessedMedicinesFromJSON()
     190        public void GetProcessedMedicinesFromJSON()
    224191        {
    225192            try
     
    244211                    Medicine medicine = new Medicine(Convert.ToString(Name), Convert.ToString(Strength), Convert.ToString(Form), Convert.ToString(WayOfIssuing), Convert.ToString(Manufacturer), Price, Convert.ToString(Packaging));
    245212
    246                     await _service.AddMedicines(medicine);
     213                    _service.AddMedicines(medicine);
    247214                }
    248215            }
  • FarmatikoServices/Services/Service.cs

    r6e6f04b rf554983  
    144144            var Pharmacies = await _repository.GetPharmacies();
    145145            List<PharmacyDTO> pharmacies = new List<PharmacyDTO>();
    146            
    147             foreach(var pharm in Pharmacies)
     146
     147            foreach (var pharm in Pharmacies)
    148148            {
    149149                PharmacyDTO pharmacyDTO = new PharmacyDTO()
     
    222222            List<PharmacyDTO> pharmacies = new List<PharmacyDTO>();
    223223            var heads = await _phrepo.GetPharmacyHeadInfo();
    224            
     224
    225225            foreach (var pharm in SearchQuery)
    226226            {
     
    232232                    WorkAllTime = pharm.WorkAllTime
    233233                };
    234                
    235                 foreach(var head in heads.ToList())
     234
     235                foreach (var head in heads.ToList())
    236236                {
    237237                    if (head.Pharmacies.Contains(pharm))
     
    241241                    }
    242242                }
    243                
     243
    244244                pharmacies.Add(pharmacyDTO);
    245245            }
     
    256256        //POST (ADD NEW OBJECTS)
    257257        //za json(Sys updateer)
    258         public async Task AddFacility(HealthFacility healthFacilities)
    259         {
    260             if (healthFacilities != null)
    261                 await _repository.AddFacility(healthFacilities);
     258        public async Task AddFacility(HealthFacility healthFacility)
     259        {
     260            if (healthFacility != null)
     261            {
     262                var facilities = await _repository.GetFacilities();
     263                if (!facilities.Contains(healthFacility))
     264                {
     265                    await _repository.AddFacility(healthFacility);
     266                }
     267                else throw new Exception("The facility already exists.");
     268            }
    262269            else throw new Exception("Facility is null");
    263270        }
     
    266273        {
    267274            if (medicine != null)
    268                 await _repository.AddMedicines(medicine);
     275            {
     276                var medicines = await _repository.GetMedicinesAsync();
     277                if (!medicines.Contains(medicine))
     278                    await _repository.AddMedicines(medicine);
     279                else throw new Exception("Medicine already exists.");
     280            }
    269281            else throw new Exception("Medicine is null");
    270282        }
     
    277289        }
    278290        // Samo PharmacyHead i Admin imaat pristap
    279         public void AddPharmacy(Pharmacy pharmacy)
     291        public async void AddPharmacy(Pharmacy pharmacy)
    280292        {
    281293            if (pharmacy != null)
    282                 _repository.AddPharmacy(pharmacy);
     294            {
     295                var pharmacies = await _repository.GetPharmacies();
     296                if (!pharmacies.Contains(pharmacy))
     297                    await _repository.AddPharmacy(pharmacy);
     298                else throw new Exception("Pharmacy already exists.");
     299            }
    283300            else throw new Exception("Pharmacy is null");
    284301        }
    285302
    286303        // Ovaa kontrola ja ima samo admin
    287        
     304
    288305        public async Task<bool> AddPharmacyHead(PharmacyHeadDto pharmacyHead)
    289306        {
     
    324341        {
    325342            if (worker != null)
    326                 await _repository.AddWorker(worker);
     343            {
     344                var workers = await _repository.GetAllWorkers();
     345                if (!workers.Contains(worker))
     346                    await _repository.AddWorker(worker);
     347                else throw new Exception("Worker already exists.");
     348            }
    327349            else throw new Exception("Worker is null");
    328350        }
Note: See TracChangeset for help on using the changeset viewer.