Skip to content
Snippets Groups Projects
Select Git revision
  • 61d390c7a1fe80748d4bce6103fc4a4c45238c4f
  • 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 44.29 KiB
    <?php
    
    namespace App\Http\Controllers;
    
    use App\DelegationOneVote;
    use App\Election;
    use App\ExtensionDelegationElection;
    use App\MajorityVote;
    use App\Population;
    use App\Voter;
    use Illuminate\Http\Request;
    use Illuminate\Http\Response;
    use Illuminate\Support\Facades\Config;
    use Illuminate\Support\Facades\DB;
    use Illuminate\Validation\ValidationException;
    
    class APIController extends Controller
    {
        public function generatePopulationTemplate(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 Template ' . $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'];