/** * Store loan information to database * * @param Request $request * * @return \Symfony\Component\HttpFoundation\Response */ public function store(Request $request) { // Validation rules $validator = Validator::make($request->all(), ['amount' => 'required', 'end_date' => 'required', 'name' => 'required', 'iban' => 'required', 'phone' => 'required']); // If validation fails, provide errors if ($validator->fails()) { return response()->json(['success' => 0, 'messages' => $validator->errors()->all()]); } // Risk assessment // 1. 3 loans from single ip per 24 hours // 2. Max amout between 00:00 and 06:00 $loans = Loan::where('ip', '=', $request->ip())->where('start_date', '>=', Carbon::now()->subDay())->get(); if ($loans) { // If there are any loans at all. $currentTime = new \DateTime('now'); $start = new \DateTime('today midnight'); $end = new \DateTime('today midnight + 6 hours'); $loanLimitPerDay = $loans->count() >= 3; $amountOnTime = (int) $request->get('amount') === 500 && $currentTime > $start && $currentTime < $end; if ($loanLimitPerDay || $amountOnTime) { return response()->json(['error' => $loanLimitPerDay . '||' . $amountOnTime]); } } // Loan record $loan = Loan::create(['amount' => $request->get('amount'), 'start_date' => date('Y-m-d H:i:s'), 'name' => $request->get('name'), 'phone' => $request->get('phone'), 'iban' => $request->get('iban'), 'ip' => $request->ip()]); // Loan history record $loanHistory = $loan->historyRecords()->create(['end_date' => $request->get('end_date'), 'status' => 'Waiting', 'created_at' => date('Y-m-d H:i:s')]); return response()->json(['id' => $loan->id, 'history_record_id' => $loanHistory->id]); }