diff --git a/src/main/java/com/example/jerseyexercise/resources/SYamagiwa.java b/src/main/java/com/example/jerseyexercise/resources/SYamagiwa.java new file mode 100644 index 0000000..12015de --- /dev/null +++ b/src/main/java/com/example/jerseyexercise/resources/SYamagiwa.java @@ -0,0 +1,146 @@ +/** + * The MIT License (MIT) + *

+ * Copyright @ 2024, Shohei Yamagiwa + *

+ * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the “Software”), to deal + * in the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + *

+ * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + *

+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.example.jerseyexercise.resources; + +import jakarta.ws.rs.*; +import org.springframework.http.MediaType; + +import java.util.ArrayList; +import java.util.List; + +/** + * {@link SYamagiwa} represents my account resource + * + * @author Shohei Yamagiwa + * @since 1.0 + */ +@Path("/s-yamagiwa") +public class SYamagiwa { + /** + * First name of the account. + */ + private String firstName = "Shohei"; + + /** + * Last name of the account. + */ + private String lastName = "Yamagiwa"; + + /** + * All posts of the account + */ + private final List posts = new ArrayList<>(); + + /** + * Returns the full-name of the account. + * + * @return The name of the account + * @since 1.0 + */ + @GET() + @Path("/name") + public String getFullName() { + return firstName + " " + lastName; + } + + /** + * Returns the first-name of the account. + * + * @return The first name of the account + * @since 1.0 + */ + @GET() + @Path("/first-name") + public String getFirstName() { + return firstName; + } + + /** + * Returns the last-name of the account. + * + * @return The last name of the account + * @since 1.0 + */ + @GET() + @Path("/last-name") + public String getLastName() { + return lastName; + } + + /** + * Update the first name of the account. + * + * @param firstName The first name of the account. + */ + @PUT + @Path("/firstName") + public void setFirstName(@FormParam("firstName") String firstName) { + this.firstName = firstName; + } + + /** + * Update the last name of the account. + * + * @param lastName The last name of the account. + */ + @PUT + @Path("/lastName") + public void setLastName(@FormParam("lastName") String lastName) { + this.lastName = lastName; + } + + /** + * Returns all posts of the account. + * + * @return All posts of the account. + */ + @GET + @Path("/posts") + @Produces(MediaType.APPLICATION_JSON_VALUE) + public List getPosts() { + return posts; + } + + /** + * Add new post of the account. + */ + @POST + @Path("/posts") + public void addPost(@FormParam("content") String tweet) { + posts.add(tweet); + } + + /** + * Get the post of the account with given id. + * + * @return Specified post of the account. + */ + @GET + @Path("/posts/{id}") + @Produces(MediaType.TEXT_PLAIN_VALUE) + public String getPost(@PathParam("id") int id) { + if (id >= posts.size()) { + return "The requested resource does not exist on the server!"; + } + return posts.get(id); + } +}