Select Git revision
APIController.php
-
tomaszrudowski authoredtomaszrudowski authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
APIController.php 24.20 KiB
<?php
namespace App\Http\Controllers;
use App\DelegationOneVote;
use App\Election;
use App\ExtensionDelegationElection;
use App\MajorityElection;
use App\MajorityVote;
use App\Population;
use App\Voter;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\ValidationException;
class APIController extends Controller
{
public function generatePopulation(Request $request)
{
try {
$attributes = $request->validate([
'name' => 'nullable|string',
'size_a' => 'required|integer|min:0|max:1000',
'size_b' => 'required|integer|min:0|max:1000',
'init_expertise_a' => 'required|integer|min:0|max:100',
'init_expertise_b' => 'required|integer|min:0|max:100',
'spread_expertise_a' => 'required|integer|min:0|max:100',
'spread_expertise_b' => 'required|integer|min:0|max:100',
'init_confidence_a' => 'required|integer|min:0|max:100',
'init_confidence_b' => 'required|integer|min:0|max:100',
'spread_confidence_a' => 'required|integer|min:0|max:100',
'spread_confidence_b' => 'required|integer|min:0|max:100',
'init_following_a' => 'required|integer|min:0|max:100',
'init_following_b' => 'required|integer|min:0|max:100',
'spread_following_a' => 'required|integer|min:0|max:100',
'spread_following_b' => 'required|integer|min:0|max:100',
'init_leadership_a' => 'required|integer|min:0|max:100',
'init_leadership_b' => 'required|integer|min:0|max:100',
'spread_leadership_a' => 'required|integer|min:0|max:100',
'spread_leadership_b' => 'required|integer|min:0|max:100'
]);
} catch (ValidationException $e) {
return response()->json([
'message' => 'Incorrect payload',
'val_errors' => $e->errors()
], Response::HTTP_UNPROCESSABLE_ENTITY);
}
$start = microtime(true);
$population = new Population();
$population->save();
$population->name = isset($attributes['name']) ? $attributes['name'] : 'Population ' . $population->id;
$population->update();
$minValue = 1;
$maxValue = 100;
$minExpertiseValueA = $attributes['init_expertise_a'] - $attributes['spread_expertise_a'];
$minExpertiseValueA = $minExpertiseValueA < $minValue ? $minValue : $minExpertiseValueA;
$maxExpertiseValueA = $attributes['init_expertise_a'] + $attributes['spread_expertise_a'];
$maxExpertiseValueA = $maxExpertiseValueA > $maxValue ? $maxValue : $maxExpertiseValueA;
$minExpertiseValueB = $attributes['init_expertise_b'] - $attributes['spread_expertise_b'];
$minExpertiseValueB = $minExpertiseValueB < $minValue ? $minValue : $minExpertiseValueB;
$maxExpertiseValueB = $attributes['init_expertise_b'] + $attributes['spread_expertise_b'];
$maxExpertiseValueB = $maxExpertiseValueB > $maxValue ? $maxValue : $maxExpertiseValueB;
$minConfidenceValueA = $attributes['init_confidence_a'] - $attributes['spread_confidence_a'];
$minConfidenceValueA = $minConfidenceValueA < $minValue ? $minValue : $minConfidenceValueA;
$maxConfidenceValueA = $attributes['init_confidence_a'] + $attributes['spread_confidence_a'];