@@ -14,6 +14,8 @@ import (
14
14
"time"
15
15
16
16
"github.com/go-sql-driver/mysql"
17
+ "github.com/su-its/typing/typing-server/api/handler"
18
+ "github.com/su-its/typing/typing-server/api/router"
17
19
"github.com/su-its/typing/typing-server/domain/repository/ent"
18
20
"github.com/su-its/typing/typing-server/domain/repository/ent/user"
19
21
)
@@ -54,6 +56,7 @@ func main() {
54
56
return
55
57
}
56
58
defer entClient .Close ()
59
+ handler .SetEntClient (entClient )
57
60
logger .Info ("ent client is opened" )
58
61
59
62
// スキーマの作成
@@ -65,7 +68,7 @@ func main() {
65
68
66
69
// シードデータの挿入
67
70
if * seedFlag {
68
- if err := seedData (context .Background (), entClient ); err != nil {
71
+ if err := seedData (context .Background (), entClient , logger ); err != nil {
69
72
logger .Error ("failed to seed data: %v" , err )
70
73
return
71
74
}
@@ -86,7 +89,14 @@ func main() {
86
89
go func () {
87
90
defer wg .Done () // 関数終了時にWaitGroupをデクリメント
88
91
// サーバーの設定
89
- server := & http.Server {Addr : ":8080" }
92
+ // ルーティングの設定
93
+ r := router .SetupRouter ()
94
+
95
+ // サーバーの設定
96
+ server := & http.Server {
97
+ Addr : ":8080" ,
98
+ Handler : r ,
99
+ }
90
100
// 非同期でサーバーを開始
91
101
go func () {
92
102
logger .Info ("server is running at Addr :8080" )
@@ -115,42 +125,77 @@ func main() {
115
125
logger .Info ("server exited" )
116
126
}
117
127
118
- // TODO: 本番環境では削除する
119
- func seedData (ctx context.Context , client * ent.Client ) error {
128
+ func seedData (ctx context.Context , client * ent.Client , logger * slog.Logger ) error {
120
129
// シードデータの作成
121
130
for i := 0 ; i < 10 ; i ++ {
122
- isAlreadySeeded , err := client .User .Query ().Where (user .StudentNumber (fmt .Sprintf ("user%d" , i + 1 ))).Exist (ctx )
131
+ studentNumber := fmt .Sprintf ("user%d" , i + 1 )
132
+ handleName := fmt .Sprintf ("handle%d" , i + 1 )
133
+
134
+ isAlreadySeeded , err := client .User .Query ().Where (user .StudentNumber (studentNumber )).Exist (ctx )
123
135
if err != nil {
124
136
return err
125
137
}
126
138
if isAlreadySeeded {
139
+ logger .Info ("User with student number already seeded, skipping" , slog .String ("studentNumber" , studentNumber ))
127
140
continue
128
141
}
129
142
130
143
u , err := client .User .Create ().
131
- SetStudentNumber (fmt . Sprintf ( "user%d" , i + 1 ) ).
132
- SetHandleName (fmt . Sprintf ( "handle%d" , i + 1 ) ).
144
+ SetStudentNumber (studentNumber ).
145
+ SetHandleName (handleName ).
133
146
Save (ctx )
134
147
if err != nil {
135
148
panic (err )
136
149
}
137
150
151
+ logger .Info ("Created user" , slog .String ("studentNumber" , studentNumber ), slog .String ("handleName" , handleName ))
152
+
153
+ var maxKeystrokesScore , maxAccuracyScore * ent.Score
154
+
138
155
for j := 0 ; j < 5 ; j ++ {
139
- score , err := client .Score .Create ().
140
- SetKeystrokes (rand .Intn (200 )).
141
- SetAccuracy (rand .Float64 ()).
156
+ keystrokes := rand .Intn (200 ) + 100
157
+ accuracy := rand .Float64 ()
158
+
159
+ s , err := client .Score .Create ().
160
+ SetKeystrokes (keystrokes ).
161
+ SetAccuracy (accuracy ).
142
162
SetCreatedAt (time .Now ()).
163
+ SetUser (u ).
143
164
Save (ctx )
144
165
if err != nil {
145
166
panic (err )
146
167
}
147
168
148
- _ , err = client .User .UpdateOne (u ).
149
- AddScores (score ).Save (ctx )
169
+ logger .Info ("Created score" , slog .Int ("keystrokes" , keystrokes ), slog .Float64 ("accuracy" , accuracy ), slog .String ("studentNumber" , studentNumber ))
170
+
171
+ if s .Keystrokes < 120 || s .Accuracy < 0.95 {
172
+ continue
173
+ }
174
+
175
+ if maxKeystrokesScore == nil || s .Keystrokes > maxKeystrokesScore .Keystrokes {
176
+ maxKeystrokesScore = s
177
+ }
178
+ if maxAccuracyScore == nil || s .Accuracy > maxAccuracyScore .Accuracy {
179
+ maxAccuracyScore = s
180
+ }
181
+ }
182
+
183
+ // 最大のKeystrokesスコアと最大のAccuracyスコアのフラグを設定
184
+ if maxKeystrokesScore != nil {
185
+ err = maxKeystrokesScore .Update ().SetIsMaxKeystrokes (true ).Exec (ctx )
150
186
if err != nil {
151
- panic ( err )
187
+ return err
152
188
}
189
+ logger .Info ("Set is_max_keystrokes flag" , slog .Int ("keystrokes" , maxKeystrokesScore .Keystrokes ), slog .String ("studentNumber" , studentNumber ))
190
+ }
191
+ if maxAccuracyScore != nil {
192
+ err = maxAccuracyScore .Update ().SetIsMaxAccuracy (true ).Exec (ctx )
193
+ if err != nil {
194
+ return err
195
+ }
196
+ logger .Info ("Set is_max_accuracy flag" , slog .Float64 ("accuracy" , maxAccuracyScore .Accuracy ), slog .String ("studentNumber" , studentNumber ))
153
197
}
154
198
}
199
+
155
200
return nil
156
201
}
0 commit comments