CreateDefaultSpaceAndLibrary 为企业创建默认空间和知识库
(eid int64, ownerID int64)
| 151 | |
| 152 | // CreateDefaultSpaceAndLibrary 为企业创建默认空间和知识库 |
| 153 | func CreateDefaultSpaceAndLibrary(eid int64, ownerID int64) (*Space, *Library, error) { |
| 154 | // 检查是否已存在默认空间 |
| 155 | var existingSpace Space |
| 156 | if err := DB.Where("eid = ? AND name = ?", eid, "默认空间").First(&existingSpace).Error; err == nil { |
| 157 | return nil, nil, errors.New("default space already exists") |
| 158 | } |
| 159 | |
| 160 | // 开启事务 |
| 161 | tx := DB.Begin() |
| 162 | defer func() { |
| 163 | if r := recover(); r != nil { |
| 164 | tx.Rollback() |
| 165 | } |
| 166 | }() |
| 167 | |
| 168 | // 创建默认空间 |
| 169 | defaultSpace := &Space{ |
| 170 | Name: "默认空间", |
| 171 | Description: "企业的默认工作空间", |
| 172 | Eid: eid, |
| 173 | OwnerID: ownerID, |
| 174 | SpaceKind: SPACE_KIND_REGULAR, |
| 175 | Status: SPACE_STATUS_ACTIVE, |
| 176 | Sort: 0, |
| 177 | } |
| 178 | |
| 179 | if err := tx.Create(defaultSpace).Error; err != nil { |
| 180 | tx.Rollback() |
| 181 | return nil, nil, err |
| 182 | } |
| 183 | |
| 184 | // 创建默认知识库 |
| 185 | defaultLibrary := &Library{ |
| 186 | Name: "默认知识库", |
| 187 | Description: "空间的默认知识库", |
| 188 | SpaceID: defaultSpace.ID, |
| 189 | Eid: eid, |
| 190 | CreatorID: ownerID, |
| 191 | LibraryKind: LIBRARY_KIND_REGULAR, |
| 192 | Status: LIBRARY_STATUS_ACTIVE, |
| 193 | Sort: 0, |
| 194 | } |
| 195 | |
| 196 | // 使用Library的Save方法确保UUID正确生成 |
| 197 | originalDB := DB |
| 198 | DB = tx // 临时将全局DB设置为当前事务 |
| 199 | err := defaultLibrary.Save() |
| 200 | DB = originalDB // 恢复全局DB |
| 201 | if err != nil { |
| 202 | tx.Rollback() |
| 203 | return nil, nil, err |
| 204 | } |
| 205 | |
| 206 | if err := tx.Commit().Error; err != nil { |
| 207 | return nil, nil, err |
| 208 | } |
| 209 | |
| 210 | return defaultSpace, defaultLibrary, nil |