diff --git a/backend/app/controllers/posts_controller.rb b/backend/app/controllers/posts_controller.rb
index de2c9fd..990bd89 100644
--- a/backend/app/controllers/posts_controller.rb
+++ b/backend/app/controllers/posts_controller.rb
@@ -36,9 +36,6 @@ class PostsController < ApplicationController
# POST /posts
def create
- logger.info ">>> thumbnail: #{params[:thumbnail]&.content_type}"
-logger.info ">>> filename: #{params[:thumbnail]&.original_filename}"
-
return head :unauthorized unless current_user
return head :forbidden unless ['admin', 'member'].include?(current_user.role)
diff --git a/backend/app/controllers/wiki_pages_controller.rb b/backend/app/controllers/wiki_pages_controller.rb
index 619eee7..477fa83 100644
--- a/backend/app/controllers/wiki_pages_controller.rb
+++ b/backend/app/controllers/wiki_pages_controller.rb
@@ -1,6 +1,5 @@
class WikiPagesController < ApplicationController
def show
- p params
wiki_page = WikiPage.find_by(title: params[:title])
if wiki_page
render plain: wiki_page.markdown
@@ -9,15 +8,26 @@ class WikiPagesController < ApplicationController
end
end
- def update
+ def create
return head :unauthorized unless current_user
- title = params[:title]
- wiki_page = WikiPage.find_by(title: title)
- unless wiki_page
- wiki_page = WikiPage.new(title: title, created_user: current_user, updated_user: current_user)
+ wiki_page = WikiPage.new(title: params[:title], tag_id: params[:tag_id], created_user: current_user, updated_user: current_user)
+ wiki_page.markdown = params[:markdown], user: current_user
+ if wiki_page.save
+ render json: wiki_page, status: :created
+ else
+ render json: { errors: wiki_page.errors.full_messages }, status: :unprocessable_entity
end
- wiki_page.markdown = params[:markdown]
+ end
+
+ def update
+ return head :unauthorized unless current_user
+
+ wiki_page = WikiPage.find(params[:id])
+ return head :not_found unless wiki_pages
+
+ wiki_page.updated_user = current_user
+ wiki_page.markdown = params[:markdown], user: current_user
wiki_page.save!
head :ok
end
diff --git a/backend/app/models/wiki_page.rb b/backend/app/models/wiki_page.rb
index e270dec..2722238 100644
--- a/backend/app/models/wiki_page.rb
+++ b/backend/app/models/wiki_page.rb
@@ -2,33 +2,36 @@ require 'gollum-lib'
class WikiPage < ApplicationRecord
- WIKI_PATH = Rails.root.join('wiki').to_s
-
belongs_to :tag, optional: true
belongs_to :created_user, class_name: 'User', foreign_key: 'created_user_id'
belongs_to :updated_user, class_name: 'User', foreign_key: 'updated_user_id'
validates :title, presence: true, length: { maximum: 255 }, uniqueness: true
- def markdown
- wiki = Gollum::Wiki.new(WIKI_PATH)
- page = wiki.page(title)
+ def body
+ page = wiki.page("#{ id }.md")
page&.raw_data
end
- def markdown= content
- wiki = Gollum::Wiki.new(WIKI_PATH)
-
- page = wiki.page(title)
+ def body= content, user:
+ page = wiki.page("#{ id }.md")
commit_info = { message: "Update #{ title }",
- name: current_user.id,
+ name: user.id,
email: 'dummy@example.com' }
if page
page.update(content, commit: commit_info)
else
- wiki.write_page(title, :markdown, content, commit_info)
+ wiki.write_page("#{ id }.md", :markdown, content, commit_info)
end
end
+
+ private
+
+ WIKI_PATH = Rails.root.join('wiki').to_s
+
+ def wiki
+ @wiki ||= Gollum::Wiki.new(WIKI_PATH)
+ end
end
diff --git a/backend/config/routes.rb b/backend/config/routes.rb
index cfd3433..4640fb9 100644
--- a/backend/config/routes.rb
+++ b/backend/config/routes.rb
@@ -20,8 +20,9 @@ Rails.application.routes.draw do
delete 'posts/:id/viewed', to: 'posts#unviewed'
get 'preview/title', to: 'preview#title'
get 'preview/thumbnail', to: 'preview#thumbnail'
- get 'wiki/*title', to: 'wiki_pages#show', format: false
- post 'wiki/*title', to: 'wiki_pages#save', format: false
+ get 'wiki/:title', to: 'wiki_pages#show'
+ post 'wiki', to: 'wiki_pages#create'
+ put 'wiki/:id', to: 'wiki_pages#update'
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 2bd7754..649c409 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -1,14 +1,16 @@
import React, { useEffect, useState } from 'react'
import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom'
-import HomePage from './pages/HomePage'
-import TagPage from './pages/TagPage'
-import TopNav from './components/TopNav'
-import TagSidebar from './components/TagSidebar'
-import PostPage from './pages/PostPage'
-import PostNewPage from './pages/PostNewPage'
-import PostDetailPage from './pages/PostDetailPage'
-import WikiShowPage from './pages/WikiShowPage'
-import { API_BASE_URL } from './config'
+import HomePage from '@/pages/HomePage'
+import TagPage from '@/pages/TagPage'
+import TopNav from '@/components/TopNav'
+import TagSidebar from '@/components/TagSidebar'
+import PostPage from '@/pages/PostPage'
+import PostNewPage from '@/pages/PostNewPage'
+import PostDetailPage from '@/pages/PostDetailPage'
+import WikiPage from '@/pages/WikiPage'
+import WikiNewPage from '@/pages/WikiNewPage'
+import WikiDetailPage from '@/pages/WikiDetailPage'
+import { API_BASE_URL } from '@/config'
import axios from 'axios'
import { Toaster } from '@/components/ui/toaster'
import { camelizeKeys } from 'humps'
@@ -81,7 +83,10 @@ const App = () => {
} />
} />
} />
- } />
+ } />
+ } />
+ } />
+ {/* } /> */}
diff --git a/frontend/src/components/TopNav.tsx b/frontend/src/components/TopNav.tsx
index 01ce35a..83e1468 100644
--- a/frontend/src/components/TopNav.tsx
+++ b/frontend/src/components/TopNav.tsx
@@ -1,5 +1,5 @@
-import React, { useState, useEffect } from "react"
-import { Link, useLocation } from 'react-router-dom'
+import React, { useState, useEffect } from 'react'
+import { Link, useLocation, useParams } from 'react-router-dom'
import SettingsDialogue from './SettingsDialogue'
import { Button } from './ui/button'
import clsx from 'clsx'
@@ -25,9 +25,12 @@ const TopNav: React.FC = ({ user, setUser }: Props) => {
const [settingsVisible, setSettingsVisible] = useState (false)
const [selectedMenu, setSelectedMenu] = useState