1 package io.extact.rms.external.webapi;
2
3 import java.time.LocalDate;
4 import java.time.LocalDateTime;
5 import java.util.List;
6
7 import jakarta.validation.Valid;
8 import jakarta.validation.constraints.NotNull;
9 import jakarta.ws.rs.Consumes;
10 import jakarta.ws.rs.DELETE;
11 import jakarta.ws.rs.GET;
12 import jakarta.ws.rs.POST;
13 import jakarta.ws.rs.PUT;
14 import jakarta.ws.rs.Path;
15 import jakarta.ws.rs.PathParam;
16 import jakarta.ws.rs.Produces;
17 import jakarta.ws.rs.QueryParam;
18 import jakarta.ws.rs.core.MediaType;
19
20 import org.eclipse.microprofile.openapi.annotations.Operation;
21 import org.eclipse.microprofile.openapi.annotations.enums.ParameterIn;
22 import org.eclipse.microprofile.openapi.annotations.enums.SchemaType;
23 import org.eclipse.microprofile.openapi.annotations.media.Content;
24 import org.eclipse.microprofile.openapi.annotations.media.Schema;
25 import org.eclipse.microprofile.openapi.annotations.parameters.Parameter;
26 import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;
27 import org.eclipse.microprofile.openapi.annotations.security.SecurityRequirement;
28 import org.eclipse.microprofile.openapi.annotations.tags.Tag;
29
30 import io.extact.rms.application.domain.constraint.LoginId;
31 import io.extact.rms.application.domain.constraint.Passowrd;
32 import io.extact.rms.application.domain.constraint.RmsId;
33 import io.extact.rms.external.webapi.dto.AddRentalItemDto;
34 import io.extact.rms.external.webapi.dto.AddReservationDto;
35 import io.extact.rms.external.webapi.dto.AddUserAccountDto;
36 import io.extact.rms.external.webapi.dto.LoginDto;
37 import io.extact.rms.external.webapi.dto.RentalItemResourceDto;
38 import io.extact.rms.external.webapi.dto.ReservationResourceDto;
39 import io.extact.rms.external.webapi.dto.UserAccountResourceDto;
40
41
42
43
44
45
46
47 public interface WebApiSpec {
48
49
50 public static final String ADMIN_ROLE = "ADMIN";
51 public static final String MEMBER_ROLE = "MEMBER";
52
53 @GET
54 @Path("/login")
55 @Produces(MediaType.APPLICATION_JSON)
56 @Tag(name = "Authenticate")
57 @Operation(operationId = "authenticateForTest", summary = "ユーザ認証を行う(curlのテスト用)", description = "ログイン名とパスワードに一致するユーザを取得する")
58 @Parameter(name = "loginId", description = "ログインId", required = true, schema = @Schema(implementation = String.class, minLength = 5, maxLength = 10))
59 @Parameter(name = "password", description = "パスワード", required = true, schema = @Schema(implementation = String.class, minLength = 5, maxLength = 10))
60 @APIResponse(responseCode = "200", description = "認証成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserAccountResourceDto.class)))
61 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
62 @APIResponse(responseCode = "404", ref = "#/components/responses/NotFound")
63 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
64 UserAccountResourceDto authenticate(
65 @LoginId @QueryParam("loginId") String loginId,
66 @Passowrd @QueryParam("password") String password);
67
68 @POST
69 @Path("/login")
70 @Consumes(MediaType.APPLICATION_JSON)
71 @Produces(MediaType.APPLICATION_JSON)
72 @Tag(name = "Authenticate")
73 @Operation(operationId = "authenticate", summary = "ユーザ認証を行う", description = "ログイン名とパスワードに一致するユーザを取得する")
74 @Parameter(name = "loginDto", description = "ログインIDとパスワード", required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = LoginDto.class)))
75 @APIResponse(responseCode = "200", description = "認証成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserAccountResourceDto.class)))
76 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
77 @APIResponse(responseCode = "404", ref = "#/components/responses/NotFound")
78 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
79 UserAccountResourceDto authenticate(@Valid LoginDto loginDto);
80
81 @GET
82 @Path("/reservations/item/{itemId}/startdate/{startDate}")
83 @Produces(MediaType.APPLICATION_JSON)
84 @Tag(name = "Member")
85 @Operation(operationId = "findReservationByRentalItemAndStartDate", summary = "指定されたレンタル品と利用開始日で予約を検索する", description = "指定されたレンタル品と利用開始日に一致する予約を検索する")
86 @SecurityRequirement(name = "RmsJwtAuth")
87 @Parameter(name = "itemId", description = "レンタル品ID", in = ParameterIn.PATH, required = true)
88 @Parameter(name = "startDate", description = "利用開始日", in = ParameterIn.PATH, required = true, schema = @Schema(implementation = String.class, example = "20201230", format = "yyyyMMdd"))
89 @APIResponse(responseCode = "200", description = "検索結果", content = @Content(mediaType = "application/json", schema = @Schema(type = SchemaType.ARRAY, implementation = ReservationResourceDto.class)))
90 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
91 @APIResponse(responseCode = "404", ref = "#/components/responses/NotFound")
92 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
93 List<ReservationResourceDto> findReservationByRentalItemAndStartDate(
94 @RmsId @PathParam("itemId") Integer itemId,
95 @NotNull @PathParam("startDate") LocalDate startDate);
96
97 @GET
98 @Path("/reservations/reserver/{reserverId}")
99 @Produces(MediaType.APPLICATION_JSON)
100 @Tag(name = "Member")
101 @Operation(operationId = "findReservationByReserverId", summary = "指定されたユーザが予約者の予約を検索する", description = "指定されたユーザが予約者の予約を検索する")
102 @SecurityRequirement(name = "RmsJwtAuth")
103 @Parameter(name = "reserverId", description = "ユーザID", in = ParameterIn.PATH, required = true)
104 @APIResponse(responseCode = "200", description = "検索結果", content = @Content(mediaType = "application/json", schema = @Schema(type = SchemaType.ARRAY, implementation = ReservationResourceDto.class)))
105 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
106 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
107 List<ReservationResourceDto> findReservationByReserverId(
108 @RmsId @PathParam("reserverId") Integer reserverId);
109
110 @GET
111 @Path("/reservations/own")
112 @Produces(MediaType.APPLICATION_JSON)
113 @Tag(name = "Member")
114 @Operation(operationId = "getOwnReservations", summary = "自分の予約一覧を取得する", description = "ログインユーザが予約者となっている予約の一覧を取得する。このAPIは/reservations/reserver/{reserverId}のエイリアスとなっている")
115 @SecurityRequirement(name = "RmsJwtAuth")
116 @APIResponse(responseCode = "200", description = "検索結果", content = @Content(mediaType = "application/json", schema = @Schema(type = SchemaType.ARRAY, implementation = ReservationResourceDto.class)))
117 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
118 List<ReservationResourceDto> getOwnReservations();
119
120 @GET
121 @Path("/items")
122 @Produces(MediaType.APPLICATION_JSON)
123 @Tag(name = "Member")
124 @Tag(name = "Admin")
125 @Operation(operationId = "getAllRentalItems", summary = "レンタル品の全件を取得する", description = "登録されているすべてのレンタル品を取得する")
126 @SecurityRequirement(name = "RmsJwtAuth")
127 @APIResponse(responseCode = "200", description = "検索結果", content = @Content(mediaType = "application/json", schema = @Schema(type = SchemaType.ARRAY, implementation = RentalItemResourceDto.class)))
128 List<RentalItemResourceDto> getAllRentalItems();
129
130 @POST
131 @Path("/reservations")
132 @Consumes(MediaType.APPLICATION_JSON)
133 @Produces(MediaType.APPLICATION_JSON)
134 @Tag(name = "Member")
135 @Operation(operationId = "addReservation", summary = "レンタル品を予約する", description = "予約対象のレンタル品が存在しない場合は404を予定期間に別の予約が既に入っている場合は409を返す")
136 @SecurityRequirement(name = "RmsJwtAuth")
137 @Parameter(name = "dto", description = "登録内容", required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = AddReservationDto.class)))
138 @APIResponse(responseCode = "200", description = "登録成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ReservationResourceDto.class)))
139 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
140 @APIResponse(responseCode = "404", ref = "#/components/responses/UnknownData")
141 @APIResponse(responseCode = "409", ref = "#/components/responses/DataDupricate")
142 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
143 ReservationResourceDto addReservation(@Valid AddReservationDto dto);
144
145 @DELETE
146 @Path("/reservations/own/{reservationId}")
147 @Tag(name = "Member")
148 @Operation(operationId = "cancelReservation", summary = "予約をキャンセルする", description = "依頼された予約IDに対する予約をキャンセルする。予約のキャンセルは予約した人しか行えない。"
149 + "他の人が予約キャンセルを行った場合は禁止操作としてエラーにする")
150 @SecurityRequirement(name = "RmsJwtAuth")
151 @Parameter(name = "reservationId", description = "予約ID", in = ParameterIn.PATH, required = true)
152 @APIResponse(responseCode = "200", description = "登録成功")
153 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
154 @APIResponse(responseCode = "403", ref = "#/components/responses/Forbidden")
155 @APIResponse(responseCode = "404", ref = "#/components/responses/UnknownData")
156 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
157 void cancelReservation(@RmsId @PathParam("reservationId") Integer reservationId);
158
159
160 @GET
161 @Path("/reservations/item/{rentalItemId}")
162 @Produces(MediaType.APPLICATION_JSON)
163 @Tag(name = "Member")
164 @Operation(operationId = "findReservationByRentalItemId", summary = "指定されたレンタル品に対する予約を検索する", description = "指定されたレンタル品に対する予約を検索する")
165 @SecurityRequirement(name = "RmsJwtAuth")
166 @Parameter(name = "rentalItemId", description = "レンタル品ID", in = ParameterIn.PATH, required = true)
167 @APIResponse(responseCode = "200", description = "検索結果", content = @Content(mediaType = "application/json", schema = @Schema(type = SchemaType.ARRAY, implementation = ReservationResourceDto.class)))
168 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
169 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
170 List<ReservationResourceDto> findReservationByRentalItemId(@RmsId @PathParam("rentalItemId") Integer rentalItemId);
171
172
173 @GET
174 @Path("/items/rentable")
175 @Produces(MediaType.APPLICATION_JSON)
176 @Tag(name = "Member")
177 @Operation(operationId = "findCanRentedItemAtTerm", summary = "該当期間に予約可能なレンタル品を検索する", description = "該当期間に予約可能なレンタル品を検索する")
178 @SecurityRequirement(name = "RmsJwtAuth")
179 @Parameter(name = "from", description = "利用開始日時", in = ParameterIn.QUERY, required = true, schema = @Schema(ref = "#/components/schemas/localDateTime"))
180 @Parameter(name = "to", description = "利用開始日時", in = ParameterIn.QUERY, required = true, schema = @Schema(ref = "#/components/schemas/localDateTime"))
181 @APIResponse(responseCode = "200", description = "検索結果", content = @Content(mediaType = "application/json", schema = @Schema(type = SchemaType.ARRAY, implementation = RentalItemResourceDto.class)))
182 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
183 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
184 List<RentalItemResourceDto> findCanRentedItemAtTerm(@NotNull @QueryParam("from") LocalDateTime from, @NotNull @QueryParam("to") LocalDateTime to);
185
186
187 @GET
188 @Path("/items/{rentalItemId}/rentable")
189 @Produces(MediaType.APPLICATION_JSON)
190 @Tag(name = "Member")
191 @Operation(operationId = "canRentedItemAtTerm", summary = "レンタル品が該当期間に予約可能かを返す", description = "レンタル品が該当期間に予約可能かを返す")
192 @SecurityRequirement(name = "RmsJwtAuth")
193 @Parameter(name = "rentalItemId", description = "レンタル品ID", in = ParameterIn.PATH, required = true)
194 @Parameter(name = "from", description = "利用開始日時", in = ParameterIn.QUERY, required = true, schema = @Schema(ref = "#/components/schemas/localDateTime"))
195 @Parameter(name = "to", description = "利用開始日時", in = ParameterIn.QUERY, required = true, schema = @Schema(ref = "#/components/schemas/localDateTime"))
196 @APIResponse(responseCode = "200", description = "trueならレンタル可", content = @Content(mediaType = "application/json", schema = @Schema(type = SchemaType.BOOLEAN, implementation = Boolean.class)))
197 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
198 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
199 boolean canRentedItemAtTerm(@RmsId @PathParam("rentalItemId") Integer rentalItemId, @NotNull @QueryParam("from") LocalDateTime from,
200 @NotNull @QueryParam("to") LocalDateTime to);
201
202 @POST
203 @Path("/items")
204 @Consumes(MediaType.APPLICATION_JSON)
205 @Produces(MediaType.APPLICATION_JSON)
206 @Tag(name = "Admin")
207 @Operation(operationId = "addRentalItem", summary = "レンタル品を登録する", description = "シリアル番号が既に使われている場合は409を返す")
208 @SecurityRequirement(name = "RmsJwtAuth")
209 @Parameter(name = "dto", description = "登録内容", required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = AddRentalItemDto.class)))
210 @APIResponse(responseCode = "200", description = "登録成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = RentalItemResourceDto.class)))
211 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
212 @APIResponse(responseCode = "409", ref = "#/components/responses/DataDupricate")
213 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
214 RentalItemResourceDto addRentalItem(@Valid AddRentalItemDto dto);
215
216
217 @PUT
218 @Path("/items")
219 @Consumes(MediaType.APPLICATION_JSON)
220 @Produces(MediaType.APPLICATION_JSON)
221 @Tag(name = "Admin")
222 @Operation(operationId = "updateRentalItem", summary = "レンタル品を更新する", description = "依頼されたレンタル品を更新する")
223 @SecurityRequirement(name = "RmsJwtAuth")
224 @Parameter(name = "updateDto", description = "更新内容", required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = RentalItemResourceDto.class)))
225 @APIResponse(responseCode = "200", description = "登録成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = RentalItemResourceDto.class)))
226 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
227 @APIResponse(responseCode = "404", ref = "#/components/responses/UnknownData")
228 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
229 RentalItemResourceDto updateRentalItem(@Valid RentalItemResourceDto updateDto);
230
231
232 @DELETE
233 @Path("/items/{rentalItemId}")
234 @Tag(name = "Admin")
235 @Operation(operationId = "deleteRentalItem", summary = "レンタル品を削除する", description = "削除対象のレンタル品を参照する予約が存在する場合は削除は行わずエラーにする")
236 @SecurityRequirement(name = "RmsJwtAuth")
237 @Parameter(name = "rentalItemId", description = "レンタル品ID", in = ParameterIn.PATH, required = true)
238 @APIResponse(responseCode = "200", description = "登録成功")
239 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
240 @APIResponse(responseCode = "404", ref = "#/components/responses/UnknownData")
241 @APIResponse(responseCode = "409", ref = "#/components/responses/DataRefered")
242 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
243 void deleteRentalItem(@RmsId @PathParam("rentalItemId") Integer rentalItemId);
244
245
246 @GET
247 @Path("/reservations")
248 @Produces(MediaType.APPLICATION_JSON)
249 @Tag(name = "Admin")
250 @Operation(operationId = "getAllReservations", summary = "予約の全件を取得する", description = "登録されているすべての予約を取得する")
251 @SecurityRequirement(name = "RmsJwtAuth")
252 @APIResponse(responseCode = "200", description = "検索結果", content = @Content(mediaType = "application/json", schema = @Schema(type = SchemaType.ARRAY, implementation = ReservationResourceDto.class)))
253 List<ReservationResourceDto> getAllReservations();
254
255
256 @PUT
257 @Path("/reservations")
258 @Consumes(MediaType.APPLICATION_JSON)
259 @Produces(MediaType.APPLICATION_JSON)
260 @Tag(name = "Admin")
261 @Operation(operationId = "updateReservation", summary = "予約を更新する", description = "依頼された予約を更新する。ユーザアカウントとレンタル品のエンティティは更新時に使用していないためIDのみ設定すればよい")
262 @SecurityRequirement(name = "RmsJwtAuth")
263 @Parameter(name = "updateDto", description = "更新内容", required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = ReservationResourceDto.class)))
264 @APIResponse(responseCode = "200", description = "登録成功。IDに対するユーザアカウントとレンタル品のエンティティは設定されて返される", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ReservationResourceDto.class)))
265 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
266 @APIResponse(responseCode = "404", ref = "#/components/responses/UnknownData")
267 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
268 ReservationResourceDto updateReservation(@Valid ReservationResourceDto updateDto);
269
270
271 @DELETE
272 @Path("/reservations/{reservationId}")
273 @Tag(name = "Admin")
274 @Operation(operationId = "deleteReservation", summary = "予約を削除する", description = "予約を削除する")
275 @SecurityRequirement(name = "RmsJwtAuth")
276 @Parameter(name = "reservationId", description = "予約ID", in = ParameterIn.PATH, required = true)
277 @APIResponse(responseCode = "200", description = "登録成功")
278 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
279 @APIResponse(responseCode = "404", ref = "#/components/responses/UnknownData")
280 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
281 void deleteReservation(@RmsId @PathParam("reservationId") Integer reservationId);
282
283 @GET
284 @Path("/users")
285 @Produces(MediaType.APPLICATION_JSON)
286 @Tag(name = "Admin")
287 @Operation(operationId = "getAllUserAccounts", summary = "ユーザの全件を取得する", description = "登録されているすべてのユーザを取得する")
288 @SecurityRequirement(name = "RmsJwtAuth")
289 @APIResponse(responseCode = "200", description = "検索結果", content = @Content(mediaType = "application/json", schema = @Schema(type = SchemaType.ARRAY, implementation = UserAccountResourceDto.class)))
290 List<UserAccountResourceDto> getAllUserAccounts();
291
292 @POST
293 @Path("/users")
294 @Consumes(MediaType.APPLICATION_JSON)
295 @Produces(MediaType.APPLICATION_JSON)
296 @Tag(name = "Admin")
297 @Operation(operationId = "addUserAccount", summary = "ユーザを登録する", description = "ログインIDが既に使われている場合は409を返す")
298 @SecurityRequirement(name = "RmsJwtAuth")
299 @Parameter(name = "dto", description = "登録内容", required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = AddUserAccountDto.class)))
300 @APIResponse(responseCode = "200", description = "登録成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserAccountResourceDto.class)))
301 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
302 @APIResponse(responseCode = "409", ref = "#/components/responses/DataDupricate")
303 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
304 UserAccountResourceDto addUserAccount(@Valid AddUserAccountDto dto);
305
306 @PUT
307 @Path("/users")
308 @Consumes(MediaType.APPLICATION_JSON)
309 @Produces(MediaType.APPLICATION_JSON)
310 @Tag(name = "Admin")
311 @Operation(operationId = "updateUserAccount", summary = "ユーザを更新する", description = "依頼されたユーザを更新する")
312 @SecurityRequirement(name = "RmsJwtAuth")
313 @Parameter(name = "dto", description = "更新内容", required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserAccountResourceDto.class)))
314 @APIResponse(responseCode = "200", description = "登録成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserAccountResourceDto.class)))
315 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
316 @APIResponse(responseCode = "404", ref = "#/components/responses/UnknownData")
317 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
318 UserAccountResourceDto updateUserAccount(@Valid UserAccountResourceDto dto);
319
320
321 @DELETE
322 @Path("/users/{userAccountId}")
323 @Tag(name = "Admin")
324 @Operation(operationId = "deleteUserAccount", summary = "ユーザを削除する", description = "削除対象のユーザを参照する予約が存在する場合は削除は行わずエラーにする")
325 @SecurityRequirement(name = "RmsJwtAuth")
326 @Parameter(name = "userAccountId", description = "ユーザID", in = ParameterIn.PATH, required = true)
327 @APIResponse(responseCode = "200", description = "登録成功")
328 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
329 @APIResponse(responseCode = "404", ref = "#/components/responses/UnknownData")
330 @APIResponse(responseCode = "409", ref = "#/components/responses/DataRefered")
331 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
332 void deleteUserAccount(@RmsId @PathParam("userAccountId") Integer userAccountId);
333
334 @GET
335 @Path("/users/own")
336 @Consumes(MediaType.APPLICATION_JSON)
337 @Produces(MediaType.APPLICATION_JSON)
338 @Tag(name = "Common")
339 @Operation(operationId = "getOwnUserProfile", summary = "自分のプロファイル情報を取得する", description = "ログインしているユーザ自身のプロファイル情報を返す")
340 @SecurityRequirement(name = "RmsJwtAuth")
341 @APIResponse(responseCode = "200", description = "プロファイル情報", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserAccountResourceDto.class)))
342 @APIResponse(responseCode = "404", ref = "#/components/responses/NotFound")
343 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
344 UserAccountResourceDto getOwnUserProfile();
345
346 @PUT
347 @Path("/users/own")
348 @Consumes(MediaType.APPLICATION_JSON)
349 @Produces(MediaType.APPLICATION_JSON)
350 @Tag(name = "Common")
351 @Operation(operationId = "updateUserProfile", summary = "自分のプロファイル情報を更新する", description = "自分以外の情報を更新しようとした場合は禁止操作として403を返す")
352 @SecurityRequirement(name = "RmsJwtAuth")
353 @Parameter(name = "dto", description = "更新内容", required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserAccountResourceDto.class)))
354 @APIResponse(responseCode = "200", description = "登録成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserAccountResourceDto.class)))
355 @APIResponse(responseCode = "400", ref = "#/components/responses/ParameterError")
356 @APIResponse(responseCode = "403", ref = "#/components/responses/Forbidden")
357 @APIResponse(responseCode = "404", ref = "#/components/responses/UnknownData")
358 @APIResponse(responseCode = "500", ref = "#/components/responses/ServerError")
359 UserAccountResourceDto updateUserProfile(@Valid UserAccountResourceDto dto);
360 }