---
# System prepended metadata

title: Fake Imgur

---

Fake Imgur
==========

# 需求
如果沒特別說明，都用 Blade （Server-side rendering）

## 首頁
- 除了管理後台，前台所有頁面要共用navbar
- 沒登入：隨機顯示 10 則 Post（圖片、作者、瀏覽數、讚數、留言數）
- 有登入：根據追蹤的 tag 挑選最新 10 則 Post

navbar 會有這些元素：
- 網站LOGO，點下去回首頁
- （沒登入）登入
- （沒登入）註冊
- （有登入）新增貼文的連結
- （有登入）通知清單的連結
- （有登入）登出
- （有登入、俱備管理員身份）管理後台的連結

## 註冊
註冊步驟：
1. 註冊表單有帳號、密碼、recaptcha
2. 驗證 email
3. 列出 n 個 tag，讓使用者挑選有興趣的追蹤
4. 跳轉回首頁

## 登入
帳號+密碼
登入要有 log

## 『新貼文』
- navbar 上的『新貼文』按鈕只有在 user 沒有被 ban 的時候才會顯示
- 進來本頁面時也要重複上面的檢查
- 可以上傳一張圖片
- 可以對圖片增加description
- 可新增自訂且當下不存在的 tag，但最多 3 個

儲存時，除了本來的 incremental id，還要產生 unique post slug
要有log

儲存後跳轉到貼文檢視頁

模擬未來需求：一則貼文下會有多則圖片（請你在DB設計預留空間，但我不會要你實作這功能）

## 貼文檢視頁
- 每次進來都增加瀏覽數

有登入的話出現下列功能：
- 點讚 / 取消讚（AJAX）
- 留言（AJAX）

## 貼文管理
- 可以更新圖片的 description
- 更新是否為成人內容（checkbox，勾選後只有在使用者在自己的設定頁面開啟成人內容時才能看到這些內容）
- 更新是否為私有內容（checkbox，勾選後不會出現在首頁）
- 刪除 Post

如果是私有內容，多出一個產生 signed url 的功能，用來私下分享貼文
從這種連結進入貼文時，不要求登入

## tag檢視頁
- 顯示post總數
- post牆（顯示此 tag 下的 post）

## 管理後台
當一般使用者被賦予admin身份就能進來
我需要一個 command，它需要給定一個 user id，第一次執行賦予該使用者admin身份，再次執行取消身份

### 功能
- 刪除 post
- 刪除留言
- ban user

上面操作都要有 log
log格式：
```
admin(admin-id) ban user(user-id)
```

## 通知
- 當發文時通知每一個 tag 的追蹤者，可善加利用 job/queue/event/notification
- 如何通知：只要增加使用者的『未讀通知數』，並且讓他點進去通知清單時看得到『通知文字』即可

## 每日最新貼文
- 每天凌晨寄信給所有用戶，給他們最高3則、本日新增的貼文，讚數最高的優先，可善加利用 job/queue/horizon
