Skip to content

Getting the available pharmacies on duty in Attica, Greece.

License

Notifications You must be signed in to change notification settings

DsTyM/PharmaciesOnDutyAttica

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pharmacies on Duty Attica

Pharmacies on duty attica is a Java / Spring Boot web application where it gets the pharmacies on duty from the official Pharmacists Association of Attica Website: https://fsa-efimeries.gr and provide them as a REST API in JSON format. You can get the pharmacies on duty for any number of days you want, e.g. for the whole next week, as long as Pharmacists Association of Attica provides them.

It uses HtmlUnit to interact and crawl the "fsa.gr" website and jsoup to scrape the data (the available pharmacies per day, pharmacies' information and the different working hours available). It also uses MySQL to save the data on the server and Spring Boot to provide the Rest API.

The application has been tested using JUnit and Mockito.

Here is an example of how it returns the pharmacies on duty:

{
  "content": [
    {
      "id": 251,
      "pharmacy": {
        "id": 564,
        "name": "ΓΙΩΡΓΟΣ ΠΑΠΑΔΟΠΟΥΛΟΣ",
        "address": "ΠΛΑΤ.ΑΕΡΟΠΟΡΙΑΣ 153",
        "region": "ΗΛΙΟΥΠΟΛΗ",
        "phoneNumber": "210-1234567"
      },
      "workingHour": {
        "id": 1,
        "workingHourText": "ΑΝΟΙΧΤΑ 8 ΠΡΩΙ ΕΩΣ 8 ΒΡΑΔΥ"
      },
      "date": "2021-01-06T00:00:00Z",
      "pulledVersion": 2
    }
  ],
  "pageable": {
    "sort": {
      "sorted": false,
      "unsorted": true,
      "empty": true
    },
    "offset": 0,
    "pageSize": 30,
    "pageNumber": 0,
    "unpaged": false,
    "paged": true
  },
  "totalPages": 4,
  "totalElements": 106,
  "last": false,
  "size": 30,
  "number": 0,
  "sort": {
    "sorted": false,
    "unsorted": true,
    "empty": true
  },
  "numberOfElements": 30,
  "first": true,
  "empty": false
}

It also contains a scheduler where it refreshes the available pharmacies for the given day when the application is started, and it also uses cron expressions to refresh the available pharmacies list many times per day. This can also be customised. The application also uses Ehcache for In-Memory Caching.

To clone the project, just run:

git clone https://github.com/DsTyM/PharmaciesOnDutyAttica.git
cd PharmaciesOnDutyAttica

To start the project using docker, just run:

docker-compose up --build

The application can be accessed on:

http://localhost:8080

This page will redirect you to the Documentation of the API of the application. It uses Swagger UI to generate the API Documentation.

Of course, when you finish, don't forget to run:

docker-compose down

The application uses Liquibase for Database Versioning. To generate a new Liquibase changelog from the entities, run:

mvnw clean package -U -DskipTests
mvnw liquibase:diff

If you try to generate a new Liquibase changelog there is a chance that some warning / errors to appear but the file to have been created successfully so try to check if the liquibase file is empty or populated. If it is populated with SQL queries / statements then it means that it was created successfully. The liquibase file is located at:

src/main/resources/liquibase/liquibase-changeLog.mysql.sql

If you are using Docker and Git on Windows, then the following error may occur:

/bin/sh not found

To fix this error, just run the following command on Git Bash:

git config --global core.autocrlf false

and clone the project again.

In case you mess with the Liquibase changelog, and the application won't start with Docker, you've most probably messed with the database volume. To remove it, run:

docker volume rm pharmaciesondutyattica_db-data