{"record":{"id":"bdf61b3f138a2650","repo":"iflytek/astron-agent","slug":"database-name-exist","errorCode":"DATABASE_NAME_EXIST","errorMessage":"DATABASE_NAME_EXIST","messagePattern":"DATABASE_NAME_EXIST","errorType":"error_code","errorClass":"BusinessException","httpStatus":null,"severity":"warning","filePath":"console/backend/toolkit/src/main/java/com/iflytek/astron/console/toolkit/service/database/DatabaseService.java","lineNumber":127,"sourceCode":"            String userId = Objects.requireNonNull(UserInfoManagerHandler.getUserId()).toString();\n            Long spaceId = SpaceInfoUtil.getSpaceId();\n            // Duplicate name validation\n            Long count = 0L;\n            if (spaceId == null) {\n                count = dbInfoMapper.selectCount(new QueryWrapper<DbInfo>().lambda()\n                        .eq(DbInfo::getName, databaseDto.getName())\n                        .eq(DbInfo::getSpaceId, null)\n                        .eq(DbInfo::getUid, userId)\n                        .eq(DbInfo::getDeleted, false));\n            } else {\n                count = dbInfoMapper.selectCount(new QueryWrapper<DbInfo>().lambda()\n                        .eq(DbInfo::getName, databaseDto.getName())\n                        .eq(DbInfo::getUid, userId)\n                        .eq(DbInfo::getSpaceId, spaceId)\n                        .eq(DbInfo::getDeleted, false));\n            }\n            if (count > 0) {\n                throw new BusinessException(ResponseEnum.DATABASE_NAME_EXIST);\n            }\n            // Call core system to create database\n            Long dbId = coreSystemService.createDatabase(databaseDto.getName(), userId, spaceId, databaseDto.getDescription());\n            // Save record\n            DbInfo database = new DbInfo();\n            BeanUtils.copyProperties(databaseDto, database);\n            database.setUid(userId);\n            database.setAppId(commonConfig.getAppId());\n            database.setDbId(dbId);\n            database.setCreateTime(new Date());\n            database.setUpdateTime(new Date());\n            database.setSpaceId(spaceId);\n            dbInfoMapper.insert(database);\n            return database;\n        } catch (Exception ex) {\n            log.info(\"Failed to create database, params:{}\", databaseDto.toString(), ex);\n            throw new BusinessException(ResponseEnum.DATABASE_CREATE_FAILED);\n        }","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/iflytek/astron-agent/blob/5e758547a83371a5a4b29dadf4ac03e8dd527635/console/backend/toolkit/src/main/java/com/iflytek/astron/console/toolkit/service/database/DatabaseService.java#L109-L145","documentation":"Thrown by DatabaseService.create when a database with the same name already exists for the current user and space (deleted=false). The service counts existing DbInfo rows matching name+uid+spaceId before creating, and refuses duplicates. It is a uniqueness-constraint violation surfaced as a business error.","triggerScenarios":"Calling create with a name that already matches an existing non-deleted DbInfo record belonging to the same userId and spaceId.","commonSituations":"User clicks 'create' twice on the same form; retry after a timeout actually created the first record; migrating/importing databases whose names collide; test fixtures reusing fixed names without cleanup.","solutions":["Query the existing database list first and reuse or rename before calling create","Choose a unique name (append suffix/timestamp)","If the old one is stale, delete it (soft delete) and retry","Handle this error in the UI and prompt the user for a new name"],"exampleFix":"// before\nDatabaseDto dto = new DatabaseDto();\ndto.setName(\"my-db\"); // may already exist\ndatabaseService.create(dto);\n// after\ndto.setName(\"my-db-\" + System.currentTimeMillis());\ndatabaseService.create(dto);","handlingStrategy":"validation","validationCode":"Long dup = dbInfoMapper.selectCount(new QueryWrapper<DbInfo>().lambda()\n    .eq(DbInfo::getName, name).eq(DbInfo::getUid, userId).eq(DbInfo::getSpaceId, spaceId).eq(DbInfo::getDeleted, false));\nif (dup > 0) { /* rename or reuse */ }","typeGuard":null,"tryCatchPattern":"try { databaseService.create(dto); } catch (BusinessException e) { if (\"DATABASE_NAME_EXIST\".equals(e.getCode())) { dto.setName(dto.getName() + \"-\" + suffix); retry once; } else { throw e; } }","preventionTips":["Check names against the list API before create","Add suffix/timestamp for programmatic creation","UI should catch this code and prompt for a new name"],"tags":["validation","duplicate","uniqueness","java"],"backgroundTag":"file-already-exists","analyzedSha":"5e758547a83371a5a4b29dadf4ac03e8dd527635","analyzedAt":"2026-09-12T08:03:51.356Z","contentChangedAt":"2026-09-12T08:03:51.356Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}