Implement Space membership by group

* Add all users to default group
* Fixes and updates
This commit is contained in:
Philipinho
2024-03-20 01:26:03 +00:00
parent a821e37028
commit 51b9808382
22 changed files with 425 additions and 82 deletions

View File

@ -17,7 +17,8 @@ import { UserRepository } from '../../user/repositories/user.repository';
import { SpaceRole, UserRole } from '../../../helpers/types/permission';
import { User } from '../../user/entities/user.entity';
import { EnvironmentService } from '../../../environment/environment.service';
import { Space } from '../../space/entities/space.entity';
import { GroupService } from '../../group/services/group.service';
import { GroupUserService } from '../../group/services/group-user.service';
@Injectable()
export class WorkspaceService {
@ -25,6 +26,8 @@ export class WorkspaceService {
private workspaceRepository: WorkspaceRepository,
private userRepository: UserRepository,
private spaceService: SpaceService,
private groupService: GroupService,
private groupUserService: GroupUserService,
private environmentService: EnvironmentService,
private dataSource: DataSource,
@ -68,12 +71,28 @@ export class WorkspaceService {
workspace.creatorId = user.id;
workspace = await manager.save(workspace);
// create default group
const group = await this.groupService.createDefaultGroup(
workspace.id,
user.id,
manager,
);
// attach user to workspace
user.workspaceId = workspace.id;
user.role = UserRole.OWNER;
await manager.save(user);
// add user to default group
await this.groupUserService.addUserToGroup(
user.id,
group.id,
workspace.id,
manager,
);
// create default space
const spaceData: CreateSpaceDto = {
const spaceInfo: CreateSpaceDto = {
name: 'General',
};
@ -81,11 +100,11 @@ export class WorkspaceService {
const createdSpace = await this.spaceService.create(
user.id,
workspace.id,
spaceData,
spaceInfo,
manager,
);
// and add user to it too.
// and add user to space as owner
await this.spaceService.addUserToSpace(
user.id,
createdSpace.id,
@ -94,6 +113,15 @@ export class WorkspaceService {
manager,
);
// add default group to space as writer
await this.spaceService.addGroupToSpace(
group.id,
createdSpace.id,
SpaceRole.WRITER,
workspace.id,
manager,
);
workspace.defaultSpaceId = createdSpace.id;
await manager.save(workspace);
return workspace;
@ -108,7 +136,7 @@ export class WorkspaceService {
workspaceId,
assignedRole?: UserRole,
manager?: EntityManager,
): Promise<Workspace> {
): Promise<void> {
return await transactionWrapper(
async (manager: EntityManager) => {
const workspace = await manager.findOneBy(Workspace, {
@ -123,25 +151,7 @@ export class WorkspaceService {
user.workspaceId = workspace.id;
await manager.save(user);
const space = await manager.findOneBy(Space, {
id: workspace.defaultSpaceId,
workspaceId,
});
if (!space) {
throw new NotFoundException('Space not found');
}
// add user to default space
await this.spaceService.addUserToSpace(
user.id,
space.id,
space.defaultRole,
workspace.id,
manager,
);
return workspace;
// User is now added to the default space via the default group
},
this.dataSource,
manager,
@ -175,9 +185,6 @@ export class WorkspaceService {
if (!workspace) {
throw new NotFoundException('Workspace not found');
}
//TODO
// remove all existing users from workspace
// delete workspace
// delete
}
}

View File

@ -10,11 +10,14 @@ import { WorkspaceInvitationService } from './services/workspace-invitation.serv
import { WorkspaceInvitationRepository } from './repositories/workspace-invitation.repository';
import { WorkspaceUserService } from './services/workspace-user.service';
import { UserModule } from '../user/user.module';
import { GroupModule } from '../group/group.module';
@Module({
imports: [
TypeOrmModule.forFeature([Workspace, WorkspaceInvitation]),
SpaceModule, UserModule
SpaceModule,
UserModule,
GroupModule,
],
controllers: [WorkspaceController],
providers: [