Funcy-ICT / Funcy-ICT/Funcy_Portfolio_Backend
[fix] 空配列時のINSERTエラー対策
- 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.