Newer
Older
tampopo-server / src / main / java / org / ntlab / tampoposerver / resources / NotificationsResource.java
package org.ntlab.tampoposerver.resources;

import jakarta.ws.rs.*;
import jakarta.ws.rs.core.Response;
import org.ntlab.tampoposerver.models.Notification;
import org.ntlab.tampoposerver.models.User;
import org.ntlab.tampoposerver.repositories.NotificationRepository;
import org.ntlab.tampoposerver.repositories.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
//import java.util.Map;

@Path("/{user-id}/notifications")
@Component
public class NotificationsResource {
    private UserRepository userRepository = null;
    private NotificationRepository notificationRepository = null;

    @Autowired
    public NotificationsResource(UserRepository userRepository, NotificationRepository notificationRepository) {
        this.userRepository = userRepository;
        this.notificationRepository = notificationRepository;
    }


    @GET
    public String getNotifications(@PathParam("user-id") String userID, @QueryParam("token") String token) {
        User user = userRepository.getUser(userID);
        if (user == null) {
            var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
            throw new WebApplicationException(response.build());
        }
        if (token == null || !token.equals(user.getToken())) {
            var response = Response.status(Response.Status.FORBIDDEN).entity("トークンが不正です");//403
            throw new WebApplicationException(response.build());
        }

        List<String> notifications = List.of("notification-id1", "notification-id2", "notification-id3"); //サンプル
        return "{\"notifications\": [\"" + String.join("\",\"", notifications) + "\"]}";
    }

    @Path("/{notification-id}")
    @GET
    public String getNotification(@PathParam("user-id") String userID, @PathParam("notification-id") String notificationID, @QueryParam("token") String token) {
        User user = userRepository.getUser(userID);
        if (user == null) {
            var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
            throw new WebApplicationException(response.build());
        }
        if (token == null || !token.equals(user.getToken())) {
            var response = Response.status(Response.Status.FORBIDDEN).entity("トークンが不正です");//403
            throw new WebApplicationException(response.build());
        }
        Notification notification = notificationRepository.getNotification(userID, notificationID); //通知詳細を取得
        if (notification == null) {
            var response = Response.status(Response.Status.NOT_FOUND).entity("通知が存在しません");//404
            throw new WebApplicationException(response.build());
        }

        return "{"
                + "\"notificationId\":\"" + notification.getNotificationId() + "\","
                + "\"from\":\"" + notification.getFrom() + "\","
                + "\"text\":\"" + notification.getText() + "\","
                + "\"time\":\"" + notification.getTime() + "\""
                + "}"; //JSON形式の文字列で返す
    }

    @Path("/{notification-id}/text") //通知本文だけを返す
    @GET
    public String getNotificationText(@PathParam("user-id") String userID, @PathParam("notification-id") String notificationID, @QueryParam("token") String token) {
        User user = userRepository.getUser(userID);
        if (user == null) {
            var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
            throw new WebApplicationException(response.build());
        }
        if (token == null || !token.equals(user.getToken())) {
            var response = Response.status(Response.Status.FORBIDDEN).entity("トークンが不正です");//403
            throw new WebApplicationException(response.build());
        }
        Notification notification = notificationRepository.getNotification(userID, notificationID);
        if (notification == null) {
            var response = Response.status(Response.Status.NOT_FOUND).entity("通知が存在しません");//404
            throw new WebApplicationException(response.build());
        }

        //Map<String, String> response = Map.of("text", notification.getText());
        return notification.getText(); //文字列を直接返す
    }

    @Path("/{notification-id}/time") //通知日時だけを返す
    @GET
    public String getNotificationTime(@PathParam("user-id") String userID, @PathParam("notification-id") String notificationID, @QueryParam("token") String token) {
        User user = userRepository.getUser(userID);
        if (user == null) {
            var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
            throw new WebApplicationException(response.build());
        }
        if (token == null || !token.equals(user.getToken())) {
            var response = Response.status(Response.Status.FORBIDDEN).entity("トークンが不正です");//403
            throw new WebApplicationException(response.build());
        }
        Notification notification = notificationRepository.getNotification(userID, notificationID);
        if (notification == null) {
            var response = Response.status(Response.Status.NOT_FOUND).entity("通知が存在しません");//404
            throw new WebApplicationException(response.build());
        }

        //Map<String, String> response = Map.of("time", notification.getTime());
        return notification.getTime();
    }

    @Path("/{notification-id}/from") //通知送信者だけを返す
    @GET
    public String getNotificationFrom(@PathParam("user-id") String userID, @PathParam("notification-id") String notificationID, @QueryParam("token") String token) {
        User user = userRepository.getUser(userID);
        if (user == null) {
            var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
            throw new WebApplicationException(response.build());
        }
        if (token == null || !token.equals(user.getToken())) {
            var response = Response.status(Response.Status.FORBIDDEN).entity("トークンが不正です");//403
            throw new WebApplicationException(response.build());
        }
        Notification notification = notificationRepository.getNotification(userID, notificationID);
        if (notification == null) {
            var response = Response.status(Response.Status.NOT_FOUND).entity("通知が存在しません");//404
            throw new WebApplicationException(response.build());
        }

        //Map<String, String> response = Map.of("from", notification.getFrom());
        return notification.getFrom();
    }
}