Skip to content

chelout/laravel-library-test

Repository files navigation

#Api библиотеки на базе Laravel + MySQL 8.

В библиотеке хранятся книги, у каждой книги может быть как один автор, так и несколько соавторов. Хранятся данные о выдаче книг на руки, записывается только факт выдачи. Весь основной функционал уже присутствует, необходимо написать реализацию метода api /api/books/stat получения статистики выдачи книг на руки за произвольный период. Кроме того мы хотим получить агрегированные данные по месяцам, годам и за все время работы библиотеки. Все данные мы хотим получать в одном ответе в следующем формате(предположим, что такой неудобный формат нам продиктован внешними факторами и не может быть изменен):

[
	{
		"date": "2019-01",
		"title": "Война и мир",
		"value": 13
	},
	{
		"date": "2019-01",
		"title": "Пикник у обочины",
		"value": 23
	},
	{
		"date": "2019-01",
		"title": "Капитал",
		"value": 11
	},
	{
		"date": "2019-01",
		"value": 47	// Общее значение за месяц
	},
	{
		"date": "2019-02",
		"title": "Война и мир",
		"value": 64
	},
	{
		"date": "2019-02",
		"title": "Пикник у обочины",
		"value": 0
	},
	{
		"date": "2019-02",
		"title": "Капитал",
		"value": 4
	},
	{
		"date": "2019-02",
		"value": 68	// Общее значение за месяц
	},
	{
		"date": "2019-03",
		"title": "Война и мир",
		"value": 0
	},
	{
		"date": "2019-03",
		"title": "Пикник у обочины",
		"value": 0
	},
	{
		"date": "2019-03",
		"title": "Капитал",
		"value": 0
	},
	{
		"date": "2019-03",
		"value": 0	// Общее значение за месяц, может быть нулевым
	},
	{
		"date": "2019",
		"value": 1235	// Общее значение за год. Подсчет должен вестись с начала года вне зависимости от фильтра
	},
	{
		"value": 10600	// Общее значение за все время. Подсчет должен вестись с начала истории статистики вне зависимости от фильтра
	},
]

Необходимо обратить внимание, что в ответе присутствуют все книги, даже те, которые не выдавались на руки, например, в феврале 2019 года на руки не выдавалась книга "Пикник у обочины", но в ответе она присутствует. Также необходимо предусмотреть ситуацию, когда на руки не выдана ни одна книга в течении месяца, например, март 2019 года.

Очень хочется увидеть хорошо структурированный код с максимальным использованием функционала Laravel, если для каких-то мест, функционал Laravel, по вашему мнению, не подходит, объяснить почему и сделать так, как считаете правильным. Также будет большим плюсом наличие тестов критичного, по вашему мнению, функционала.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages