我如何编码 posted_by 指的是真实的现有用户?

问题描述 投票:0回答:0

使用 Java、Javalin 和 SQL

SQL 数据库表:

账号

account_id integer primary key auto_increment,
username varchar(255),
password varchar(255)

留言

message_id integer primary key auto_increment,
posted_by integer,
message_text varchar(255),
time_posted_epoch long,
foreign key (posted_by) references Account(account_id)

3:我们的 API 应该能够处理新消息的创建。

作为用户,我应该能够在端点 POST localhost:8080/messages 上提交新帖子。请求正文将包含消息的 JSON 表示形式,该消息应持久保存到数据库中,但不包含 message_id。

  • 当且仅当 message_text 不为空,小于 255 个字符,并且 posted_by 指的是真实存在的用户时,消息的创建才会成功。如果成功,响应正文应包含消息的 JSON,包括其 message_id。响应状态应为 200,这是默认值。新消息应该保存到数据库中。
  • 如果创建消息不成功,响应状态应该是400。(客户端错误)

以下代码是我所做的。在 SocialMediaController 类中,我如何编码 posted_by 指的是真实的现有用户?

SocialMediaController.java

public class SocialMediaController {
    AccountService accountService;
    MessageService messageService;
    
    public SocialMediaController() {
        this.accountService = new AccountService();
        this.messageService = new MessageService();
    }
    public Javalin startAPI() {
        Javalin app = Javalin.create();
        app.post("/messages", this::createMessageHandler);
        return app;
    }
// 3. Create new messages
    private void createMessageHandler(Context ctx) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        Message message = mapper.readValue(ctx.body(), Message.class);

        /*
        Creation of the message successful if message_text is not blank, is under 255 characters, 
        and posted_by refers to a real, existing user
         */

        if(message.getMessage_text().isBlank() || message.getMessage_text().length() >= 255){
            ctx.status(400); // Client error
        }else{
            Message addedMessage = messageService.addMessage(message);
            ctx.json(mapper.writeValueAsString(addedMessage));
            ctx.status(200); // Successful response
        }
    }

MessageDAO.java

public class MessageDAO {
    public Message createMessage(Message message){
        Connection connection = ConnectionUtil.getConnection();
        try {
            //Write SQL logic here
            String sql = "INSERT INTO message (posted_by, message_text, time_posted_epoch) VALUES (?, ?, ?)";
            PreparedStatement preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            preparedStatement.setInt(1, message.getPosted_by());
            preparedStatement.setString(2, message.getMessage_text());
            preparedStatement.setLong(3, message.getTime_posted_epoch());
            preparedStatement.executeUpdate();
            ResultSet pkeyResultSet = preparedStatement.getGeneratedKeys();
            if(pkeyResultSet.next()){
                int generated_message_id = (int) pkeyResultSet.getInt(1);
                return new Message(generated_message_id, message.getPosted_by(), message.getMessage_text(), message.getTime_posted_epoch());
            }
        }catch(SQLException e){
            System.out.println(e.getMessage());
        }
        return null;
    }

MessageService.java

public class MessageService {
    private MessageDAO messageDAO;
    public MessageService(){
        messageDAO = new MessageDAO();
    }
    // Constructor for a MessageService when a MessageDAO is provided
    public MessageService(MessageDAO messageDAO){
        this.messageDAO = messageDAO;
    }
    // Use MessageDAO to create new message
    public Message addMessage(Message message) {
        return messageDAO.createMessage(message);
java sql reference dao
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.