圖片中以:

"綠匡" >> 代表component元件

"藍匡" >> 代表需要依賴data的元素(目前沒有涵蓋頁面內隱藏Modal所用的資料)


  1. 註冊頁 - SignUp (path: '/signup')

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/db9d070a-8339-4061-8d28-a6ecfaf7cf11/1.png


    1. data:

    2. components:


    3. apis:

      // sign up
      POST('api/signup', payLoad)
      	payLoad: {
      		account, // 使用者帳號
      		name, // 使用者名稱
      		email, // 使用者email
      		password, // 使用者密碼
      		passwordCheck // 使用者密碼確認
      	}
      

  2. 個人資料設定 - Setting (path: '/setting')

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/407dea65-b96a-4f2d-bad9-2be4f01c0be7/2.png


    1. data:

      currentUser: {
      account, // 當前使用者帳號
      name, // 當前使用者名稱
      email // 當前使用者email
      }
      
    2. components:

      |

      Navbar.vue — Tweeting.vue

      |

      PageHead.vue


    3. apis:

      // setting
      PUT(`api/users/${userId}`, payLoad)
      	payLoad: {
      		account, // 使用者帳號
      		name, // 使用者名稱
      		email, // 使用者email
      		password, // 使用者密碼
      		passwordCheck // 使用者密碼確認
      	}
      

  3. 前台登入頁 - SignIn (path: '/signin' , '/')

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a8f817d6-ae72-4def-84ee-582e2d65d54a/3.png


    1. data:

    2. components:


    3. apis:

      // sign in
      POST('api/signin', payLoad)
      	payLoad: {
      		account, // 使用者帳號
      		password // 使用者密碼
      	}
      	response.data: {
          token, // 憑證
          user: {
              id, // 使用者id
              name, // 使用者名稱
      				account, // 使用者帳號
      				email, // 使用者email
      				avatar, // 使用者照片
      				role // 使用者角色
        }
      

  4. 首頁 tweets 總表- Tweets (path: '/tweets')

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3aec0bd9-684d-471b-aa3e-16a6ad9c2fc3/4.png


    1. data:

      tweets: [ // 主推文串
      	{
      		id, // 迴圈用key值, 連結用tweet.id
      		description, // 推文內容
      		likesNumber, // 推文like數
      		repliesNumber, // 推文回復數
      		createdAt, // 推文發布時間
      		isLiked, // 是否按過like
      		User: { 
      			id, // 連結用user.id
      			name, // 推主名稱
      			account, // 推主帳號
      			avatar // 推主照片
      		}
      	},
      	{},{},{}...
      ],
      final_tweet_id, // 當前推文串最後一個tweet.id
      final_recommendation_id, // 當前推薦欄位最後一個user.id
      currentUser: {..., avatar}, // 當前使用者照片
      recommendation: [ // 推薦使用者
      	{
      		id, // 迴圈用key值
      		name, // 使用者名稱
      		avatar, // 使用者照片
      		account, // 使用者帳號
      		isFollowed // 是否追蹤中
      	},
      	{},{},{}...
      ]
      
    2. components:

      |

      Navbar.vue — Tweeting.vue

      |

      Recommendation.vue

      |

      PageHead.vue

      |

      NewTweet.vue

      |

      TweetCard.vue — Replying.vue


    3. apis:

      // 取得主推文串
      GET('api/tweets?final_tweet_id=') // 若為空值就從頭開始撈,否則從final_tweet_id的下一個開始
      	response.data: {
          tweets: [
      			{
      				id, // 迴圈用key值, 連結用tweet.id
      				description, // 推文內容
      				likesNumber, // 推文like數
      				repliesNumber, // 推文回復數
      				createdAt, // 推文發布時間
      				isLiked, // 是否按過like
      				User: { 
      					id, // 連結用user.id
      					name, // 推主名稱
      					account, // 推主帳號
      					avatar // 推主照片
      				}
      			},
      			{},{},{}...
      		]
        }
      
      // 取得推薦名單
      GET('api/users/recommendation?final_recommendation_id=') // 若為空值就從頭開始撈,否則從final_recommendation_id的下一個開始
      	response.data: {
      		users: [
      			{
      				id, // 使用者id
      				name, // 使用者名稱
      				avatar, // 使用者照片
      				account, // 使用者帳號
      				isFollowed // 是否追蹤中
      			},
      			{},{},{}...
      		]
      	}
      
      // 新增推文
      POST('api/tweets', payLoad)
      	payLoad: {
      		userId, // 當前使用者id
      		description // 推文內容
      	}
      
      // 新增回覆
      POST(`api/tweets/${tweetId}/replies`, payLoad)
      	payLoad: {
      		userId, // 當前使用者id
      		comment // 回覆內容
      	}
      
      // 追蹤使用者
      POST(`api/followings/${userId}`, null)
      // 退追使用者
      DELETE(`api/followings/${userId}`)
      
      // 推文按讚
      POST(`api/like/${tweetId}`, null)
      // 推文收回讚
      DELETE(`api/like/${tweetId}`)
      

  5. 單一 tweet 詳情頁 - Tweet (path: '/tweets/:id')

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a7dca3b3-159c-4b15-a832-2f295797c402/5.png


    1. data:

      tweet: { // 推文
      	id, // 回報,檢舉用(?
      	description, // 推文內容
      	likesNumber, // 推文like數
      	repliesNumber, // 推文回覆數
      	createdAt, // 推文發布時間
      	isLiked, // 是否按過like
      	User: { // 推主資料
      		id, // 連結用user.id
      		name, // 推主名稱
      		account, // 推主帳號
      		avatar, // 推主照片
      	},
      	Replies: [ //推文回覆串
      		{
      			id, // 迴圈用key值
      			comment, // 回覆內容
      			createdAt, // 回覆發布時間
      			User: { // 回覆者資料
      				id, // 連結用user.id
      				name, // 回覆者名稱
      				account, // 回覆者帳號
      				avatar // 回覆者照片
      			}
      		},
      		{},{},{}...
      	],
      	final_reply_id, // 當前留言最後一個reply.id
      	final_recommendation_id, // 當前推薦欄位最後一個user.id
      	recommendation: [ // 推薦使用者
      		{
      			id, // 迴圈用key值
      			name, // 使用者名稱
      			avatar, // 使用者照片
      			account, // 使用者帳號
      			isFollowed // 是否追蹤中
      		},
      		{},{},{}...
      	]
      
    2. components:

      |

      Navbar.vue — Tweeting.vue

      |

      Recommendation.vue

      |

      PageHead.vue

      |

      TweetExtend.vue — Replying.vue

      |

      ReplyCard.vue


    3. apis:

      // 取得單一推文滋資料
      GET(`api/tweets/${tweetId}`)
      	response.data: {
      		tweet: { // 推文
      		id, // 回報,檢舉用(?
      		description, // 推文內容
      		likesNumber, // 推文like數
      		repliesNumber, // 推文回覆數
      		createdAt, // 推文發布時間
      		isLiked, // 是否按過like
      		User: { // 推主資料
      			id, // 連結用user.id
      			name, // 推主名稱
      			account, // 推主帳號
      			avatar, // 推主照片
      		},
      		Replies: [ //推文回覆串
      			{
      				id, // 迴圈用key值
      				comment, // 回覆內容
      				createdAt, // 回覆發布時間
      				User: { // 回覆者資料
      					id, // 連結用user.id
      					name, // 回覆者名稱
      					account, // 回覆者帳號
      					avatar // 回覆者照片
      				}
      			},
      			{},{},{}...
      		]
        }
      
      // 取得推薦名單
      GET('api/users/recommendation?final_recommendation_id=') // 若為空值就從頭開始撈,否則從final_recommendation_id的下一個開始
      	response.data: {
      		users: [
      			{
      				id, // 使用者id
      				name, // 使用者名稱
      				avatar, // 使用者照片
      				account, // 使用者帳號
      				isFollowed // 是否追蹤中
      			},
      			{},{},{}...
      		]
      	}
      
      // 新增推文
      POST('api/tweets', payLoad)
      	payLoad: {
      		userId, // 當前使用者id
      		description // 推文內容
      	}
      
      // 新增回覆
      POST(`api/tweets/${tweetId}/replies`, payLoad)
      	payLoad: {
      		userId, // 當前使用者id
      		comment // 回覆內容
      	}
      
      // 追蹤使用者
      POST(`api/followings/${userId}`, null)
      // 退追使用者
      DELETE(`api/followings/${userId}`)
      
      // 推文按讚
      POST(`api/like/${tweetId}`, null)
      // 推文收回讚
      DELETE(`api/like/${tweetId}`)
      

  6. 新增 tweet - Tweeting

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e437c61-4bd5-434e-97b0-16f1c0c72dce/6.png


    1. data:

      ...
      currentUser: {
      	...,
      	avatar: '' // 當前使用者照片
      }
      
    2. components:

      |

      Tweeting.vue


    3. apis:

      // 新增推文
      POST('api/tweets', payLoad)
      	payLoad: {
      		userId, // 當前使用者id
      		description // 推文內容
      	}
      

  7. 回覆 - Replying

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e66b6fb3-0c86-41ba-a810-eca0071145de/7.png

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/013161fa-0534-4f52-ab9e-bed12b577fd8/8.png


    1. data:

      ...
      tweet: { // 回覆中的推文
      	id, // 
      	description, // 推文內容
      	createdAt, // 推文發佈時間
      	User: { // 推主資料
      		id, // 推主連結用user.id
      		name, // 推主名稱
      		avatar, // 推主照片
      		account, // 推主帳號
      	}
      }
      currentUser: {
      	...,
      	avatar // 當前使用者照片
      }
      
    2. components:

      |

      Replying.vue


    3. apis:

      // 新增回覆
      POST(`api/tweets/${tweetId}/replies`, payLoad)
      	payLoad: {
      		userId, // 當前使用者id
      		comment // 回覆內容
      	}
      

  8. 自己的 user profile (推文清單) - UserTweets (path: '/users/:id/tweets' , '/users/:id')

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cc22d536-a17c-408f-8c67-26cc4349d8ea/9.png


    1. data:

      user: { // 使用者資料
      	id, // 使用者id
      	name, // 使用者名稱
      	account, // 使用者帳號
      	email, // 使用者email
      	tweetsNumber, // 使用者推文數
      	avatar, // 使用者照片
      	cover, // 使用者封面照片
      	introduction, // 使用者簡介
      	followingsNumber, // 使用者追蹤數
      	followersNumber, // 使用者跟隨數
      	isFollowed, // 是否追蹤中
      	isNotified, // 是否訂閱
      	tweets: [ // 使用者推文串
      		{
      			id, // 迴圈用key值
      			description, // 推文內容
      			likesNumber, // 推文like數
      			repliesNumber, // 推文回覆數
      			isLiked, // 是否按過like
      			createdAt, // 推文發布時間
      			User: { // 推主資料(這邊的資料其實是自己)
      				id, // 推主連結用user.id
      				name, // 推主名稱
      				account, // 推主帳號
      				avatar, // 推主照片
      			}
      		},
      		{},{},{}...
      	]
      },
      final_tweet_id, // 當前推文串最後一個tweet.id
      final_recommendation_id, // 當前推薦欄位最後一個user.id
      recommendation: [ // 推薦使用者
      	{
      		id, // 迴圈用key值
      		name, // 使用者名稱
      		avatar, // 使用者照片
      		account, // 使用者帳號
      		isFollowed // 是否追蹤中
      	},
      	{},{},{}...
      ]