1 /*
2 * Copyright 2012-2025 CodeLibs Project and the Others.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13 * either express or implied. See the License for the specific language
14 * governing permissions and limitations under the License.
15 */
16 package org.codelibs.fess.app.web.api.admin.suggest;
17
18 import org.codelibs.fess.app.web.api.ApiResult;
19 import org.codelibs.fess.app.web.api.admin.FessApiAdminAction;
20 import org.codelibs.fess.helper.SuggestHelper;
21 import org.lastaflute.web.Execute;
22 import org.lastaflute.web.response.JsonResponse;
23
24 import jakarta.annotation.Resource;
25
26 /**
27 * API action for admin suggest management.
28 */
29 public class ApiAdminSuggestAction extends FessApiAdminAction {
30
31 // ===================================================================================
32 // Constructor
33 // ===========
34 /**
35 * Default constructor.
36 */
37 public ApiAdminSuggestAction() {
38 super();
39 }
40
41 // ===================================================================================
42 // Attribute
43 // =========
44 /** The suggest helper for managing suggest functionality. */
45 @Resource
46 protected SuggestHelper suggestHelper;
47
48 /**
49 * Retrieves suggest statistics including word counts.
50 *
51 * @return JSON response containing suggest statistics
52 */
53 // GET /api/admin/suggest
54 @Execute
55 public JsonResponse<ApiResult> get$index() {
56 final SuggestBody body = new SuggestBody();
57 body.totalWordsNum = suggestHelper.getAllWordsNum();
58 body.documentWordsNum = suggestHelper.getDocumentWordsNum();
59 body.queryWordsNum = suggestHelper.getQueryWordsNum();
60 return asJson(new ApiResult.ApiConfigResponse().setting(body).status(ApiResult.Status.OK).result());
61 }
62
63 /**
64 * Deletes all suggest words from the system.
65 *
66 * @return JSON response indicating success or failure
67 */
68 // DELETE /api/admin/suggest/all
69 @Execute
70 public JsonResponse<ApiResult> delete$all() {
71 if (!suggestHelper.deleteAllWords()) {
72 throwValidationErrorApi(messages -> messages.addErrorsFailedToDeleteDocInAdmin(GLOBAL));
73 }
74 return asJson(new ApiResult.ApiResponse().status(ApiResult.Status.OK).result());
75 }
76
77 /**
78 * Deletes document-related suggest words.
79 *
80 * @return JSON response indicating success or failure
81 */
82 // DELETE /api/admin/suggest/document
83 @Execute
84 public JsonResponse<ApiResult> delete$document() {
85 if (!suggestHelper.deleteDocumentWords()) {
86 throwValidationErrorApi(messages -> messages.addErrorsFailedToDeleteDocInAdmin(GLOBAL));
87 }
88 return asJson(new ApiResult.ApiResponse().status(ApiResult.Status.OK).result());
89 }
90
91 /**
92 * Deletes query-related suggest words.
93 *
94 * @return JSON response indicating success or failure
95 */
96 // DELETE /api/admin/suggest/query
97 @Execute
98 public JsonResponse<ApiResult> delete$query() {
99 if (!suggestHelper.deleteQueryWords()) {
100 throwValidationErrorApi(messages -> messages.addErrorsFailedToDeleteDocInAdmin(GLOBAL));
101 }
102 return asJson(new ApiResult.ApiResponse().status(ApiResult.Status.OK).result());
103 }
104 }