1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.api.admin.user;
17
18 import static org.codelibs.fess.app.web.admin.user.AdminUserAction.getUser;
19
20 import java.util.List;
21 import java.util.stream.Collectors;
22
23 import javax.annotation.Resource;
24
25 import org.codelibs.fess.app.pager.UserPager;
26 import org.codelibs.fess.app.service.UserService;
27 import org.codelibs.fess.app.web.CrudMode;
28 import org.codelibs.fess.app.web.api.ApiResult;
29 import org.codelibs.fess.app.web.api.admin.FessApiAdminAction;
30 import org.codelibs.fess.es.user.exentity.User;
31 import org.lastaflute.web.Execute;
32 import org.lastaflute.web.response.JsonResponse;
33
34 public class ApiAdminUserAction extends FessApiAdminAction {
35
36 @Resource
37 private UserService userService;
38
39
40
41 @Execute
42 public JsonResponse<ApiResult> settings(final SearchBody body) {
43 validateApi(body, messages -> {});
44 final UserPager pager = copyBeanToNewBean(body, UserPager.class);
45 final List<User> list = userService.getUserList(pager);
46 return asJson(new ApiResult.ApiConfigsResponse<EditBody>()
47 .settings(list.stream().map(entity -> createEditBody(entity)).collect(Collectors.toList()))
48 .total(pager.getAllRecordCount()).status(ApiResult.Status.OK).result());
49 }
50
51
52 @Execute
53 public JsonResponse<ApiResult> get$setting(final String id) {
54 return asJson(new ApiResult.ApiConfigResponse()
55 .setting(userService.getUser(id).map(entity -> createEditBody(entity)).orElseGet(() -> {
56 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
57 return null;
58 })).status(ApiResult.Status.OK).result());
59 }
60
61
62 @Execute
63 public JsonResponse<ApiResult> put$setting(final CreateBody body) {
64 validateApi(body, messages -> {});
65 body.crudMode = CrudMode.CREATE;
66 final User entity = getUser(body).orElseGet(() -> {
67 throwValidationErrorApi(messages -> {
68 messages.addErrorsCrudFailedToCreateInstance(GLOBAL);
69 });
70 return null;
71 });
72 try {
73 userService.store(entity);
74 saveInfo(messages -> messages.addSuccessCrudCreateCrudTable(GLOBAL));
75 } catch (final Exception e) {
76 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL, buildThrowableMessage(e)));
77 }
78 return asJson(new ApiResult.ApiUpdateResponse().id(entity.getId()).created(true).status(ApiResult.Status.OK).result());
79 }
80
81
82 @Execute
83 public JsonResponse<ApiResult> post$setting(final EditBody body) {
84 validateApi(body, messages -> {});
85 body.crudMode = CrudMode.EDIT;
86 final User entity = getUser(body).orElseGet(() -> {
87 throwValidationErrorApi(messages -> {
88 messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, body.id);
89 });
90 return null;
91 });
92 try {
93 userService.store(entity);
94 } catch (final Exception e) {
95 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e)));
96 }
97 return asJson(new ApiResult.ApiUpdateResponse().id(entity.getId()).created(false).status(ApiResult.Status.OK).result());
98 }
99
100
101 @Execute
102 public JsonResponse<ApiResult> delete$setting(final String id) {
103 final User entity = userService.getUser(id).orElseGet(() -> {
104 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
105 return null;
106 });
107 getUserBean().ifPresent(u -> {
108 if (u.getFessUser() instanceof User && entity.getName().equals(u.getUserId())) {
109 throwValidationErrorApi(messages -> messages.addErrorsCouldNotDeleteLoggedInUser(GLOBAL));
110 }
111 });
112 try {
113 userService.delete(entity);
114 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
115 } catch (final Exception e) {
116 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)));
117 }
118 return asJson(new ApiResult.ApiUpdateResponse().id(id).created(false).status(ApiResult.Status.OK).result());
119 }
120
121 protected EditBody createEditBody(final User entity) {
122 final EditBody body = new EditBody();
123 copyBeanToBean(entity, body, copyOp -> {
124 copyOp.excludeNull();
125 });
126 body.password = null;
127 body.confirmPassword = null;
128 return body;
129 }
130 }