blog.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import Vue from 'vue'
  2. function separateBlogs(blogs) {
  3. const published = []
  4. const drafts = []
  5. blogs.forEach(blog => {
  6. blog.status === 'active' ? drafts.push(blog) : published.push(blog)
  7. })
  8. return {published, drafts}
  9. }
  10. export const state = () => ({
  11. items: {
  12. drafts: [],
  13. published: []
  14. },
  15. item: {},
  16. isSaving: false
  17. })
  18. export const actions = {
  19. async createBlog({commit}, blogData) {
  20. commit('setIsSaving', true)
  21. console.log('instructor/blog.js actions createBlog call axios.$post->blogData')
  22. const blog = await this.$axios.$post('/api/v1/blogs', blogData)
  23. if(blog.isAxiosError === true){
  24. commit('setIsSaving', false)
  25. console.log(blog.data)
  26. return Error('')
  27. }
  28. console.log('instructor/blog.js actions createBlog done axios.$post->blogData')
  29. commit('setIsSaving', false)
  30. return blog
  31. },
  32. async fetchBlogById({commit}, blogId) {
  33. console.log('instructor/blog.js actions fetchBlogById call axios.$get->blogId')
  34. const blog = await this.$axios.$get(`/api/v1/blogs/${blogId}`)
  35. if(blog.isAxiosError === true){
  36. console.log(blog.data)
  37. return Error('')
  38. }
  39. console.log('instructor/blog.js actions fetchBlogById done axios.$get->blogId')
  40. console.log('courses.js mutations call setBlog')
  41. commit('setBlog', blog)
  42. console.log('courses.js mutations done setBlog')
  43. },
  44. async fetchUserBlogs({commit, state}) {
  45. const blogs = await this.$axios.$get('/api/v1/blogs/me')
  46. if(blogs.isAxiosError === true){
  47. console.log(blog.data)
  48. return Error('')
  49. }
  50. const { published, drafts } = separateBlogs(blogs)
  51. commit('setBlogs', {resource: 'drafts', items: drafts})
  52. commit('setBlogs', {resource: 'published', items: published})
  53. return { published, drafts }
  54. },
  55. async deleteBlog({commit, state}, blog) {
  56. const resource = blog.status === 'active' ? 'drafts' : 'published'
  57. const result = this.$axios.$delete(`/api/v1/blogs/${blog._id}`)
  58. if(result.isAxiosError === true){
  59. console.log(result.data)
  60. return Error('')
  61. }
  62. const index = state.items[resource].findIndex((b) => b._id === blog._id )
  63. commit('deleteBlog', {resource, index})
  64. return true
  65. },
  66. async updatePublishedBlog({commit, state}, {id, data}) {
  67. const blog = await this.$axios.$patch(`/api/v1/blogs/${id}`, data)
  68. if(blog.isAxiosError === true){
  69. console.log(blog.data)
  70. return Error('')
  71. }
  72. const index = state.items['published'].findIndex(b => b._id === id)
  73. commit('setPublishedBlog', {index, blog})
  74. return blog
  75. },
  76. async updateBlog({commit, state}, {data, id}) {
  77. console.log('instructor/blog.js actions updateBlog call axios.$patch-> Id, data')
  78. const blog = await this.$axios.$patch(`/api/v1/blogs/${id}`, data)
  79. if(blog.isAxiosError === true){
  80. console.log(blog.data)
  81. return blog
  82. }
  83. console.log('instructor/blog.js actions updateBlog done axios.$patch-> Id, data')
  84. console.log('courses.js mutations call setBlog')
  85. commit('setBlog', blog)
  86. console.log('courses.js mutations done setBlog')
  87. return state.item
  88. }
  89. }
  90. export const mutations = {
  91. setBlog(state, blog) {
  92. state.item = blog
  93. },
  94. setPublishedBlog(state, {index, blog}) {
  95. // Vue는 배열에 대해 다음과 같은 변경 사항을 감지할 수 없습니다.
  96. // 인덱스로 배열에 있는 항목을 직접 설정하는 경우, 예: vm.items[indexOfItem] = newValue
  97. // 배열 길이를 수정하는 경우, 예: vm.items.length = newLength
  98. Vue.set(state.items.published, index, blog)
  99. },
  100. setBlogs(state, {resource, items}) {
  101. state.items[resource] = items
  102. },
  103. deleteBlog(state, {resource, index}) {
  104. state.items[resource].splice(index, 1)
  105. },
  106. setIsSaving(state, isSaving) {
  107. state.isSaving = isSaving
  108. }
  109. }