File size: 2,185 Bytes
c6c6a6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
"""POST /api/rows — filter + sort the MV database, return compact table rows."""

import math
from typing import List, Optional

import pandas as pd
from fastapi import APIRouter
from pydantic import BaseModel

from data import get_rows

router = APIRouter()


class RowsRequest(BaseModel):
    seasons: Optional[List[str]] = None
    leagues: Optional[List[str]] = None
    positions: Optional[List[str]] = None
    age_min: Optional[int] = None
    age_max: Optional[int] = None
    min_minutes: int = 0
    foot: Optional[str] = None
    mv_min_millions: Optional[float] = None
    mv_max_millions: Optional[float] = None
    nationality: Optional[str] = None
    conf: Optional[str] = None
    sort: str = 'mv_eos'
    sort_dir: str = 'desc'
    limit: int = 2000


def _s(v):
    if v is None or (isinstance(v, float) and (math.isnan(v) or pd.isna(v))):
        return None
    return v


@router.post('/rows')
def rows(req: RowsRequest):
    df = get_rows(seasons=req.seasons, leagues=req.leagues, positions=req.positions,
                  age_min=req.age_min, age_max=req.age_max, min_minutes=req.min_minutes,
                  foot=req.foot, mv_min_millions=req.mv_min_millions,
                  mv_max_millions=req.mv_max_millions, nationality=req.nationality,
                  conf=req.conf, sort=req.sort, sort_dir=req.sort_dir, limit=req.limit)
    out = []
    for d in df.to_dict('records'):
        out.append({
            'pid': str(d['playerId']),
            'tm_id': _s(d['tm_id']),
            'j': _s(d['Jugador']),
            'p': _s(d['Posicion']),
            't': _s(d['Temporada']),
            'age': _s(d['age']),
            'nat': _s(d['nationality']),
            'e': _s(d['Equipo']),
            'c': _s(d['Competencia']),
            'min': _s(d['Minutos totales']),
            'mv': _s(d['mv_eos']),
            'mv_prev': _s(d['mv_eos_prev']),
            'mv_now': _s(d['tm_mv_now']),
            'src': _s(d['mv_source']),
            'conf': _s(d['match_conf']),
            'url': _s(d['tm_url']),
            'ct': _s(d['tm_contract_until']),
            'foot': _s(d['tm_foot']),
        })
    return {'rows': out, 'count': len(out)}