Мне нужно выполнить функцию подсчета:
- Пользователь может загружать только 5 файлов (всего) в сутки. Например: сегодня пользователь имеет 5 доступных загрузок, пользователь загрузил файл myFile1.txt, и теперь он имеет 4 доступных загрузки сегодня, но если он хочет снова загрузить файл myFile1.txt, он может сделать это столько раз, сколько он хочет (по-прежнему 4 доступны для скачивания), но если он скачал новый файл myFile2.txt, то теперь у него есть 3 доступных скачивания.
Мой вопрос, как отследить, сколько раз Пользователь скачал файл. Это мой код:
/*
* $id {string} = file name;
* $dayStart (Timestamp) = example: 2020-03-25 00:00:00;
* $dayEnd (Timestamp) = example: 2020-03-26 00:00:00;
* $total (int) = how much User has downloaded;
* $response = file download functionality.
* auth()->user()->dailyDownloads (int) = default value 5.
*/
public function downloadFile(Request $request, $id){
$file = storage_path('app/files/') . $id .'.bin';
// Tracking operation date, find all records in this date interval.
$dayStart = Carbon::today();
$dayEnd = Carbon::tomorrow();
$total = DumpDownloadHistory::distinct('dataset')->where('user_id', auth()->user()->id)->
whereBetween('created_at', [$dayStart, $dayEnd])->count();
$findIfDownloaded = DumpDownloadHistory::distinct('dataset')->where('user_id', auth()->user()->id)->where('dataset', $id)->count();
if ($total >= auth()->user()->dailyDownloads) {
dd('To many downloads');
}
if (file_exists($file)) {
$headers = [
'Content-Type' => 'application/bin'
];
$response = response()->download($file, $id.'.bin', $headers, 'inline');
if ($response) {
// Storing download history to Database
auth()->user()->downloadHistorys()->create([
'user_id' => auth()->user()->id,
'dataset' => $id,
'user_ip'=> request()->ip()
]);
return $response;
}
} else {
abort(404, 'File not found!');
}
}