View Javadoc
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   * レンタル予約システムのREST APIインタフェース。
43   * MicroProfileのOpenAPIのアノテーションを使いAPIの詳細情報を付加している。<br>
44   * 全体に関するAPI情報は{@link ApplicationConfig}に定義。
45   */
46  
47  public interface WebApiSpec {
48  
49      /** for @RolesAllowed const */
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     // for react-ui
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     // for react-ui
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     // for react-ui
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     // for react-ui
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     // for react-ui
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     // for react-ui
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     // for react-ui
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     // for react-ui
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     // for react-ui
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 }