Funcy-ICT / Funcy-ICT/Funcy_Portfolio_Backend

[fix]SelectWorksByTagの不要なJOIN削除とセキュリティフィルタ追加

Open Beginner friendly
#157 0 comments 0 reactions 0 assignees View on GitHub
good first issue
Dominant language
Go
Stars
1
Forks
0
PR merge metrics
No merged PRs in 30d

Description

# タグ検索機能のバグ修正

## 機能概要
作品をタグで検索する機能に2つの問題があります:
1. 不要なデータベース操作(work_imagesテーブルのJOIN)がある
2. 非公開の作品も検索結果に表示されてしまう

## Taskリスト
- [ ] work_imagesテーブルの不要なJOINを削除する
- [ ] WHERE句に works.security = 1 のセキュリティフィルタを追加する
- [ ] SQLクエリを読みやすく整形する

## Doneの定義
- [ ] backend/app/infrastructure/work.go の63-75行目が修正されている
- [ ] 不要な INNER JOIN work_images が削除されている
- [ ] WHERE句に AND works.security = 1 が追加されている

## 参考リンク
- 修正対象: backend/app/infrastructure/work.go (63-75行目)
- 参考: 同ファイルの SelectWorks 関数 (50-61行目) - 正しい実装例

## 留意事項
- この関数は現在フロントエンドで使用されていないが、将来的にタグ検索機能が実装される予定
- SelectWorks 関数では WHERE works.security = 1 でフィルタしているが、この関数では欠けている

## 検討事項
- SQLの可読性向上のため、バッククォート(`)を使った複数行形式への変更を推奨

---

### 📝 修正内容

**ファイル:** backend/app/infrastructure/work.go
**関数:** SelectWorksByTag (63-75行目)

**修正前(67行目のSQL):**

"SELECT works.id, works.title, works.description, works.thumbnail, works.security, users.icon FROM works INNER JOIN work_images ON works.id = work_images.work_id INNER JOIN work_tags ON works.id = work_tags.work_id INNER JOIN users ON works.user_id = users.id WHERE work_tags.tag=? ORDER BY works.created_at DESC LIMIT ?"

**修正後(67行目のSQL):**

`SELECT
works.id, works.title, works.description, works.thumbnail, works.security, users.icon
FROM works
INNER JOIN work_tags ON works.id = work_tags.work_id
INNER JOIN users ON works.user_id = users.id
WHERE work_tags.tag = ? AND works.security = 1
ORDER BY works.created_at DESC
LIMIT ?`

**変更点:**
- ❌ 削除: INNER JOIN work_images ON works.id = work_images.work_id
- ✅ 追加: AND works.security = 1
- ✅ 改善: SQLを複数行に整形して可読性向上

Contributor guide

No contributing guide indexed for this repository

Research direction

Open backend/app/infrastructure/work.go and compare SelectWorksByTag at lines 63-75 with SelectWorks at lines 50-61. Remove the work_images JOIN, add the works.security = 1 filter, and reformat the SQL as shown; done means the specified query no longer joins work_images and excludes non-public works.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, mysql
Domain
backend, databases
Issue type
Bug
Difficulty
1/5
Estimated time
Under an hour
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.