Giter Site home page Giter Site logo

productive-kalendar's Introduction

productive-kalendar

Build Status

Russian productive calendar with REST API. Kalendar, because it is written in Kotlin.

productive-kalendar [RU]

Приложение для получения данных из производственного календаря Российской Федерации по REST API.

Run

Docker

Всё становится лучше с Docker

docker build --no-cache -t productive-kalendar .
docker run -it --rm -p 8080:8080 productive-kalendar

После чего приложение доступно по адресу http://localhost:8080/

Локально

Тут всё типично для приложения spring-boot и gradle-wrapper.

Сборка проекта

./gradlew build

Сборка проекта без тестов

./gradlew build -x test

Запуск статического анализатора

В проекте используется статический анализ и линтинг средствами detekt.

./gradlew detektCheck

Запуск приложения

./gradlew bootRun

API

Обновить информацию в календаре

Информация о выходных днях извлекается из csv-файла, последняя версия которого скачивается с портала открытых данных РФ (https://data.gov.ru/opendata/7708660670-proizvcalendar). На 2018-08-29 портал предоставляет данные с 1999 г. по 2025 г., однако данные 2019-2025 г. ещё не утверждены правительством РФ и являются приблизительными.

POST http://localhost:8080/api/command/parse/gov

RESPONSE обновленный список дат выходных дней в формате json

Запросить информацию из календаря

Далее {date} - это дата в формате гггг-ММ-дд, например 2018-08-18.

В запросах, где предполагается интервал дат, последняя дата не включается. Если даты одинаковые, то в ответе будет 0. Если одна из дат интервала не указана, то вместо неё будет использоваться текущая дата. Если обе даты не указаны, то будет возбуждено исключение и получите ошибку 400 "Incorrect request. Start and end together must not be null".

Является ли данная дата выходным днём

GET http://localhost:8080/api/query/is/{date}/holiday

RESPONSE boolean, true - выходной, false - рабочий день

Является ли завтра выходным днём

GET http://localhost:8080/api/query/is/tomorrow/holiday

RESPONSE boolean, true - выходной, false - рабочий день

Получить список всех выходных, которые хранятся в системе

GET http://localhost:8080/api/query/all/holidays

RESPONSE отсортированный по возрастанию список дат

Получить список всех выходных за определенный год

{year} - Int, год в диапазоне [1999, 2100]

GET http://localhost:8080/api/query/{year}/holidays

RESPONSE отсортированный по возрастанию список дат. Если за указанный год в системе нет информации, то вернется пустой список

Получить количество рабочих дней между датами

Опциональный параметр inclusive типа Boolean определяет, включает ли подсчет дату end в интервал или нет. По умолчанию false

POST http://localhost:8080/api/query/workdays/between

Content-Type: application/json

{
  "start": "{date}",
  "end": "{date}",
  "inclusive": {true or false(default)}
}

RESPONSE Int - количество рабочих дней между датами

Получить количество выходных дней между датами

Опциональный параметр inclusive типа Boolean определяет, включает ли подсчет дату end в интервал или нет. По умолчанию false

POST http://localhost:8080/api/query/holidays/between

Content-Type: application/json

{
  "start": "{date}",
  "end": "{date}",
  "inclusive": {true or false(default)}
}

RESPONSE Int - количество выходных дней между датами

Получить весь производственный календарь

GET http://localhost:8080/api/query/productive-calendar

RESPONSE { "holidays": ['1999-01-01', ...], "preholidays": ['1999-03-07', ...] }

Получить производственный календарь за определенный год

{year} - Int, год в диапазоне [1999, 2100]

GET http://localhost:8080/api/query/{year}/productive-calendar

RESPONSE { "holidays": ['2018-01-01', ...], "preholidays": ['2018-03-07', ...] }

Получить тип дня

GET http://localhost:8080/api/query/day/{date}/type

RESPONSE одно из значений перечисления: WORKDAY, HOLIDAY, PREHOLIDAY

Получить тип завтрашнего дня

GET http://localhost:8080/api/query/day/tomorrow/type

RESPONSE одно из значений перечисления: WORKDAY, HOLIDAY, PREHOLIDAY

Telegram bot

Есть возможность поднять Telegram-бота, который будет стучаться в календарь.

productive-kalendar's People

Contributors

jmorozov avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

productive-kalendar's Issues

I could not build the project

Hello,
The gradle configuration does not recognize libraries versions. Could you help me please?

mini:productive-kalendar chep$ ./gradlew build
Build cache is an incubating feature.

FAILURE: Build failed with an exception.

  • What went wrong:
    A problem occurred configuring root project 'productive-kalendar'.

Could not resolve all files for configuration ':classpath'.
Could not download commons-compress.jar (org.apache.commons:commons-compress:1.14)
> Could not get resource 'https://plugins.gradle.org/m2/org/apache/commons/commons-compress/1.14/commons-compress-1.14.jar'.
> Could not GET 'https://plugins.gradle.org/m2/org/apache/commons/commons-compress/1.14/commons-compress-1.14.jar'.
> Connection reset
Could not download kotlin-reflect.jar (org.jetbrains.kotlin:kotlin-reflect:1.2.0)
> Could not get resource 'https://plugins.gradle.org/m2/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotlin-reflect-1.2.0.jar'.
> Could not GET 'https://plugins.gradle.org/m2/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotlin-reflect-1.2.0.jar'.
> Connection reset
Could not download kotlin-stdlib.jar (org.jetbrains.kotlin:kotlin-stdlib:1.2.0)
> Could not get resource 'https://plugins.gradle.org/m2/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin-stdlib-1.2.0.jar'.
> Could not GET 'https://plugins.gradle.org/m2/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin-stdlib-1.2.0.jar'.
> Connection reset
Could not download spring-core.jar (org.springframework:spring-core:5.0.7.RELEASE)
> Could not get resource 'https://plugins.gradle.org/m2/org/springframework/spring-core/5.0.7.RELEASE/spring-core-5.0.7.RELEASE.jar'.
> Could not GET 'https://plugins.gradle.org/m2/org/springframework/spring-core/5.0.7.RELEASE/spring-core-5.0.7.RELEASE.jar'.
> Connection reset

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 2s

Необходимость интервала, где правая граница включена в расчет ...

Привет.
Спасибо за полезную разработку!
Вопрос: я хочу получить количество рабочих дней за, например, февраль 2019
Если я выставляю:

--data '{"start": "2019-02-01","end": "2019-03-01"}'

То в ответ: -9

но если я ставлю:

--data '{"start": "2019-02-01","end": "2019-02-28"}'

то получаю: 18.

А мне надо получить количество рабочих дней ВКЛЮЧИТЕЛЬНО. Можно это доработать?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.