Newer
Older
tampopo-server / src / main / java / org / ntlab / tampoposerver / resources / ChatRoomsResource.java
Yuzuki Yoshimura 26 days ago 4 KB ChatRooms作成
package org.ntlab.tampoposerver.resources;


import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.ntlab.tampoposerver.models.ChatRequest;
import org.ntlab.tampoposerver.models.ChatRooms;
import org.ntlab.tampoposerver.models.FriendRequest;
import org.ntlab.tampoposerver.models.User;
import org.ntlab.tampoposerver.repositories.ChatRequestRepository;
import org.ntlab.tampoposerver.repositories.ChatRoomsRepository;
import org.ntlab.tampoposerver.repositories.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


import java.util.ArrayList;
import java.util.List;


import static javax.ws.rs.core.Response.status;


@Component
public class ChatRoomsResource {
    private final ChatRoomsRepository chatRoomsRepository;
    private final UserRepository userRepository;

    @Autowired
    public ChatRoomsResource(UserRepository userRepository, ChatRoomsRepository chatRoomsRepository) {
        this.userRepository = userRepository;
        this.chatRoomsRepository = chatRoomsRepository;
    }


    //チャットルームの作成
    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.TEXT_PLAIN)
    public Response createChatRoom () {
        return Response.status(Response.Status.OK).entity("Successfully created a chat room").build();
    }


    //メッセージを閲覧する
    @GET
    @Path("/{chat-room-id}/{user-id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getChatRoomMessages(@PathParam("chat-room-id") int chatRoomId, @PathParam("user-id") String userId) {
        User user = userRepository.getUser(userId);
        if (user == null) throw new NotFoundException("ユーザーが見つかりません");


//        ChatRoom room = chatRoomsRepository.getMessage(chatRoomId);
//        if (room == null) throw new NotFoundException("チャットルームが存在しません");


        return Response.ok(chatRoomsRepository.getMessagesFromUser(chatRoomId, userId)).build();
    }






    //チャットルームの削除
    @DELETE
    @Path("/{chatroom-id}")
    public Response deleteChatRoom(@PathParam("chatroom-id") int chatRoomId, @FormParam("user-id") String userId, @QueryParam("token") String token) {
        ChatRooms room = chatRoomsRepository.getChatRoom(chatRoomId);
        if (room == null) throw new NotFoundException("チャットルームが存在しません");

        User user = userRepository.getUser(userId);
        if (user == null) {
            throw new NotFoundException("IDが存在しません");
        }

        if (token == null || !token.equals(user.getToken())) {
            throw new WebApplicationException(
                    Response.status(Response.Status.FORBIDDEN)
                            .entity("認証失敗")
                            .build()
            );
        }


        chatRoomsRepository.deleteChatRoom(chatRoomId);
        return Response.noContent().build();
    }




    //チャットルームにユーザーを追加する
    @PUT
    @Path("/{chatroom-id}")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public Response addChatRoomUser(@FormParam("chat-room-id") String chatRoomId, @FormParam("user-id") String userId, @QueryParam("token") String token) {
        User user = userRepository.getUser(userId);
        if (user == null) {
            throw new NotFoundException("IDが存在しません");
        }

        //トークン認証
        if (token == null || !token.equals(user.getToken())) {
            throw new WebApplicationException(
                    Response.status(Response.Status.FORBIDDEN)
                            .entity("認証失敗")
                            .build()
            );
        }


        return Response.status(Response.Status.OK).entity("Successfully updated").build();
    }


    //チャットルームにメッセージを追加する
    @PUT
    @Path("/{chatroom-id}/{user-id}/message")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public Response updateMessage(@PathParam("chatroom-id") int roomId, @PathParam("user-id") String userId, @FormParam("message") String message) {
        ChatRooms room = chatRoomsRepository.getChatRoom(roomId);
        if (room == null) throw new NotFoundException("チャットルームが存在しません");


        room.updateMessage(roomId, userId, message);
        return Response.ok("Message updated").build();
    }






}