{"record":{"id":"39a7b039d6940dae","repo":"apache/dolphinscheduler","slug":"project-not-found","errorCode":"PROJECT_NOT_FOUND","errorMessage":"PROJECT_NOT_FOUND","messagePattern":"PROJECT_NOT_FOUND","errorType":"error_code","errorClass":"ServiceException","httpStatus":null,"severity":"error","filePath":"dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectServiceImpl.java","lineNumber":211,"sourceCode":"    @Override\n    public void checkProjectAndAuthThrowException(User loginUser, Long projectCode, String permission) {\n        if (projectCode == null) {\n            throw new ServiceException(Status.PROJECT_NOT_EXIST);\n        }\n        Project project = projectDao.queryByCode(projectCode);\n        checkProjectAndAuthThrowException(loginUser, project, permission);\n    }\n\n    @Override\n    public void checkHasProjectWritePermissionThrowException(User loginUser, long projectCode) {\n        Project project = projectDao.queryByCode(projectCode);\n        checkHasProjectWritePermissionThrowException(loginUser, project);\n    }\n\n    @Override\n    public void checkHasProjectWritePermissionThrowException(User loginUser, Project project) {\n        if (project == null) {\n            throw new ServiceException(Status.PROJECT_NOT_FOUND, null);\n        }\n        // case 1: user is admin\n        if (loginUser.getUserType() == UserType.ADMIN_USER) {\n            return;\n        }\n        // case 2: user is project owner\n        if (project.getUserId().equals(loginUser.getId())) {\n            return;\n        }\n        // case 3: check user permission level\n        ProjectUser projectUser = projectUserDao.queryProjectRelation(project.getId(), loginUser.getId());\n        if (projectUser == null || projectUser.getPerm() != Constants.DEFAULT_ADMIN_PERMISSION) {\n            throw new ServiceException(Status.USER_NO_WRITE_PROJECT_PERM, loginUser.getUserName(), project.getCode());\n        }\n    }\n\n    /**\n     * admin can view all projects","sourceCodeStart":193,"sourceCodeEnd":229,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectServiceImpl.java#L193-L229","documentation":"Thrown by checkHasProjectWritePermissionThrowException when the Project argument is null. Distinct from PROJECT_NOT_EXIST: this is the write-permission check path signaling the project record could not be found.","triggerScenarios":"Calling checkHasProjectWritePermissionThrowException (or the code-based wrapper that resolved no project) with a null project because projectDao lookup returned nothing for the given code.","commonSituations":"Workflow/process-definition operations referencing a project deleted earlier; import/export scripts using wrong project code; tests constructing requests with fabricated codes.","solutions":["Look up the project first and confirm it exists before requesting write-permission checks","Correct the project code used by the client","Recreate the missing project if it was deleted unintentionally"],"exampleFix":"// before\nprojectService.checkHasProjectWritePermissionThrowException(loginUser, project);\n// after\nProject project = projectDao.queryByCode(projectCode);\nif (project == null) {\n    putMsg(result, Status.PROJECT_NOT_FOUND, projectCode);\n    return result;\n}\nprojectService.checkHasProjectWritePermissionThrowException(loginUser, project);","handlingStrategy":"validation","validationCode":"Project project = projectDao.queryByCode(projectCode);\nif (project == null) { throw new EntityNotFoundException(\"project \" + projectCode); }","typeGuard":"if (projectCode != null && projectDao.queryByCode(projectCode) != null) { /* safe */ }","tryCatchPattern":"try {\n    service.checkHasProjectWritePermissionThrowException(loginUser, project);\n} catch (ServiceException e) {\n    if (e.getCode() == Status.PROJECT_NOT_FOUND) { return notFound(); }\n    throw e;\n}","preventionTips":["Always resolve the Project entity before permission checks","Handle project deletion events in clients holding references","Avoid fabricated project codes in scripts/tests"],"tags":["api","project","not-found"],"backgroundTag":"entity-not-found","analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}