Skip to content

Commit a36cb58

Browse files
Merge pull request #15 from su-its/feat/backend/api/seed
Feat/backend/api/seed
2 parents 87aebc5 + c68e5d5 commit a36cb58

File tree

21 files changed

+412
-1328
lines changed

21 files changed

+412
-1328
lines changed

typing-app/docs/get-started.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# 開発環境構築
2+
3+
## 1. リポジトリのクローン
4+
5+
```bash
6+
$ git clone https://github.com/su-its/typing.git
7+
$ cd typing/typing-app
8+
```
9+
10+
## 2. パッケージのインストール(npm ではなく bun を採用しています)
11+
12+
### Bun をインストールする (まだインストールしていない場合)
13+
14+
```bash
15+
$ curl -fsSL https://bun.sh/install | bash
16+
```
17+
18+
### プロジェクトの依存パッケージをインストール(typing-app ディレクトリで実行)
19+
20+
```bash
21+
$ bun install
22+
```
23+
24+
## 3. API & DB の起動(typing-server ディレクトリで実行)
25+
26+
```bash
27+
$ docker-compose --file docker-compose.dev.yml up --build
28+
```
29+
30+
## 4. フロントエンドの起動(typing-app ディレクトリで実行)
31+
32+
```bash
33+
$ bun dev
34+
```

typing-server/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ RUN go mod download
1414
RUN CGO_ENABLED=0 GOOS=linux go build -v -o server ./api/cmd/main.go
1515

1616
# 実行イメージ
17-
FROM alpine:latest
17+
FROM alpine:latest
1818
RUN apk --no-cache add ca-certificates
1919

2020
# tzdataパッケージのインストール
@@ -26,4 +26,4 @@ WORKDIR /root
2626
COPY --from=builder /app/server .
2727

2828
# アプリケーションの実行
29-
CMD ["./server"]
29+
CMD ["./server","-seed","false"]

typing-server/Dockerfile.dev

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# 基本イメージ
2+
FROM golang:1.22.0 as builder
3+
4+
# 作業ディレクトリを設定
5+
WORKDIR /app
6+
7+
# ソースコードをコピー
8+
COPY . .
9+
10+
# 依存関係をインストール
11+
RUN go mod download
12+
13+
# アプリケーションをビルド
14+
RUN CGO_ENABLED=0 GOOS=linux go build -v -o server ./api/cmd/main.go
15+
16+
# 実行イメージ
17+
FROM alpine:latest
18+
RUN apk --no-cache add ca-certificates
19+
20+
# tzdataパッケージのインストール
21+
RUN apk --no-cache add tzdata
22+
23+
WORKDIR /root
24+
25+
# ビルドしたバイナリをコピー
26+
COPY --from=builder /app/server .
27+
28+
# アプリケーションの実行
29+
CMD ["./server","-seed","true"]

typing-server/api/cmd/main.go

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ package main
22

33
import (
44
"context"
5+
"flag"
6+
"fmt"
57
"log/slog"
8+
"math/rand"
69
"net/http"
710
"os"
811
"os/signal"
@@ -11,11 +14,14 @@ import (
1114
"time"
1215

1316
"github.com/go-sql-driver/mysql"
14-
"github.com/su-its/typing/typing-server/api/presenter"
1517
"github.com/su-its/typing/typing-server/domain/repository/ent"
18+
"github.com/su-its/typing/typing-server/domain/repository/ent/user"
1619
)
1720

1821
func main() {
22+
seedFlag := flag.Bool("seed", false, "シードデータを挿入する場合はtrueを指定")
23+
flag.Parse()
24+
1925
logger := slog.Default()
2026

2127
// タイムゾーンの設定
@@ -57,8 +63,16 @@ func main() {
5763
}
5864
logger.Info("schema is created")
5965

60-
// ルートの登録
61-
presenter.RegisterRoutes()
66+
// シードデータの挿入
67+
if *seedFlag {
68+
if err := seedData(context.Background(), entClient); err != nil {
69+
logger.Error("failed to seed data: %v", err)
70+
return
71+
}
72+
logger.Info("シードデータが挿入されました")
73+
} else {
74+
logger.Info("シードデータは挿入されませんでした")
75+
}
6276

6377
// WaitGroupの宣言
6478
var wg sync.WaitGroup
@@ -100,3 +114,43 @@ func main() {
100114
close(errChan)
101115
logger.Info("server exited")
102116
}
117+
118+
// TODO: 本番環境では削除する
119+
func seedData(ctx context.Context, client *ent.Client) error {
120+
// シードデータの作成
121+
for i := 0; i < 10; i++ {
122+
isAlreadySeeded, err := client.User.Query().Where(user.StudentNumber(fmt.Sprintf("user%d", i+1))).Exist(ctx)
123+
if err != nil {
124+
return err
125+
}
126+
if isAlreadySeeded {
127+
continue
128+
}
129+
130+
u, err := client.User.Create().
131+
SetStudentNumber(fmt.Sprintf("user%d", i+1)).
132+
SetHandleName(fmt.Sprintf("handle%d", i+1)).
133+
Save(ctx)
134+
if err != nil {
135+
panic(err)
136+
}
137+
138+
for j := 0; j < 5; j++ {
139+
score, err := client.Score.Create().
140+
SetKeystrokes(rand.Intn(200)).
141+
SetAccuracy(rand.Float64()).
142+
SetCreatedAt(time.Now()).
143+
Save(ctx)
144+
if err != nil {
145+
panic(err)
146+
}
147+
148+
_, err = client.User.UpdateOne(u).
149+
AddScores(score).Save(ctx)
150+
if err != nil {
151+
panic(err)
152+
}
153+
}
154+
}
155+
return nil
156+
}

typing-server/docker-compose.dev.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ services:
55
condition: service_healthy
66
build:
77
context: .
8-
dockerfile: Dockerfile
8+
dockerfile: Dockerfile.dev
99
volumes:
1010
- ./api:/app
1111
environment:
@@ -14,9 +14,9 @@ services:
1414
- "8080:8080"
1515
networks:
1616
app_net:
17-
ipv4_address: '172.28.1.3'
17+
ipv4_address: "172.28.1.3"
1818
extra_hosts:
19-
- 'db:172.28.1.5'
19+
- "db:172.28.1.5"
2020
db:
2121
healthcheck:
2222
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
@@ -36,7 +36,7 @@ services:
3636
- db-data:/var/lib/mysql
3737
networks:
3838
app_net:
39-
ipv4_address: '172.28.1.5'
39+
ipv4_address: "172.28.1.5"
4040
volumes:
4141
db-data:
4242
networks:

typing-server/domain/repository/ent/migrate/schema.go

Lines changed: 3 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)