diff --git a/pkg/api/api.go b/pkg/api/api.go index a2ab756..8a722aa 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -81,6 +81,7 @@ func NewAPI(config Config) (*API, error) { apiMux.HandleFunc("/prepare_file_stream_direct", api.HandlePrepareFileStreamDirect) apiMux.HandleFunc("/delete_file", api.HandleDeleteFile) apiMux.HandleFunc("/update_filename", api.HandleUpdateFilename) + apiMux.HandleFunc("/reset_filename", api.HandleResetFilename) // feedback apiMux.HandleFunc("/feedback", api.HandleFeedback) apiMux.HandleFunc("/get_feedbacks", api.HandleGetFeedbacks) diff --git a/pkg/api/handle_manage_file.go b/pkg/api/handle_manage_file.go index 88a2faa..0b6b011 100644 --- a/pkg/api/handle_manage_file.go +++ b/pkg/api/handle_manage_file.go @@ -66,3 +66,33 @@ func (api *API) HandleUpdateFilename(w http.ResponseWriter, r *http.Request) { api.HandleOK(w, r) } + +type ResetFilenameRequest struct { + ID int64 `json:"id"` +} + +func (api *API) HandleResetFilename(w http.ResponseWriter, r *http.Request) { + // check admin + err := api.CheckAdmin(w, r) + if err != nil { + api.HandleError(w, r, err) + return + } + + req := &ResetFilenameRequest{} + err = json.NewDecoder(r.Body).Decode(req) + if err != nil { + api.HandleError(w, r, err) + return + } + + log.Println("[api] reset filename", req.ID) + + err = api.Db.ResetFilename(req.ID) + if err != nil { + api.HandleError(w, r, err) + return + } + + api.HandleOK(w, r) +} diff --git a/pkg/database/method.go b/pkg/database/method.go index dfa1cec..98afea7 100644 --- a/pkg/database/method.go +++ b/pkg/database/method.go @@ -372,3 +372,14 @@ func (database *Database) UpdateFilename(fileId int64, filename string) error { } return nil } + +func (database *Database) ResetFilename(fileId int64) error { + database.singleThreadLock.Lock() + defer database.singleThreadLock.Unlock() + + _, err := database.stmt.resetFilename.Exec(fileId) + if err != nil { + return err + } + return nil +} diff --git a/pkg/database/sql_stmt.go b/pkg/database/sql_stmt.go index 195cab5..64cd313 100644 --- a/pkg/database/sql_stmt.go +++ b/pkg/database/sql_stmt.go @@ -277,6 +277,8 @@ var deleteFileReferenceInReviewsQuery = `DELETE FROM reviews WHERE file_id = ?;` var updateFilenameQuery = `UPDATE files SET filename = ? WHERE id = ?;` +var resetFilenameQuery = `UPDATE files SET filename = realname WHERE id = ?;` + type Stmt struct { initFilesTable *sql.Stmt initFoldersTable *sql.Stmt @@ -336,6 +338,7 @@ type Stmt struct { deleteFileReferenceInFileHasTag *sql.Stmt deleteFileReferenceInReviews *sql.Stmt updateFilename *sql.Stmt + resetFilename *sql.Stmt } func NewPreparedStatement(sqlConn *sql.DB) (*Stmt, error) { @@ -757,5 +760,11 @@ func NewPreparedStatement(sqlConn *sql.DB) (*Stmt, error) { return nil, err } + // init resetFilename + stmt.resetFilename, err = sqlConn.Prepare(resetFilenameQuery) + if err != nil { + return nil, err + } + return stmt, err } diff --git a/web/src/component/FileInfo.js b/web/src/component/FileInfo.js index be1eabc..8912ac3 100644 --- a/web/src/component/FileInfo.js +++ b/web/src/component/FileInfo.js @@ -133,6 +133,26 @@ function FileInfo(props) { }); } + function resetFilename() { + fetch(`/api/v1/reset_filename`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + id: parseInt(params.id), + }), + }) + .then((res) => res.json()) + .then((data) => { + if (data.error) { + alert(data.error); + } else { + refresh(); + } + }); + } + useEffect(() => { refresh(); getTags(); @@ -199,7 +219,10 @@ function FileInfo(props) { - +