Funcy-ICT / Funcy-ICT/Funcy_Portfolio_Backend

[fix] 空配列時のINSERTエラー対策

Open
#158 0 comments 0 reactions 1 assignee Claimed by @yousuke43 View on GitHub
good first issue
Dominant language
Go
Stars
1
Forks
0
PR merge metrics
No merged PRs in 30d

Description

# 空配列時のINSERTエラー対策

## 機能概要
画像・タグ・SNS・スキルなどが空配列の場合、NamedExec でエラーが発生する問題を修正します。
ユーザーが任意項目を入力しない場合でも正常に動作するようにします。

## Taskリスト
- [ ] InsertWork 関数に空配列チェックを追加(images, tags)
- [ ] UpdateWork 関数に空配列チェックを追加(images, tags)
- [ ] UpdateUserinfo 関数に空配列チェックを追加(skills, sns)

## Doneの定義
- [ ] 全ての対象関数で len() チェックが実装されている
- [ ] 空配列の場合はINSERT処理をスキップするようになっている

## 参考リンク
- 修正対象ファイル:
- backend/app/infrastructure/work.go (32-43行目, 181-193行目)
- backend/app/infrastructure/userinfo.go (213-234行目)

## 留意事項
- **現在発生しているバグ**: ユーザーがタグや画像を入力せずに作品投稿すると失敗する
- **影響範囲**: 作品投稿・更新、プロフィール更新の全機能

## 検討事項
- 空配列の場合はINSERTをスキップするのが適切(データベースに空レコードを作らない)

---

### 📝 修正内容

#### 修正1: InsertWork 関数(32-43行目)

**ファイル:** backend/app/infrastructure/work.go

**修正前(32-43行目):**

_, err = tx.NamedExec(`INSERT INTO work_images (id,work_id,image_url) VALUES (:id,:work_id,:image_url)`,
*images)
if err != nil {
tx.Rollback()
return err
}
_, err = tx.NamedExec("INSERT INTO `work_tags` (id,work_id,tag) VALUES (:id,:work_id,:tag)",
*tags)
if err != nil {
tx.Rollback()
return err
}

**修正後:**

// 画像がある場合のみINSERT
if len(*images) > 0 {
_, err = tx.NamedExec(`INSERT INTO work_images (id,work_id,image_url) VALUES (:id,:work_id,:image_url)`,
*images)
if err != nil {
tx.Rollback()
return err
}
}

// タグがある場合のみINSERT
if len(*tags) > 0 {
_, err = tx.NamedExec("INSERT INTO work_tags (id,work_id,tag) VALUES (:id,:work_id,:tag)",
*tags)
if err != nil {
tx.Rollback()
return err
}
}

---

#### 修正2: UpdateWork 関数(181-193行目)

**ファイル:** backend/app/infrastructure/work.go

**修正前(181-193行目):**

_, err = tx.NamedExec(`INSERT INTO work_images (id,work_id,image_url) VALUES (:id,:work_id,:image_url)`,
*images)
if err != nil {
tx.Rollback()
return err
}

_, err = tx.NamedExec("INSERT INTO work_tags (id,work_id,tag) VALUES (:id,:work_id,:tag)",
*tags)
if err != nil {
tx.Rollback()
return err
}

**修正後:**

// 画像がある場合のみINSERT
if len(*images) > 0 {
_, err = tx.NamedExec(`INSERT INTO work_images (id,work_id,image_url) VALUES (:id,:work_id,:image_url)`,
*images)
if err != nil {
tx.Rollback()
return err
}
}

// タグがある場合のみINSERT
if len(*tags) > 0 {
_, err = tx.NamedExec("INSERT INTO work_tags (id,work_id,tag) VALUES (:id,:work_id,:tag)",
*tags)
if err != nil {
tx.Rollback()
return err
}
}

---

#### 修正3: UpdateUserinfo 関数(213-234行目)

**ファイル:** backend/app/infrastructure/userinfo.go

**修正前(213-234行目):**

// skills
for _, skill := range *userinfo.Skills {
_, err := tx.NamedExec(
"INSERT INTO skills (skill_name, user_id) VALUES (:skill_name, :user_id);",
skill,
)
if err != nil {
tx.Rollback()
return err
}
}

// sns
for _, sns := range *userinfo.SNS {
_, err := tx.NamedExec(
"INSERT INTO sns (user_id, sns) VALUES (:user_id, :sns);",
sns,
)
if err != nil {
tx.Rollback()
return err
}
}

**修正後:**

// スキルがある場合のみINSERT
if len(*userinfo.Skills) > 0 {
for _, skill := range *userinfo.Skills {
_, err := tx.NamedExec(
"INSERT INTO skills (skill_name, user_id) VALUES (:skill_name, :user_id);",
skill,
)
if err != nil {
tx.Rollback()
return err
}
}
}

// SNSがある場合のみINSERT
if len(*userinfo.SNS) > 0 {
for _, sns := range *userinfo.SNS {
_, err := tx.NamedExec(
"INSERT INTO sns (user_id, sns) VALUES (:user_id, :sns);",
sns,
)
if err != nil {
tx.Rollback()
return err
}
}
}

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.