ContentPostingPolicy.java

package org.darkroomlibrary.service;

import org.darkroomlibrary.context.CurrentUserContext;
import org.darkroomlibrary.domain.model.User;
import org.darkroomlibrary.domain.type.AccountStatus;
import org.darkroomlibrary.mapper.UserMapper;
import org.springframework.stereotype.Component;

import jakarta.annotation.Resource;
import java.util.Objects;

/**
 * Central policy for reader-generated public content.
 */
@Component
public class ContentPostingPolicy {

    @Resource
    private UserMapper userMapper;

    public String currentUserRejectionReason() {
        User user = lockCurrentUser();
        return postingRejectionReason(user);
    }

    public String postingRejectionReason(User user) {
        String accountError = accountRejectionReason(user);
        if (accountError != null) {
            return accountError;
        }
        if (Boolean.TRUE.equals(user.getIsWord())) {
            return "当前账号已被禁言,暂不能发布或修改内容";
        }
        return null;
    }

    public String currentUserAccountRejectionReason() {
        return accountRejectionReason(lockCurrentUser());
    }

    private User lockCurrentUser() {
        Integer userId = CurrentUserContext.userId();
        if (userId == null) {
            return null;
        }
        return userMapper.findByIdForUpdate(userId);
    }

    private String accountRejectionReason(User user) {
        if (CurrentUserContext.userId() == null) {
            return "身份认证失败,请先登录";
        }
        if (user == null) {
            return "当前用户不存在或已被删除";
        }
        if (!Objects.equals(user.getAccountStatus(), AccountStatus.NORMAL.code())
                || Boolean.TRUE.equals(user.getIsLogin())) {
            return "当前账号状态不允许执行此操作";
        }
        if (!Objects.equals(user.getUserRole(), CurrentUserContext.roleCode())) {
            return "账号权限已变化,请刷新后重试";
        }
        return null;
    }
}