1. Public APi
DATA SPORT
  • DATABASE-SPORT
    • Tổng quan
    • Logic
      • Logic tổng thể
    • Projects
      • Yêu cầu hệ thống
      • Architecture
        • Database
    • Public APi
      • Tổng quan
    • Cron Make File
      • Tổng quan
  • GOLANG-THESPORT
    • Tổng quan
    • Architecture
      • System
      • Database
      • Source Code
    • Development
      • Local
      • Production
  • GOLANG-KSPORT
    • Tổng quan
    • Architecture
      • System
      • Database
      • Source Code
    • Development
      • Production
  • CRONJOB-LARAVEL
    • Tổng quan
    • Logic
      • Logic tổng thể
    • Projects
      • Yêu cầu hệ thống
      • Architecture
        • System
        • Source code
        • Database
      • Development
        • Dev
        • Production
      • Public API
        • Common API
          • League & Cup Profile (Basic)
          • Schedule & Results (Basic)
          • Match Modify Record
          • List of Countries
          • List of Bookmakers
          • Configuration instructions
        • Live animation
          • Configuration instructions
          • Schedule & Results
        • Live Data
          • Livescores for Today
          • Livescores Changes
          • Schedule & Results
          • Schedule Changes
          • Events
          • Stats
          • Corner
          • Lineups
          • Injury
          • Match List of Live Text
          • Live Text
          • Transfer
        • Profile
          • League & Cup Profile
          • Subleague Profile
          • Cup Stage Profile
          • Team Profile
          • Team Profile Copy
          • Team Profile for Search
          • Player Profile
          • Player Profile for Search
          • Referee Profile
          • Teamlist with Player Profile
        • Stats
          • Matches Analysis
          • List of Player Stats (Match)
          • Player Stats (Match)
          • List of Player Stats (League & Cup)
          • Player Stats (League & Cup)
          • League Standing (Get Subleague)
          • League Standing
          • Cup Standing
          • Top Scorer
          • FIFA Ranking
        • Odds (18 bookmakers)
          • Pre-match and In-play Odds (Main)
          • Live Odds Changes (Main)
          • Historical Odds (Main)
          • Future Odds (Main)
          • Pre-match and In-play Odds (All)
          • Live Odds Changes (All)
          • Historical Odds (All)
          • Future Odds (All)
          • European Odds (Halftime)
          • In-play Odds
          • In-play Odds (Halftime)
          • Odd Modify Record
        • European Odds (200+ Bookmakers)
          • European Odds (200+ Bookmakers)
        • Other Odds
          • Outrights
          • First/Last Team To Score (pre-match)
          • Goals Odd/Even (pre-match)
          • Goals Odd/Even (In-play)
          • Number of Goals in Match (pre-match)
          • Number of Goals in Match (In-play)
          • Half Time/Full Time (pre-match)
          • Half Time/Full Time (In-play)
          • Correct Score (pre-match)
          • Correct Score (In-play)
          • Half Time Correct Score (pre-match)
          • Half Time Correct Score (In-play)
          • Handicap Corners (pre-match)
          • Handicap Corners (In-play)
          • Total Corners (pre-match) - Tổng phạt góc trước trận đấu: First Odds
          • Total Corners (In-play) - Tổng số quả phạt góc (Trong trận) - Run Odds
          • Double Chance(pre-match)
          • EuroHandicap(pre-match)
  • GOLANG-WEBSOCKET
    • Tổng Quan
    • Logic
      • Logic tổng thể
    • Projects
      • Yêu cầu hệ thống
      • Architecture
        • System
        • Source code
      • Development
        • Dev
        • Production
      • Public API
        • API
  • ADMIN-BANNER
    • Tổng quan
    • Logic
      • Logic tổng thể
    • Projects
      • Architecture
        • System
        • Source Code
      • Development
        • Develop
        • Production
      • Public API
        • API
      • Database
        • Cấu trúc Database
      • Admin FE
        • HƯỚNG DẪN CÀI ĐẶT MÔI TRƯỜNG DỰ ÁN SPORT ADMIN
        • Hướng dẫn Đăng nhập
        • QUẢN LÝ SITE (SITE MANAGEMENT)
        • QUẢN LÝ GIẢI ĐẤU (LEAGUE MANAGEMENT)
        • QUẢN LÝ NHÀ CUNG CẤP (SUPPLIER MANAGEMENT)
        • TIP & CHUYÊN GIA - TAB QUẢN LÝ TIPS (TIPS MANAGEMENT)
        • WHITELIST
        • QUẢN LÝ MINIGAME (MINIGAME MANAGEMENT)
        • TRAFFIC REPORT
        • TOOLS - RAPID DATA
        • TOOLS - LIVE SITES
        • TOOLS - SUPPLIERS
        • THEME / PLUGIN
        • NGƯỜI DÙNG - PHÂN QUYỀN VÀ HIỂN THỊ (PERMISSION & DISPLAY MANAGEMENT)
        • QUẢN LÝ NGƯỜI DÙNG (USER MANAGEMENT)
        • NGƯỜI DÙNG - QUẢN LÝ NHÓM QUYỀN (ROLE GROUP MANAGEMENT)
  1. Public APi

Tổng quan

API DATA SPORT

API LIST#

TênAPIPageGhi chú
1Calculate all scores/calculate-all-scoresPredictionTính toàn bộ dự đoán
2Calculate live/calculate-livePredictionDự đoán trận LIVE
3Calculate hot/calculate-hotPredictionKèo win cao
4Predict log/predict-logPredictionLog kiểm tra
5Update soccer surveyPOST ajax/updatesoccersurveyAjaxFav / vote
6Soccer Ajaxajax/soccerAjaxAjaxData trận
7JS dynamicjs/{file}JS data
8Country imageassets/upload/fbcountry/{file}assetImg quốc gia
9League imageassets/upload/football/league_match/images/{file}assetImg giải
10Team imageassets/upload/football/team/images/{file}assetImg team
11Team image by idassets/upload/football/team/images/{id}/{file}assetImg team nhưng theo id
12Info imageassets/upload/football/info/images/{file}assetThông tin image
13Player imageassets/upload/football/player/images/{file}assetImg cầu thủ
14Player image by idassets/upload/football/player/images/{id}/{file}assetImg cầu thủ
15Mini imageassets/upload/mn/{file}assetImg nhỏ
16TV live (empty)gf/tvlive/tvlive_th_fb.txtLivescoreReturn null
17Flash live iframesoccer/flashlive?id=LivescoreEmbed iframe
18Get Match Today/api/get-matchPublic APIGet match today
19Get League Rank/api/get-league-rankPublic APIGet league rank
20Get Leagues Rank/api/get-leagues-rankPublic APIGet leagues rank
21AI check/api/ai-checkAIKiểm tra trận đấu AI
22AI Update/api/ai-updateAICập nhật lại kết quả AI
23Predict match/ajax/get-predict-matchAILấy kết quả dự đoán trận đấu
24Chi tiết trận live/ajax/match/liveLive data
25Tỷ số trận/ajax/match/match-scoreLive data
26Trận hot/ajax/get-hot-matchesLive data
27Dữ liệu match score/ajax/get-match-core-mainLive data
28Odds score/ajax/get-odds-core-mainLive data
29Statistics Team/ajax/get-statistics-teamStatistics
30Statistics Player/ajax/get-statistics-playerStatistics
31Statistics Score schedule/ajax/get-statistics-score-scheduleStatistics
32Statistics AD/ajax/get-attack-defenseStatistics
33Statistics first goal/ajax/get-first-goal-win-lossStatistics
34Statistics rank/ajax/get-statistics-detail-rankStatistics
35Kèo trực tuyến/ajax/get-odds-liveOdds
36Kết quả kèo/ajax/get-odds-resultOdds
37Kèo hỗn hợp/ajax/get-odds-fixtureOdds
38Lịch sử kèo/ajax/get-odd-detail-historyOdds

Danh sách API#

API: Predict Match Score#

1. Concept
API dùng để dự đoán tỷ số trận đấu (full-time & half-time)
Sử dụng mô hình Poisson dựa trên:
+Sức tấn công (ghi bàn)
+ Sức phòng thủ (bị thủng lưới)
Output:
Xác suất các tỷ số (0-0 → 5-5)
Sắp xếp theo % cao → thấp
2. Requirements
PHP >= 8.x (Laravel)
- Service:
MatchDetailService → lấy thống kê team
ScheduleRepo → lấy thông tin trận
Không cần cache (API tính realtime)
3. Input / Params
id(int - mã trận đấu)
4. Endpoint
GET /calculate-all-scores?id={match_id}
5. Logic xử lý
Bước 1: Lấy dữ liệu trận
Lấy thông tin trận từ scheduleRepo
Lấy stats 10 trận gần nhất của 2 đội:
+goal (ghi bàn)
+loss (thủng lưới)
Bước 2: Tính lambda (Poisson)
*Full-time:
lambdaHome = homeAttack * awayDefense
lambdaAway = awayAttack * homeDefense
*Half-time:
lambdaHome_HT = lambdaHome * 0.5
lambdaAway_HT = lambdaAway * 0.5
Bước 3: Tạo ma trận tỷ số
Loop từ 0 → 5 bàn mỗi đội
Tính xác suất:
*Xác suất tỷ số:
P(homeGoals) * P(awayGoals)
Bước 4: Chuẩn hóa %
Tổng xác suất = 100%
Convert sang % và làm tròn 2 chữ số
Sort giảm dần
6. Output
{
"predictions": {
"1-0": 18.25,
"1-1": 15.40,
"2-1": 12.30
},
"predictions_HT": {
"0-0": 30.10,
"1-0": 20.50
}
}
7. Ghi chú
Giới hạn tối đa: 5 bàn mỗi đội
Dữ liệu phụ thuộc vào:
thống kê 10 trận gần nhất
Không xử lý:
thẻ đỏ
chấn thương
live event (chỉ dùng pre-match)
Half-time chỉ là scale 50% (approximation)

API: Predict Match Score Live#

1. Concept
API dùng để dự đoán tỷ số trận đấu (full-time & half-time) theo thời gian thực
Sử dụng thông tin cũ từ all score cập nhật thêm các biến số thời gian thực
2. Requirements
PHP >= 8.x (Laravel)
- Service:
MatchDetailService → lấy thống kê team
ScheduleRepo → lấy thông tin trận
Không cần cache (API tính realtime)
3. Input / Params
Param Type Required Mô tả
id int ✅ ID trận đấu
4. Endpoint
GET /calculate-live?id={match_id}
5. Logic xử lý
Bước 1: Lấy dữ liệu trận
Lấy thông tin trận từ scheduleRepo
Lấy dữ liệu cache từ calculate-all-scores
Gọi realtime các dữ liệu trận như thẻ đỏ, thẻ vàng, góc, bàn thắng,...
Đánh trọng số các dữ liệu theo thời gian
Cập nhật lại kết quả
6. Output
{
"predictions": {
"1-0": 18.25,
"1-1": 15.40,
"2-1": 12.30
}}
}

API: Predict Match Score hot#

1. Concept
API dùng để dự đoán tỷ số trận đấu (full-time & half-time) hấp dẫn nhất
Sử dụng thông tin đã lưu trong database truy vấn thông tin hấp dẫn nhất
2. Requirements
PHP >= 8.x (Laravel)
- Service:
MatchDetailService → lấy thống kê team
ScheduleRepo → lấy thông tin trận
Không cần cache (API tính realtime)
3. Input / Params
Param Type Required Mô tả
id int ✅ ID trận đấu
4. Endpoint
GET /calculate-hot
5. Logic xử lý
Nhận input filter: % win, thời gian, giải đấu, limit
Query dữ liệu từ MatchPredictLog (chưa có kết quả, chưa live)
Lọc theo thời gian (mặc định: từ hiện tại -4h đến hết ngày mai)
Duyệt từng trận, build thông tin trận (team, league, time)
Parse dữ liệu 4 loại kèo: 1X2, Handicap, Over/Under, Correct Score
Chuẩn hóa dữ liệu từng kèo (label, odds, percent, hope)
Gom tất cả kèo vào danh sách candidates
Lọc kèo theo điều kiện: % nằm trong khoảng min-max
Chọn kèo có % cao nhất làm kèo tốt nhất
Trả về kết quả + thông tin trận + nhận định AI (Grok)
6. Output
{"status":"success","best_percent":83.12,"best_bet":{"type":"Handicap","bet_label":"Modern Sport FC (W) +3","selection":"Modern Sport FC (W) +3","percent":83.12,"hope":0.79,"odds":0.95,"company":"Bet365"},"match":{"match_id":2964750,"league":"Egypt Premier League Women","time":"2026-03-23 19:30","home":"Wadi Degla (W)","away":"Modern Sport FC (W)","is_live":false,"home_logo":"\/assets\/upload\/football\/team\/images\/1hp5vgajagn.png","guest_logo":"\/assets\/upload\/football\/team\/images\/1jc5d4mw5d14.png","content":"Modern Sport FC d\u1ef1 ki\u1ebfn s\u1ebd gi\u00e0nh chi\u1ebfn th\u1eafng tr\u01b0\u1edbc Wadi Degla v\u1edbi t\u1ef7 l\u1ec7 th\u00e0nh c\u00f4ng cao 83.12%."}}

API: Predict Match Score Dashboard#

1. Concept
Dùng để tra cứu kết quả dự đoán trận đấu
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
4. Endpoint
GET /predict-log
5. Logic xử lý
Nhận input filter: date, league_id, team_id, match_id, isLive
Nếu không có date → mặc định lấy ngày hiện tại
Query dữ liệu từ MatchPredictLog theo khoảng thời gian trong ngày
Lọc thêm theo:
giải đấu
đội bóng (home hoặc away)
match_id
trạng thái live
Lấy danh sách trận (data) theo thời gian tăng dần
Lấy danh sách:
leagues (để filter UI)
teams (gộp home + away)
Khởi tạo thống kê cho 4 loại kèo:
1X2, Handicap, OU, Correct Score
Duyệt từng trận:
Decode dữ liệu predict từ JSON
Kiểm tra đã có kết quả thực tế (correct_score_verify)
Với từng loại kèo:
So sánh predict vs kết quả thật
Tăng số lượng:
win / lose / draw
Trả về view:
danh sách trận
bộ filter (league, team)
thống kê win/lose/draw
6. Output

API: Update soccer survey, getScriptsI18n, js file#

1. Concept
Nhận dữ liệu bình chọn kết quả bóng đá
Nhận file ngôn ngữ
Nhận file js file
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
4. Endpoint
GET /update-odds
GET /scripts/i18n/{file}
GET /js/{file}
5. Logic xử lý
Nhận input:
path, data
ttl (cache, mặc định 3600s)
timeout (mặc định 20s)
Tạo URL đầy đủ:
baseUrl + path
Gọi handleRequest để xử lý request + cache:
Key cache: thremote_post_cache + url
Trong callback:
Ghi log URL gọi API
Gửi HTTP POST request:
bỏ verify SSL
set timeout
gửi kèm data
Nếu request thành công:
Trả về response body
Nếu thất bại:
Throw exception (kèm status code)
6. Output

API: Các API hình ảnh#

1. Concept
Nhận và sao chép các file dữ liệu hình ảnh
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
4. Endpoint
GET /assets/upload/fbcountry/{file}
GET /assets/upload/football/league_match/images/{file}
GET /assets/upload/football/team/images/{file}
GET /assets/upload/football/team/images/{id}/{file}
GET /assets/upload/football/info/images/{file}
GET /assets/upload/football/player/images/{file}
GET /assets/upload/football/player/images/{id}/{file}
GET /assets/upload/mn/{file}
5. Logic xử lý
Tạo đường dẫn local để lưu ảnh (assets/upload/...)
Kiểm tra ảnh đã tồn tại trong server chưa
Nếu chưa có:
Gọi HTTP GET tới URL remote để lấy ảnh
Nếu response = 200 → lấy nội dung ảnh
Lưu ảnh vào storage (disk assets)
Nếu lỗi → trả về null
Nếu đã có sẵn → không gọi API nữa
Trả về path local của ảnh
6. Output

API: Flashfive iframe#

1. Concept
Sao chép iframe của isport
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
4. Endpoint
GET soccer/flashlive?id=
5. Logic xử lý
Nhận request với param id (matchId gốc)
Lấy danh sách mapping match từ cache Redis (getListScheduleBasicMultipleDaysSaveByCache)
Gán mặc định idNew = 9999
Nếu tồn tại mapping ids[id] → lấy idNew tương ứng
Tạo URL tới trang animation (flashlive) với matchId = idNew
Nhúng URL đó vào <iframe>
Trả về HTML iframe để hiển thị trực tiếp trên web
6. Output

API: Get Match Today#

1. Concept
Nhận danh sách các trận đấu trong ngày
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
$isTeam (bool, default = true): có load thêm thông tin team (home/guest + intro) hay không
$timeOrderBy (string, default = 'asc'): sắp xếp theo thời gian trận (asc hoặc desc)
4. Endpoint
GET /api/get-match
5. Logic xử lý
Lấy khoảng thời gian:
Từ hiện tại - 4h
Đến hiện tại + 22h (gần như cover hôm nay + chút ngày mai)
Query bảng Schedule:
Lọc MatchTime nằm trong khoảng trên
Lọc MatchState thuộc danh sách trận đang live / hiển thị
Nếu $isTeam = true:
Eager load:
homeTeam -> introTeam
guestTeam -> introTeam
Sắp xếp:
Ưu tiên MatchState (desc) → trận live lên trước
Sau đó theo MatchTime (asc/desc theo param)
Trả về toàn bộ danh sách match (get())
6. Output

API: Get league rank#

1. Concept
Nhận bảng xếp hạng của giải trong ngày
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
$sclassId: ID của giải đấu
$season (optional): mùa giải (nếu không truyền → lấy mặc định từ DB)
4. Endpoint
GET /api/get-league-rank
5. Logic xử lý
Lấy thông tin giải (sclass), nếu không tồn tại → return data rỗng
Xác định season (ưu tiên param, fallback từ DB)
Tạo cache key → dùng Cache::remember (TTL 240s) để tối ưu
Lấy:
Danh sách team trong giải
Quy tắc xếp hạng (qualify: lên hạng, xuống hạng, màu)
Kiểm tra loại giải: league / cup / subleague
Nếu là cup:
Lấy danh sách trận theo group
Tính thống kê team (total, home, guest)
Nếu là league:
Tính bảng xếp hạng (points = win*3 + draw)
Gán tên đa ngôn ngữ (EN/VN/TH)
Gán màu rank + loại qualify
Tách thống kê sân nhà / sân khách
Lấy thống kê cầu thủ (top ghi bàn)
Build:
Danh sách team (name + logo + đa ngôn ngữ)
Danh sách màu rank
Trả về full data:
info giải + bảng xếp hạng + stats + player + team + metadata
6. Output

API: Get leagues rank#

1. Concept
Nhận bảng xếp hạng của nhiều giải trong ngày
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
ids (string, optional): danh sách leagueId, dạng "1,2,3"
limit (int, default = 3): số lượng giải nếu không truyền id
4. Endpoint
GET /api/get-leagues-rank
5. Logic xử lý
Nếu có ids:
Tách chuỗi → array ID (explode)
Nếu không có ids:
Lấy danh sách hot leagues
Cắt theo limit
Duyệt từng leagueId:
Gọi getLeagueRankData(id, FALSE) để lấy data bảng xếp hạng
Gom tất cả kết quả vào mảng $results
Trả về JSON
6. Output

API: AI Check#

1. Concept
API dùng để lấy danh sách dữ liệu AI predict theo ngày
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
date (optional)
→ Ngày cần lấy dữ liệu (YYYY-MM-DD)
→ Không truyền thì mặc định hôm nay
type (optional)
→ Nếu = api → trả JSON
→ Ngược lại → trả view HTML
4. Endpoint
GET /api/ai-check
5. Logic xử lý
Lấy date từ request, nếu không có → dùng ngày hiện tại
Convert thành khoảng thời gian:
start: 00:00:00
end: 23:59:59
Query DB:
bảng AI predict (AIPredictRepo)
join thêm sclass (league info)
filter theo MatchTime trong ngày
Sort theo MatchTime DESC (trận mới nhất trước)
Lấy toàn bộ data
Output:
Nếu type=api → return JSON
Ngược lại → render view ai_predictor
6. Output

API: AI update#

1. Concept
API dùng để gửi dữ liệu kèo trận đấu sang AI → nhận dự đoán → lưu lại → sau đó đối chiếu với kết quả thật.
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
4. Endpoint
GET /api/ai-update
5. Logic xử lý
Lấy danh sách trận cần predict
Với mỗi trận:
Lấy dữ liệu kèo: Handicap, 1X2, Over/Under
Build payload (odds mở + odds realtime)
Gửi request POST sang AI
Nhận kết quả dự đoán (0/1/2)
Lưu dữ liệu vào DB (chưa có kết quả thật)
Lấy danh sách trận đã có kết quả thực tế
Với mỗi trận:
Lấy tỷ số thật
Tính kết quả (thắng/hòa/thua)
So sánh với dự đoán AI
Xác định đúng/sai
Update lại DB (result, ai_result, score)
Kết thúc → return true
6. Output

API: Get predict match#

1. Concept
API tổng hợp dữ liệu phân tích trận đấu (predict match)
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
scheduleID: ID trận đấu
lang: Ngôn ngữ hiển thị (vi, en, th, …)
4. Endpoint
GET /api/get-predict-match
5. Logic xử lý
Lấy dữ liệu trận từ scheduleRepo->getPredictMatch
Lấy ID đội:
homeTeamId
guestTeamId
Lấy phong độ 6 trận gần nhất:
home → getRecentResults(..., 6)
guest → getRecentResults(..., 6)
Lấy thông tin team:
homeTeam
guestTeam
Lấy danh sách cầu thủ của 2 đội
Phân loại cầu thủ theo vị trí:
hậu vệ
tiền đạo
thủ môn
tiền vệ
HLV
Lấy đội hình trận đấu:
lineup home
lineup guest
Xử lý lineup:
danh sách cầu thủ đá chính
tính tuổi trung bình
Build response:
Home:
ID, tên đội (theo lang)
6 trận gần nhất
danh sách cầu thủ theo vị trí
đội hình + tuổi trung bình
Guest:
tương tự
6. Output

API: Find#

1. Concept
API tìm kiếm toàn hệ thống theo từ khóa
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
w :từ khóa tìm kiếm
4. Endpoint
GET /api/find
5. Logic xử lý
Lấy keyword từ request (w)
Query dữ liệu từ các repo:
schedules → tìm trận theo tên
sclasses → tìm giải đấu
teams → tìm đội bóng
players → tìm cầu thủ
Gom tất cả kết quả lại
Trả về JSON gồm:
schedules
sclasses
teams
Players
6. Output

API: Find League, Team, Player, Match#

1. Concept
API tìm kiếm giải đấu, đội, cầu thủ, trận theo từ khóa
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
w :từ khóa tìm kiếm
4. Endpoint
GET /api/find/league
GET /api/find/team
GET /api/find/player
GET /api/find/match
5. Logic xử lý
Lấy keyword từ request (w)
Query league/team/player/match
Gom tất cả kết quả lại
Trả về JSON
6. Output

API: Match live#

1. Concept
API trả về chi tiết thống kê trận đấu dạng JS (script) cho frontend
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
id: mã trận
Lang: ngôn ngữ
4. Endpoint
GET /ajax/match/live
5. Logic xử lý
Lấy scheduleId và lang từ request
Nếu có lang → set locale hệ thống
Tạo cache key theo:
scheduleId
lang
Lấy dữ liệu từ cache (TTL: 1 phút):
nếu chưa có → gọi getMatchDetailStatistics(scheduleId)
Tách dữ liệu:
lT_f → league/team info
d_f → detail data
s_f → statistics
Encode sang JSON
Build response dạng JS:
tạo các object JS (d_f, tT_f, s_f)
gán dữ liệu theo scheduleId
Return response:
dạng text/html
chứa JS code để frontend render trực tiếp
6. Output

API: Match score#

1. Concept
API trả về chi tiết tỉ số trận đấu dạng JS (script) cho frontend
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
id: mã trận
Lang: ngôn ngữ
4. Endpoint
GET /ajax/match/match-score
5. Logic xử lý
Nhận scheduleId và lang từ request
Nếu có lang → set locale cho hệ thống
Tạo cacheKey theo scheduleId + lang
Kiểm tra cache:
Nếu có → trả luôn dữ liệu cache
Nếu chưa có cache:
Gọi matchDetailService->getSchedule() để lấy dữ liệu trận
Nếu không có trận → trả lỗi Match not found
Dựa vào MatchState → build HTML hiển thị:
Đang đá → hiển thị score + trạng thái live
Hiệp 1/2 → hiển thị thêm tỷ số hiệp
Kết thúc → hiển thị full + half time score
Hoãn / hủy / gián đoạn → hiển thị trạng thái đặc biệt
Chưa đá → hiển thị "VS"
Format lại thời gian trận (trừ 7 tiếng)
Build response gồm:
state (trạng thái trận)
time (thời gian trận)
html (UI hiển thị)
stateName (text trạng thái)
schedule (data rút gọn)
Lưu cache trong 60 giây
Trả JSON response
6. Output

API: Match score main#

1. Concept
API trả về thông tin các trận đấu chính
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
companyID: ID nhà cái
date: ngày lấy dữ liệu
isHot: lọc trận hot (0/1)
page: phân trang
force: bỏ cache (0/1)
scheduleID: lọc theo trận cụ thể
lang: ngôn ngữ (vn, th,…)
datefrom, dateto: filter khoảng ngày
leagueID: filter theo giải
timeRange: filter theo khung giờ
4. Endpoint
GET /ajax/get-match-core-main
5. Logic xử lý
Tạo cacheKey + cacheTTL (60s hoặc 1 ngày tùy date)
Nếu không force:
Check cache:
Có → trả luôn
Nếu cache sắp hết hạn → call API ngầm để refresh
Nếu chưa có cache:
Gọi scheduleRepo->getMatchCoreMain() để lấy danh sách trận
Đếm số trận
Lấy danh sách giải + hot league để phục vụ sort
Sắp xếp match theo:
Thứ tự hot league
Nếu không có → theo ID giải
Loop từng trận:
Bỏ qua nếu thiếu team / league
Xử lý đa ngôn ngữ (league + team)
Build danh sách:
leagues (unique)
countries (unique)
Convert time → UTC
Format data trận:
team, score, state
logo
corner, card, time…
Build response gồm:
count
matches
leagues
countries
Cache_time
Lưu cache:
data
expired time
Trả JSON
6. Output

API: Match hot#

1. Concept
API trả về thông tin các trận đấu hot
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
id: mã trận
Lang: ngôn ngữ
4. Endpoint
GET /ajax/get-hot-matches
5. Logic xử lý
Nếu sclassIDs rỗng → trả về collection rỗng
Tạo orderByRaw để giữ thứ tự ưu tiên theo mảng sclassIDs
Query bảng Schedule:
MatchState = 0 → chỉ lấy trận chưa diễn ra
SclassID IN (...) → lọc theo danh sách giải
MatchTime trong khoảng:
từ hiện tại → +24h
Group theo SclassID → mỗi giải chỉ lấy 1 trận
Dùng MIN(MatchTime) → lấy trận sớm nhất của mỗi giải
Sắp xếp:
Theo thứ tự sclassIDs (ưu tiên giải hot)
Sau đó theo thời gian trận sớm nhất
Giới hạn tối đa 5 trận
Eager load thêm:
sclass (giải đấu)
homeTeam, guestTeam
kèo: multiLetGoals, standards, multiTotalScores
Trả về danh sách trận
6. Output

API: Odds main#

1. Concept
API trả về thông tin các kèo các trận chính
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
- companyID: ID nhà cái
- date: ngày lấy dữ liệu
- isHot: lọc trận hot
- page: phân trang
- force: bypass cache
- scheduleID: lọc theo trận
- lang: ngôn ngữ
- datefrom, dateto: khoảng ngày
- leagueID: lọc giải
- timeRange: khung giờ
- typeOdd: loại kèo cần lấy
- halfOdd: có lấy kèo hiệp 1 hay không (0/1)
4. Endpoint
GET /ajax/get-odds-core-main
5. Logic xử lý
Tạo cacheKey + TTL (60s hoặc 1 ngày tùy thời điểm)
Nếu không force:
Check cache:
Có → trả luôn
Nếu gần hết hạn → call API ngầm để refresh
Nếu chưa có cache:
Gọi scheduleRepo->getOddsCoreMain() lấy danh sách trận + odds
Đếm số trận
Loop từng trận → build oddsList:
1. Kèo 1X2 (standards)
Map về format chuẩn:
First odds
Real odds
Current odds
2. Kèo Over/Under (OU)
Group theo CompanyID
Lấy record đầu (Num lớn nhất)
Map về format chuẩn
3. Kèo Handicap (HDP)
Group theo CompanyID
Lấy record đầu
Map về format chuẩn
Nếu halfOdd = 1:
Lặp lại logic trên cho:
1x2Half
OUHalf
HDPHalf
Chuẩn hóa output:
ScheduleID, CompanyID
Type (1x2, OU, HDP, Half…)
First, Real, Current odds
Build response:
count
danh sách odds (flatten)
Cache_time
Lưu cache + expired time
Trả JSON
6. Output

API: Thống kê team#

1. Concept
API lấy thống kê đội bóng theo giải + mùa giải
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
- sclassID: ID giải đấu
- season: mùa giải
- type: loại thống kê (optional)
- lang: ngôn ngữ (vn, en, th…)
4. Endpoint
GET /ajax/get-statistics-team
5. Logic xử lý
Lấy data:
teamTechStatisticsRepo->getStatisticsTechTeam
Nếu:
type = 0 hoặc rỗng
→ trả full data
Nếu có type:
Map sang field tương ứng
Loop từng team:
Lấy Count = giá trị field
Tính Avg = Count / số trận (SchSum)
Translate tên theo lang
Build object:
Name
TeamID
Avg
Count
type
Flag
Sau đó:
Sort theo Count DESC
Gán:
Rank = index + 1
Output
Nếu có type:
Danh sách đội:
Name
TeamID
Avg
Count
Rank
Flag
Nếu không có type:
Trả raw data full stats từ repo
6. Output

API: Thống kê player#

1. Concept
API lấy thống kê cầu thủ theo giải + mùa
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
- sclassID: ID giải đấu
- season: mùa giải (optional)
- type: loại thống kê (optional)
- lang: ngôn ngữ
- playerID: lọc theo cầu thủ (optional)
4. Endpoint
GET /ajax/get-statistics-team
5. Logic xử lý
Lấy data:
playerTechStatisticsRepo->getPlayerTechStatics(...)
Nếu:
type = 0 hoặc rỗng
→ trả raw data
Nếu có type:
Map sang field tương ứng
Loop từng player:
Count = giá trị field
Avg = Count / SchSum
Build object:
playerID
playerName
teamID
teamName
Avg
Count
type
teamFlag
playerPhoto
Xử lý media
teamFlag:
dùng getLogoTeam
playerPhoto:
base path:
/assets/upload/football/player/images/
checkLogoPlayer(...)
Sort & Rank
Sort:
Count DESC
Gán:
Rank = index + 1
Output
Nếu có type:
Danh sách cầu thủ:
playerID
playerName
teamID
teamName
Avg
Count
Rank
teamFlag
playerPhoto
Nếu không có type:
Trả full raw data từ repo
6. Output

API: Thống kê đối đầu#

1. Concept
API tạo ma trận đối đầu (score matrix) giữa các đội trong 1 giải
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
- sclassID: ID giải đấu
- season: mùa giải
- lang: ngôn ngữ hiển thị tên đội
4. Endpoint
GET /ajax/get-statistics-score-schedule
5. Logic xử lý
Lấy toàn bộ match từ scheduleRepo->getStatisticsScoreSchedule
Tạo danh sách team:
Lấy từ homeTeam + guestTeam
Loại trùng
Sort A → Z
Khởi tạo matrix n x n (n = số team)
Giá trị mặc định = null
Loop từng match:
Xác định vị trí:
homeIndex
awayIndex
Gán vào matrix:
HomeScore
GuestScore
HomeHalfScore
GuestHalfScore
MatchTime (Y-m-d)
MatchState
Output
title: Thống kê tỷ số
season: mùa giải
updated_at: thời gian
teams: danh sách đội
matrix_score_data:
teams
results (ma trận)
6. Output

API: Thống kê tỷ số#

1. Concept
Thống kê phân bố tỷ số trận đấu trong 1 giải
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
sclassID: ID giải
season: mùa giải
lang: ngôn ngữ (không dùng trong logic chính)
4. Endpoint
GET /ajax/get-attack-defense
5. Logic xử lý
Lấy danh sách trận đã kết thúc:
scheduleRepo->getScheduleFinish
Loop từng trận:
Lấy:
HomeScore
GuestScore
Format:
"home - guest" (vd: 2 - 1)
Đếm số lần xuất hiện của từng tỷ số
Đồng thời:
tăng totalMatches
Sau khi loop:
Sort:
theo count DESC
Build output:
Với mỗi tỷ số:
rank: thứ hạng
score: tỷ số (vd: 2 - 1)
count: số trận
percentage: % trên tổng trận
Output
stats:
danh sách:
rank
score
count
Percentage
Total:
tổng số trận đã tính
6. Output

API: Thống kê ghi bàn trước / bị ghi bàn trước#

1. Concept
Thống kê đội nào ghi bàn trước / bị ghi bàn trước
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
sclassID: ID giải
season: mùa giải
lang: ngôn ngữ
4. Endpoint
GET /ajax/get-first-goal-win-loss
5. Logic xử lý
Lấy danh sách trận đã kết thúc:
scheduleRepo->getScheduleFinish
Loop từng trận:
Lấy:
HomeTeamID, GuestTeamID
Tên team theo lang
Init team nếu chưa có trong mảng:
name
scored_first_total
scored_first_home
scored_first_away
conceded_first_total
conceded_first_home
Conceded_first_away
Lấy bàn thắng đầu tiên:
detailResultRepo->getFirstGoalOfMatch(ScheduleID)
Nếu không có bàn:
bỏ qua
Nếu có:
Xác định team ghi bàn đầu tiên
Case 1: Home ghi trước
Home:
scored_first_total++
scored_first_home++
Guest:
conceded_first_total++
Conceded_first_away++
Case 2: Guest ghi trước
Guest:
scored_first_total++
scored_first_away++
Home:
conceded_first_total++
Conceded_first_home++
Sort
Sắp xếp:
theo scored_first_total DESC
Output
Danh sách team:
name
scored_first_total
scored_first_home
scored_first_away
conceded_first_total
conceded_first_home
Conceded_first_away
6. Output

API: Thống kê tổng hợp giải đấu#

1. Concept
API thống kê tổng hợp giải đấu (league statistics)
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
sclassID: ID giải
season: mùa giải
lang: ngôn ngữ
4. Endpoint
GET /ajax/get-statistics-detail-rank
5. Logic xử lý
Loop match:
nếu MatchState == -1 → tính stats
else → tăng remaining
Update team stats:
cộng bàn thắng / thua
cộng trận
cộng điểm
Sort ranking:
points DESC
goal diff DESC
goals scored DESC
Top stats:
scan toàn bộ teamList
so sánh max / min
cho phép nhiều team đồng hạng
6. Output

API: Thống kê ghi bàn trước / bị ghi bàn trước#

1. Concept
Thống kê đội nào ghi bàn trước / bị ghi bàn trước
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
sclassID: ID giải
season: mùa giải
lang: ngôn ngữ
4. Endpoint
GET /ajax/get-odds-live
5. Logic xử lý
Lấy danh sách trận đã kết thúc:
scheduleRepo->getScheduleFinish
Loop từng trận:
Lấy:
HomeTeamID, GuestTeamID
Tên team theo lang
Init team nếu chưa có trong mảng:
name
scored_first_total
scored_first_home
scored_first_away
conceded_first_total
conceded_first_home
Conceded_first_away
Lấy bàn thắng đầu tiên:
detailResultRepo->getFirstGoalOfMatch(ScheduleID)
Nếu không có bàn:
bỏ qua
Nếu có:
Xác định team ghi bàn đầu tiên
Case 1: Home ghi trước
Home:
scored_first_total++
scored_first_home++
Guest:
conceded_first_total++
Conceded_first_away++
Case 2: Guest ghi trước
Guest:
scored_first_total++
scored_first_away++
Home:
conceded_first_total++
Conceded_first_home++
Sort
Sắp xếp:
theo scored_first_total DESC
Output
Danh sách team:
name
scored_first_total
scored_first_home
scored_first_away
conceded_first_total
conceded_first_home
Conceded_first_away
6. Output

API: Danh sách trận đấu#

1. Concept
API lấy danh sách trận đấu + odds theo thời gian thực
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
- companyID: Mã công ty
- date: Ngày thi đấu
- isHot: Lấy giải hot
- page: số page
- scheduleID: Mã trận
- timezone: Vùng thời gian
4. Endpoint
GET /ajax/get-odds-live
5. Logic xử lý
Lấy danh sách trận đấu theo sclassID + season
Duyệt từng trận:
Nếu MatchState = -1 → tính thống kê
Ngược lại → tăng số trận chưa diễn ra
Với trận đã kết thúc:
Cộng tổng bàn thắng (home + away)
Xác định thắng / hòa / thua
Cộng số trận, bàn thắng, bàn thua cho từng đội
Cộng điểm (3-1-0)
Gom dữ liệu theo từng đội (teamList)
Tính trung bình:
Bàn sân nhà / trận
Bàn sân khách / trận
Tính tỷ lệ %:
thắng sân nhà / hòa / thắng sân khách
Duyệt teamList để:
Tìm đội ghi nhiều / ít bàn nhất
Tìm đội thủng lưới ít / nhiều nhất
Cho phép nhiều đội đồng hạng
Sắp xếp bảng xếp hạng:
Điểm ↓
Hiệu số bàn thắng ↓
Bàn thắng ↓
Format output:
summary
topStats
ranking
Updated_at
6. Output

API: Lấy danh sách trận đã kết thúc theo ngày#

1. Concept
Lấy danh sách trận đã kết thúc theo ngày
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
companyID: ID nhà cái
date: ngày cần lấy (Y-m-d)
isHot: lọc giải hot (0/1)
page: phân trang (chưa dùng)
scheduleID: ID trận (0 = lấy tất cả)
timezone: múi giờ (hiện chưa dùng)
4. Endpoint
GET /ajax/get-odds-result
5. Logic xử lý
Xác định khoảng thời gian:
startDate = date 00:00:00
endDate = date 23:59:59
Chỉ lấy trận có trạng thái kết thúc:
MatchState IN (-1, -10, -11, -12, -13, -14)
Filter:
Có tên đội (homeTeam, guestTeam)
Nếu scheduleID != 0 → lấy đúng 1 trận
Nếu scheduleID = 0 → filter theo ngày + trạng thái
Nếu isHot = 1 → chỉ lấy giải hot
Join dữ liệu:
sclass + introSclass
homeTeam, guestTeam + introTeam
multiLetGoals (lọc theo companyID, lấy odds HDP, sort Num desc)
Sắp xếp:
Ưu tiên giải 103 → 113 → còn lại
Sau đó theo MatchTime ASC
Trả về danh sách schedules có đầy đủ info trận + odds
6. Output

API: Lấy danh sách trận sắp diễn ra (fixture)#

1. Concept
Lấy danh sách trận sắp diễn ra (fixture)
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
companyID: ID nhà cái
date: ngày cần lấy (Y-m-d)
isHot: lọc giải hot (0/1)
page: phân trang (chưa dùng)
scheduleID: ID trận (0 = lấy tất cả)
timezone: múi giờ (hiện chưa dùng)
4. Endpoint
GET /ajax/get-odds-fixture
5. Logic xử lý
Xác định khoảng thời gian:
startDate = date 00:00:00
endDate = date 23:59:59
Chỉ lấy trận chưa diễn ra:
MatchState = 0
Filter:
Nếu scheduleID != 0 → lấy đúng 1 trận
Nếu scheduleID = 0 → filter theo ngày + trạng thái
Nếu isHot = 1 → chỉ lấy giải hot
Join dữ liệu:
sclass + introSclass
homeTeam, guestTeam + introTeam
standards → odds 1x2
multiLetGoals → odds HDP (lấy Num lớn nhất)
multiTotalScores → odds OU (lấy Num lớn nhất)
Sắp xếp:
Ưu tiên giải 103 → 113 → còn lại
Sau đó theo MatchTime ASC
Trả về:
Danh sách schedules gồm thông tin trận + full odds trước trận
6. Output

API: Lấy lịch sử biến động odds theo trận#

1. Concept
Lấy lịch sử biến động odds theo trận
2. Requirements
PHP >= 8.x (Laravel)
3. Input / Params
scheduleID: ID trận
companyID: danh sách ID nhà cái (VD: "1,2,3")
type: loại odds
1 = HDP
2 = OU
3 = 1x2
4. Endpoint
GET /ajax/get-odd-detail-history
5. Logic xử lý
Validate:
Nếu companyID rỗng → return []
Convert companyID → mảng số
Convert type → int
Theo từng type:
type = 1 (HDP):
Lấy danh sách odds từ multiLetGoal
Với mỗi record → lấy OddsID
Query multiLetGoalDetail để lấy history
type = 2 (OU):
Lấy từ multiTotalScore
Lấy OddsID
Query multiTotalScoreDetail lấy history
type = 3 (1x2):
Lấy từ standard
Lấy OddsID
Query standardDetail lấy history
Mapping kết quả:
Key = CompanyID
Value = danh sách biến động odds theo thời gian
Nếu type không hợp lệ → return []
Modified at 2026-03-25 09:14:21
Previous
Database
Next
Tổng quan
Built with