Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
7786880
データ更新
mapserver2007 May 18, 2025
72ca4f7
データ更新
mapserver2007 May 22, 2025
29d23ec
一旦コミット
mapserver2007 May 28, 2025
2d98883
データ更新
mapserver2007 Jun 2, 2025
c253125
JRAレースとpat購入の海外地方レースの場合レースデータが正しく保存されないバグ修正
mapserver2007 Jun 4, 2025
b42d501
データ更新
mapserver2007 Jun 4, 2025
68ed987
券種並び誤り修正
mapserver2007 Jun 6, 2025
1432f94
データ更新
mapserver2007 Jun 13, 2025
1774f25
jockeyのIDを追加し、umacaTicketServiceにロギング機能を統合しました。また、依存関係の注入を更新しました。
mapserver2007 Jun 13, 2025
0a87fda
Goモジュールのバージョンを1.23.1から1.24.3に更新、関連モジュール更新
mapserver2007 Jun 14, 2025
4b9b03b
データ更新および新しいオッズファイルの追加
mapserver2007 Jun 14, 2025
b878123
Goモジュールの依存関係を更新し、バージョンを最新にしました。
mapserver2007 Jun 14, 2025
7506395
新しいJockeyResultエンティティ、リポジトリ、サービスを追加し、分析サービスにUSMメソッドを実装しました。また、依存関係の注入…
mapserver2007 Jun 14, 2025
fc0a583
RaceTimeエンティティにraceTimeIdフィールドを追加し、関連するコンストラクタとメソッドを更新しました。また、netkeib…
mapserver2007 Jun 15, 2025
356a014
RaceTimeエンティティに新しいバージョンRaceTimeV2を追加し、関連するコンストラクタやメソッドを実装しました。また、Race…
mapserver2007 Jun 21, 2025
9e54d21
RaceTimeV2エンティティのtimeフィールドをstringからRaceTime value objectに変更し、関連するコンスト…
mapserver2007 Jun 21, 2025
b39f99d
RaceTimeエンティティをRaceTimeV2に更新し、関連するサービスやコンバータでの使用を反映しました。また、RaceTimeの取…
mapserver2007 Jun 22, 2025
21ee744
オッズファイルとレースタイムファイルのデータを更新し、新しいレース情報を追加しました。
mapserver2007 Jun 22, 2025
75a7d19
新しいJockeyResultエンティティ、リポジトリ、サービスを追加し、関連するコンバータを実装しました。また、JockeyResult…
mapserver2007 Jun 26, 2025
aaf2feb
オッズファイルとレースタイムファイルを新たに追加し、2025年6月28日、29日、7月5日のレース情報を更新しました。また、レース情報に関…
mapserver2007 Jul 6, 2025
993e52b
2025年7月6日のレース情報を追加し、新しいオッズファイル(win、place、quinella、trio)を作成しました。また、rac…
mapserver2007 Jul 6, 2025
0b1fc6e
2025年7月12日および13日のレース情報を追加し、新しいオッズファイル(win、place、quinella、trio)を作成しました…
mapserver2007 Aug 23, 2025
2a89cd2
2025年8月23日、24日、30日のレース情報を追加し、新しいオッズファイル(win、place、quinella、trio)を作成しま…
mapserver2007 Aug 30, 2025
71b4a0f
ジョッキー結果エンティティとリポジトリをリファクタリングし、新しいメソッドを追加しました。また、関連サービスとコンバータを更新し、MCPツ…
mapserver2007 Oct 9, 2025
cd0e1bd
新しいレース情報とオッズファイルを追加しました。2025年8月31日から2025年10月5日までのレースデータを含む複数のファイルを作成し…
mapserver2007 Oct 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 13 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,18 +1,29 @@
GOBASE=$(shell pwd)
GOBIN=$(GOBASE)/bin

.PHONY: gen-wire build

.PHONY: install
install:
go get github.com/mark3labs/mcp-go
go install golang.org/x/tools/cmd/goimports@latest
go install github.com/google/wire/cmd/wire@latest
go install github.com/go-delve/delve/cmd/dlv@v1.24.2
go install github.com/air-verse/air@v1.62.0

.PHONY: gen-wire
gen-wire:
wire gen di/wire.go

.PHONY: lint
lint:
goimports -w .

.PHONY: build
build:
go mod download
go build -o bin/ipat-aggreagtor cmd/main.go
go build -o bin/mcp-server cmd/mcp/main.go

.PHONY: cache-clear
cache-clear:
rm -rf ./cache/colly/*

Expand Down
14 changes: 14 additions & 0 deletions app/controller/analysis.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,17 @@ func (a *Analysis) Beta(ctx context.Context, input *AnalysisInput) {
}
a.logger.Info("fetching analysis beta end")
}

func (a *Analysis) Usm(ctx context.Context, input *AnalysisInput) {
a.logger.Info("fetching analysis usm start")
if err := a.analysisUseCase.Usm(ctx, &analysis_usecase.AnalysisInput{
Markers: input.Master.AnalysisMarkers,
Races: input.Master.Races,
Odds: &analysis_usecase.AnalysisOddsInput{
Win: input.Master.WinOdds,
Place: input.Master.PlaceOdds,
},
}); err != nil {
a.logger.Errorf("analysis usm error: %v", err)
}
}
2 changes: 1 addition & 1 deletion app/controller/master.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ type MasterInput struct {
type MasterOutput struct {
Tickets []*ticket_csv_entity.RaceTicket
Races []*data_cache_entity.Race
RaceTimes []*data_cache_entity.RaceTime
RaceTimes []*data_cache_entity.RaceTimeV2
Jockeys []*data_cache_entity.Jockey
WinOdds []*data_cache_entity.Odds
PlaceOdds []*data_cache_entity.Odds
Expand Down
54 changes: 54 additions & 0 deletions app/controller/mcp.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package controller

import (
"context"

"github.com/mapserver2007/ipat-aggregator/app/usecase/mcp_usecase"
"github.com/mark3labs/mcp-go/server"
"github.com/sirupsen/logrus"
)

const (
serverName = "yamato"
serverVersion = "0.0.1"
)

type MCPServer struct {
mcpServer *server.MCPServer
toolUseCase mcp_usecase.Tool
logger *logrus.Logger
}

func NewMCPServer(
toolUseCase mcp_usecase.Tool,
logger *logrus.Logger,
) *MCPServer {
mcpServer := server.NewMCPServer(
serverName,
serverVersion,
server.WithResourceCapabilities(true, true),
server.WithLogging(),
server.WithRecovery(),
)

return &MCPServer{
mcpServer: mcpServer,
toolUseCase: toolUseCase,
logger: logger,
}
}

func (s *MCPServer) Start() error {
if err := server.ServeStdio(s.mcpServer); err != nil {
s.logger.Fatalf("server start error: %v", err)
return err
}

return nil
}

func (s *MCPServer) Load(ctx context.Context) error {
s.mcpServer.AddTool(s.toolUseCase.GetRaceTimeTool(), s.toolUseCase.GetRaceTimeToolHandler)

return nil
}
7 changes: 7 additions & 0 deletions app/domain/entity/analysis_entity/jockey_result.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package analysis_entity

import "github.com/mapserver2007/ipat-aggregator/app/domain/types"

type JockeyResult struct {
raceId types.RaceId
}
86 changes: 86 additions & 0 deletions app/domain/entity/data_cache_entity/jockey_result.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package data_cache_entity

import (
"github.com/mapserver2007/ipat-aggregator/app/domain/types"
"github.com/shopspring/decimal"
)

type JockeyResult struct {
jockeyResultId types.JockeyResultId
jockeyId types.JockeyId
raceId types.RaceId
raceDate types.RaceDate
raceCourseId types.RaceCourse
odds decimal.Decimal
orderNo int
horseId types.HorseId
courseCategory types.CourseCategory
distance int
}

func NewJockeyResult(
jockeyResultId string,
jockeyId string,
raceId string,
raceDate int,
raceCourseId string,
odds string,
orderNo int,
horseId string,
courseCategory int,
distance int,
) *JockeyResult {
decimalOdds, _ := decimal.NewFromString(odds)
return &JockeyResult{
jockeyResultId: types.JockeyResultId(jockeyResultId),
jockeyId: types.JockeyId(jockeyId),
raceId: types.RaceId(raceId),
raceDate: types.RaceDate(raceDate),
raceCourseId: types.RaceCourse(raceCourseId),
odds: decimalOdds,
orderNo: orderNo,
horseId: types.HorseId(horseId),
courseCategory: types.CourseCategory(courseCategory),
distance: distance,
}
}

func (j *JockeyResult) JockeyResultId() types.JockeyResultId {
return j.jockeyResultId
}

func (j *JockeyResult) JockeyId() types.JockeyId {
return j.jockeyId
}

func (j *JockeyResult) RaceId() types.RaceId {
return j.raceId
}

func (j *JockeyResult) RaceDate() types.RaceDate {
return j.raceDate
}

func (j *JockeyResult) RaceCourseId() types.RaceCourse {
return j.raceCourseId
}

func (j *JockeyResult) Odds() decimal.Decimal {
return j.odds
}

func (j *JockeyResult) OrderNo() int {
return j.orderNo
}

func (j *JockeyResult) HorseId() types.HorseId {
return j.horseId
}

func (j *JockeyResult) CourseCategory() types.CourseCategory {
return j.courseCategory
}

func (j *JockeyResult) Distance() int {
return j.distance
}
95 changes: 33 additions & 62 deletions app/domain/entity/data_cache_entity/race_time.go
Original file line number Diff line number Diff line change
@@ -1,93 +1,64 @@
package data_cache_entity

import (
"time"

"github.com/mapserver2007/ipat-aggregator/app/domain/types"
"github.com/mapserver2007/ipat-aggregator/app/domain/vo/data_cache_vo"
)

type RaceTime struct {
raceId types.RaceId
raceDate types.RaceDate
time string
timeIndex int
trackIndex int
rapTimes []time.Duration
first3f time.Duration
first4f time.Duration
last3f time.Duration
last4f time.Duration
rap5f time.Duration
type RaceTimeV2 struct {
raceTimeId types.RaceTime
raceId types.RaceId
raceDate types.RaceDate
time *data_cache_vo.RaceTime
timeIndex int
trackIndex int
raceTimeRap *data_cache_vo.RaceTimeRap
}

func NewRaceTime(
func NewRaceTimeV2(
raceTimeId types.RaceTime,
raceId types.RaceId,
raceDate types.RaceDate,
time string,
time *data_cache_vo.RaceTime,
timeIndex int,
trackIndex int,
rapTimes []time.Duration,
first3f time.Duration,
first4f time.Duration,
last3f time.Duration,
last4f time.Duration,
rap5f time.Duration,
) *RaceTime {
return &RaceTime{
raceId: raceId,
raceDate: raceDate,
time: time,
timeIndex: timeIndex,
trackIndex: trackIndex,
rapTimes: rapTimes,
first3f: first3f,
first4f: first4f,
last3f: last3f,
last4f: last4f,
rap5f: rap5f,
raceTimeRap *data_cache_vo.RaceTimeRap,
) *RaceTimeV2 {
return &RaceTimeV2{
raceTimeId: raceTimeId,
raceId: raceId,
raceDate: raceDate,
time: time,
timeIndex: timeIndex,
trackIndex: trackIndex,
raceTimeRap: raceTimeRap,
}
}

func (r *RaceTime) RaceId() types.RaceId {
func (r *RaceTimeV2) RaceTimeId() types.RaceTime {
return r.raceTimeId
}

func (r *RaceTimeV2) RaceId() types.RaceId {
return r.raceId
}

func (r *RaceTime) RaceDate() types.RaceDate {
func (r *RaceTimeV2) RaceDate() types.RaceDate {
return r.raceDate
}

func (r *RaceTime) Time() string {
func (r *RaceTimeV2) Time() *data_cache_vo.RaceTime {
return r.time
}

func (r *RaceTime) TimeIndex() int {
func (r *RaceTimeV2) TimeIndex() int {
return r.timeIndex
}

func (r *RaceTime) TrackIndex() int {
func (r *RaceTimeV2) TrackIndex() int {
return r.trackIndex
}

func (r *RaceTime) RapTimes() []time.Duration {
return r.rapTimes
}

func (r *RaceTime) First3f() time.Duration {
return r.first3f
}

func (r *RaceTime) First4f() time.Duration {
return r.first4f
}

func (r *RaceTime) Last3f() time.Duration {
return r.last3f
}

func (r *RaceTime) Last4f() time.Duration {
return r.last4f
}

func (r *RaceTime) Rap5f() time.Duration {
return r.rap5f
func (r *RaceTimeV2) RaceTimeRap() *data_cache_vo.RaceTimeRap {
return r.raceTimeRap
}
63 changes: 63 additions & 0 deletions app/domain/entity/mcp_result_entity/mcp_result.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package mcp_result_entity

type MCPResult struct {
Races []*Race `json:"races"`
RaceNote string `json:"race_note"`
Condition *Condition `json:"condition"`
}

type Race struct {
RaceId string `json:"race_id"`
RaceDate string `json:"race_date"`
RaceName string `json:"race_name"`
RaceNumber int `json:"race_number"`
RaceCourse string `json:"race_course"`
RaceUrl string `json:"race_url"`
Entries int `json:"entries"`
Distance int `json:"distance"`
Class string `json:"class"`
CourseCategory string `json:"course_category"`
TrackCondition string `json:"track_condition"`
RaceSexCondition string `json:"race_sex_condition"`
RaceWeightCondition string `json:"race_weight_condition"`
RaceAgeCondition string `json:"race_age_condition"`
RaceResults []*RaceResult `json:"race_results"`
}

type RaceResult struct {
OrderNo int `json:"order_no"`
HorseId string `json:"horse_id"`
HorseName string `json:"horse_name"`
BracketNumber int `json:"bracket_number"`
HorseNumber int `json:"horse_number"`
JockeyId string `json:"jockey_id"`
Odds string `json:"odds"`
PopularNumber int `json:"popular_number"`
JockeyWeight string `json:"jockey_weight"`
HorseWeight int `json:"horse_weight"`
HorseWeightAdd int `json:"horse_weight_add"`
}

type Condition struct {
Odds *Odds `json:"odds"`
ConditionNote string `json:"condition_note"`
}

// type Jockey struct {
// JockeyId string `json:"jockey_id"`
// JockeyName string `json:"jockey_name"`
// }

type Odds struct {
OddsList []string `json:"odds_list"`
RaceIds []string `json:"race_ids"`
OddsNote string `json:"odds_note"`
}

// type RaceUrl struct {
// Url string `json:"url"`
// Note string `json:"note"`
// }

// type RaceTime struct {
// }
Loading