Просмотр исходного кода

조회수 기능 일단 추가

https://github.com/openNAMU/openNAMU/issues/2324
잉여개발기 1 год назад
Родитель
Сommit
def9b0fc98

+ 1 - 0
app.py

@@ -783,6 +783,7 @@ app.route('/api/v2/bbs/w/comment/<int:bbs_num>/<int:post_num>/<tool>')(api_bbs_w
 app.route('/api/v2/doc_star_doc/<int:num>/<everything:name>', defaults = { 'do_type' : 'star_doc' })(api_w_watch_list)
 app.route('/api/v2/doc_watch_list/<int:num>/<everything:name>')(api_w_watch_list)
 app.route('/api/v2/set_reset/<everything:name>')(api_w_set_reset)
+app.route('/api/v2/page_view/<everything:name>')(api_w_page_view)
 
 app.route('/api/v2/setting/<name>', methods = ['GET', 'PUT'])(api_setting)
 

+ 1 - 0
lang/en-US.json

@@ -38,6 +38,7 @@
     "vote_management_authority" : "Vote management authority",
     "bbs_management_authority" : "BBS management authority",
     "discuss_view_authority" : "Discussion view authority",
+    "page_view" : "Page views",
 
     "_comment_" : "Common",
     "data" : "Data",

+ 2 - 1
lang/ko-KR.json

@@ -684,5 +684,6 @@
     "auth_to_auth" : "권한 그룹에서 권한 그룹으로",
     "vote_management_authority" : "투표 관리 권한",
     "bbs_management_authority" : "BBS 관리 권한",
-    "discuss_view_authority" : "토론 보기 권한"
+    "discuss_view_authority" : "토론 보기 권한",
+    "page_view" : "조회수"
 }

+ 1 - 0
route/__init__.py

@@ -220,5 +220,6 @@ from route.go_api_w_xref import api_w_xref
 from route.go_api_w_watch_list import api_w_watch_list
 from route.go_api_w_render import api_w_render
 from route.go_api_w_set_reset import api_w_set_reset
+from route.go_api_w_page_view import api_w_page_view
 
 from route.go_main_func_easter_egg import main_func_easter_egg

+ 7 - 0
route/go_api_w_page_view.py

@@ -0,0 +1,7 @@
+from .tool.func import *
+
+async def api_w_page_view(name = 'Test'):
+    other_set = {}
+    other_set["doc_name"] = name
+
+    return flask.Response(response = (await python_to_golang(sys._getframe().f_code.co_name, other_set)), status = 200, mimetype = 'application/json')

+ 1 - 1
route/tool/func.py

@@ -1230,7 +1230,7 @@ def skin_check(conn, set_n = 0):
         return skin
     
 def cache_v():
-    return '.cache_v270'
+    return '.cache_v271'
 
 def wiki_css(data):
     with class_temp_db() as m_conn:

+ 6 - 2
route/view_w.py

@@ -180,7 +180,7 @@ def view_w(name = 'Test', do_type = ''):
             <div id="opennamu_preview_area">
                 <textarea id="opennamu_editor_doc_name" style="display: none;">''' + html.escape(name) + '''</textarea>
                 <script defer src="/views/main_css/js/route/w.js''' + cache_v() + '''"></script>
-                <script>window.addEventListener("DOMContentLoaded", function() { opennamu_w("''' + ('from' if do_type == 'from' else '') + '''"); });</script>
+                <script>window.addEventListener("DOMContentLoaded", function() { opennamu_w("''' + ('from' if do_type == 'from' else '') + '''"); opennamu_w_page_view(); });</script>
             </div>
         '''
 
@@ -303,6 +303,10 @@ def view_w(name = 'Test', do_type = ''):
         r_date = curs.fetchall()
         r_date = r_date[0][0] if r_date else 0
 
+        curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'view_count'"), [name])
+        view_count = curs.fetchall()
+        view_count = view_count[0][0] if view_count else 0
+
         div = file_data + user_doc + end_data + category_total
         
         if doc_type == '':
@@ -338,7 +342,7 @@ def view_w(name = 'Test', do_type = ''):
         menu += [['doc_watch_list/1/' + url_pas(name), get_lang(conn, 'watchlist')]]
 
         return easy_minify(conn, flask.render_template(skin_check(conn),
-            imp = [name_view, wiki_set(conn), wiki_custom(conn), wiki_css([sub, r_date, watch_list, description])],
+            imp = [name_view, wiki_set(conn), wiki_custom(conn), wiki_css([sub, r_date, watch_list, description, view_count])],
             data = div,
             menu = menu
         )), response_data

BIN
route_go/bin/main.amd64.bin


BIN
route_go/bin/main.amd64.exe


BIN
route_go/bin/main.arm64.bin


BIN
route_go/bin/main.arm64.exe


+ 1 - 1
route_go/go.mod

@@ -9,6 +9,7 @@ require (
 	github.com/dlclark/regexp2 v1.11.0
 	github.com/go-sql-driver/mysql v1.8.1
 	github.com/google/generative-ai-go v0.11.0
+	github.com/json-iterator/go v1.1.12
 	github.com/yuin/goldmark v1.7.1
 	google.golang.org/api v0.175.0
 	modernc.org/sqlite v1.29.8
@@ -33,7 +34,6 @@ require (
 	github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
 	github.com/googleapis/gax-go/v2 v2.12.3 // indirect
 	github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect

+ 2 - 0
route_go/main.go

@@ -93,6 +93,8 @@ func main() {
 		route_data = route.Api_give_auth_patch(call_arg[1:])
 	} else if call_arg[0] == "api_list_auth" {
 		route_data = route.Api_list_auth(call_arg[1:])
+	} else if call_arg[0] == "api_w_page_view" {
+		route_data = route.Api_w_page_view(call_arg[1:])
 	} else {
 		log.Fatal(call_arg[0] + " is 404")
 	}

+ 69 - 0
route_go/route/api_w_page_view.go

@@ -0,0 +1,69 @@
+package route
+
+import (
+	"database/sql"
+	"log"
+	"opennamu/route/tool"
+	"strconv"
+
+	jsoniter "github.com/json-iterator/go"
+)
+
+func Api_w_page_view(call_arg []string) string {
+	var json = jsoniter.ConfigCompatibleWithStandardLibrary
+
+	other_set := map[string]string{}
+	json.Unmarshal([]byte(call_arg[0]), &other_set)
+
+	db := tool.DB_connect()
+	defer db.Close()
+
+	stmt, err := db.Prepare(tool.DB_change("select set_data from data_set where doc_name = ? and set_name = 'view_count'"))
+	if err != nil {
+		log.Fatal(err)
+	}
+	defer stmt.Close()
+
+	var view_count string
+
+	err = stmt.QueryRow(other_set["doc_name"]).Scan(&view_count)
+	if err != nil {
+		if err == sql.ErrNoRows {
+			view_count = "0"
+		} else {
+			log.Fatal(err)
+		}
+	}
+
+	if view_count == "0" {
+		stmt, err := db.Prepare(tool.DB_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'view_count', '1')"))
+		if err != nil {
+			log.Fatal(err)
+		}
+		defer stmt.Close()
+
+		_, err = stmt.Exec(other_set["doc_name"])
+		if err != nil {
+			log.Fatal(err)
+		}
+	} else {
+		view_count_int, _ := strconv.Atoi(view_count)
+
+		stmt, err := db.Prepare(tool.DB_change("update data_set set set_data = ? where doc_name = ? and set_name = 'view_count'"))
+		if err != nil {
+			log.Fatal(err)
+		}
+		defer stmt.Close()
+
+		_, err = stmt.Exec(view_count_int+1, other_set["doc_name"])
+		if err != nil {
+			log.Fatal(err)
+		}
+	}
+
+	return_data := make(map[string]interface{})
+	return_data["response"] = "ok"
+
+	json_data, _ := json.Marshal(return_data)
+	return string(json_data)
+}

+ 1 - 1
route_go/route/api_w_raw.go

@@ -86,7 +86,7 @@ func Api_w_raw(call_arg []string) string {
 				check_pass = true
 			}
 
-			if check_pass == true {
+			if check_pass {
 				new_data["title"] = other_set["name"]
 				new_data["data"] = data
 

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.5.0-v169",
+        "r_ver" : "v3.5.0-v170",
         "c_ver" : "20240513",
         "s_ver" : "20240426"
     }

+ 9 - 0
views/main_css/js/route/w.js

@@ -13,4 +13,13 @@ function opennamu_w(do_type = '') {
             opennamu_do_render('opennamu_preview_area', data["data"], name, do_type);
         }
     });
+}
+
+function opennamu_w_page_view() {
+    let name = "test";
+    if(document.getElementById('opennamu_editor_doc_name')) {
+        name = opennamu_xss_filter_decode(document.getElementById('opennamu_editor_doc_name').innerHTML);
+    }
+
+    fetch("/api/v2/page_view/" + opennamu_do_url_encode(name));
 }

+ 1 - 1
views/ringo/index.html

@@ -193,7 +193,7 @@
                         {% endif %}
                     </h1>
                     {% if imp[3][1] != 0 %}
-                        {{'last_edit_time'|load_lang}} : {{imp[3][1]}}
+                        {{'last_edit_time'|load_lang}} : {{imp[3][1]}} | {{'page_view'|load_lang}} : {{imp[3][7]}}
                     {% endif %}
                     {% if menu != 0 %}
                         <div id="menu">