Skip to content
Snippets Groups Projects
Select Git revision
  • 8ece0431a47095e9550e580674e04c6299236a79
  • main default protected
  • master
3 results

APIController.php

Blame
  • 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'];