Skip to content

Commit 08c4d84

Browse files
committed
add flow group to user list
1 parent bad53b2 commit 08c4d84

File tree

10 files changed

+108
-52
lines changed

10 files changed

+108
-52
lines changed

core/src/main/java/com/flowci/core/common/config/MongoConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ public MongoMappingContext mongoMappingContext(MongoCustomConversions customConv
102102
context.setAutoIndexCreation(true);
103103

104104
// add addPersistentEntity for subtypes since not registered if called within same thread
105+
context.addEntity(Flow.class);
106+
context.addEntity(FlowGroup.class);
107+
105108
context.addEntity(SmtpConfig.class);
106109
context.addEntity(TextConfig.class);
107110

core/src/main/java/com/flowci/core/flow/dao/FlowDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public interface FlowDao extends MongoRepository<Flow, String> {
3535

3636
List<Flow> findAllByStatus(Status status);
3737

38-
List<Flow> findAllByGroupId(String groupId);
38+
List<Flow> findAllByParentId(String parentId);
3939

4040
List<Flow> findAllByStatusAndCreatedBy(Status status, String createdBy);
4141

core/src/main/java/com/flowci/core/flow/dao/FlowUserDao.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
package com.flowci.core.flow.dao;
1919

20+
import java.util.Collection;
2021
import java.util.List;
21-
import java.util.Set;
2222

2323
public interface FlowUserDao {
2424

@@ -42,12 +42,12 @@ public interface FlowUserDao {
4242
/**
4343
* Batch insert users
4444
*/
45-
void insert(String flowId, Set<String> emails);
45+
void insert(String flowId, Collection<String> emails);
4646

4747
/**
4848
* Batch remove users
4949
*/
50-
void remove(String flowId, Set<String> emails);
50+
void remove(String flowId, Collection<String> emails);
5151

5252
/**
5353
* Check user is existed

core/src/main/java/com/flowci/core/flow/dao/FlowUserDaoImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,14 @@ public List<String> findAllUsers(String flowId) {
7171
}
7272

7373
@Override
74-
public void insert(String flowId, Set<String> emails) {
74+
public void insert(String flowId, Collection<String> emails) {
7575
Query q = Query.query(Criteria.where("_id").is(flowId));
7676
Update u = new Update().addToSet("users").each(emails);
7777
mongoOps.upsert(q, u, FlowUsers.class);
7878
}
7979

8080
@Override
81-
public void remove(String flowId, Set<String> emails) {
81+
public void remove(String flowId, Collection<String> emails) {
8282
Query q = Query.query(Criteria.where("_id").is(flowId));
8383

8484
Update u = new Update();

core/src/main/java/com/flowci/core/flow/domain/Flow.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,18 @@
1717
package com.flowci.core.flow.domain;
1818

1919
import com.fasterxml.jackson.annotation.JsonIgnore;
20-
import com.flowci.core.common.domain.Mongoable;
2120
import com.flowci.core.common.domain.Variables;
2221
import com.flowci.domain.StringVars;
23-
import com.flowci.domain.TypedVars;
2422
import com.flowci.domain.VarValue;
2523
import com.flowci.domain.Vars;
2624
import com.flowci.exception.ArgumentException;
2725
import com.flowci.store.Pathable;
2826
import com.flowci.tree.NodePath;
2927
import com.flowci.util.StringHelper;
3028
import com.google.common.collect.ImmutableSet;
29+
import lombok.EqualsAndHashCode;
3130
import lombok.Getter;
32-
import lombok.NoArgsConstructor;
3331
import lombok.Setter;
34-
import org.springframework.data.mongodb.core.index.Indexed;
3532
import org.springframework.data.mongodb.core.mapping.Document;
3633

3734
import java.util.Objects;
@@ -42,9 +39,9 @@
4239
*/
4340
@Getter
4441
@Setter
45-
@NoArgsConstructor
4642
@Document(collection = "flow")
47-
public final class Flow extends Mongoable implements Pathable {
43+
@EqualsAndHashCode(callSuper = true)
44+
public final class Flow extends FlowItem implements Pathable {
4845

4946
private static final Set<String> reservedFlowNames = ImmutableSet.<String>builder()
5047
.add("flows")
@@ -73,13 +70,6 @@ public enum Status {
7370
CONFIRMED
7471
}
7572

76-
@Indexed(name = "index_flow_name")
77-
private String name;
78-
79-
private Vars<VarValue> vars = new TypedVars();
80-
81-
private String groupId;
82-
8373
private Status status = Status.PENDING;
8474

8575
private boolean isYamlFromRepo;
@@ -97,7 +87,12 @@ public enum Status {
9787

9888
private WebhookStatus webhookStatus;
9989

90+
public Flow() {
91+
this.type = Type.Flow;
92+
}
93+
10094
public Flow(String name) {
95+
this();
10196
this.name = name;
10297
}
10398

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
package com.flowci.core.flow.domain;
22

33

4-
import com.flowci.core.common.domain.Mongoable;
5-
import com.flowci.domain.TypedVars;
6-
import com.flowci.domain.VarValue;
7-
import com.flowci.domain.Vars;
4+
import lombok.EqualsAndHashCode;
85
import lombok.Getter;
96
import lombok.Setter;
10-
import org.springframework.data.mongodb.core.index.Indexed;
117
import org.springframework.data.mongodb.core.mapping.Document;
128

139
@Setter
1410
@Getter
15-
@Document(collection = "flow_group")
16-
public class FlowGroup extends Mongoable {
11+
@Document(collection = "flow")
12+
@EqualsAndHashCode(callSuper = true)
13+
public class FlowGroup extends FlowItem {
1714

18-
@Indexed(name = "index_group_name")
19-
protected String name;
15+
public FlowGroup() {
16+
super.type = Type.Group;
17+
}
2018

21-
protected Vars<VarValue> vars = new TypedVars();
2219
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.flowci.core.flow.domain;
2+
3+
import com.flowci.core.common.domain.Mongoable;
4+
import com.flowci.domain.TypedVars;
5+
import com.flowci.domain.VarValue;
6+
import com.flowci.domain.Vars;
7+
import com.flowci.util.StringHelper;
8+
import lombok.EqualsAndHashCode;
9+
import lombok.Getter;
10+
import lombok.Setter;
11+
import org.springframework.data.mongodb.core.index.Indexed;
12+
13+
@Getter
14+
@Setter
15+
@EqualsAndHashCode(callSuper = true)
16+
public abstract class FlowItem extends Mongoable {
17+
18+
public enum Type {
19+
Flow,
20+
21+
Group
22+
}
23+
24+
@Indexed(name = "index_flow_name")
25+
protected String name;
26+
27+
protected Type type;
28+
29+
protected Vars<VarValue> vars = new TypedVars();
30+
31+
/**
32+
* Parent flow item id
33+
*/
34+
protected String parentId;
35+
36+
public boolean hasParentId() {
37+
return StringHelper.hasValue(parentId);
38+
}
39+
}

core/src/main/java/com/flowci/core/flow/service/FlowGroupService.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,12 @@
33
import com.flowci.core.flow.domain.Flow;
44
import com.flowci.core.flow.domain.FlowGroup;
55

6-
import java.util.Collection;
76
import java.util.List;
87

98
public interface FlowGroupService {
109

1110
FlowGroup get(String name);
1211

13-
List<FlowGroup> list(Collection<String> ids);
14-
1512
List<Flow> flows(String id);
1613

1714
FlowGroup create(String name);

core/src/main/java/com/flowci/core/flow/service/FlowGroupServiceImpl.java

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package com.flowci.core.flow.service;
22

3+
import com.flowci.core.common.manager.SessionManager;
34
import com.flowci.core.flow.dao.FlowDao;
45
import com.flowci.core.flow.dao.FlowGroupDao;
6+
import com.flowci.core.flow.dao.FlowUserDao;
57
import com.flowci.core.flow.domain.Flow;
68
import com.flowci.core.flow.domain.FlowGroup;
79
import com.flowci.exception.DuplicateException;
810
import com.flowci.exception.NotFoundException;
11+
import com.google.common.collect.Sets;
912
import org.springframework.beans.factory.annotation.Autowired;
1013
import org.springframework.dao.DuplicateKeyException;
1114
import org.springframework.stereotype.Service;
1215

13-
import java.util.Collection;
1416
import java.util.List;
1517
import java.util.Optional;
1618

@@ -21,10 +23,19 @@ public class FlowGroupServiceImpl implements FlowGroupService {
2123

2224
private final FlowGroupDao flowGroupDao;
2325

26+
private final FlowUserDao flowUserDao;
27+
28+
private final SessionManager sessionManager;
29+
2430
@Autowired
25-
public FlowGroupServiceImpl(FlowDao flowDao, FlowGroupDao flowGroupDao) {
31+
public FlowGroupServiceImpl(FlowDao flowDao,
32+
FlowGroupDao flowGroupDao,
33+
FlowUserDao flowUserDao,
34+
SessionManager sessionManager) {
2635
this.flowDao = flowDao;
2736
this.flowGroupDao = flowGroupDao;
37+
this.flowUserDao = flowUserDao;
38+
this.sessionManager = sessionManager;
2839
}
2940

3041
@Override
@@ -36,17 +47,17 @@ public FlowGroup get(String name) {
3647
return optional.get();
3748
}
3849

39-
@Override
40-
public List<FlowGroup> list(Collection<String> ids) {
41-
return flowGroupDao.findAllByIdIn(ids);
42-
}
43-
4450
@Override
4551
public FlowGroup create(String name) {
52+
var email = sessionManager.getUserEmail();
53+
54+
var group = new FlowGroup();
55+
group.setName(name);
56+
4657
try {
47-
var group = new FlowGroup();
48-
group.setName(name);
49-
return flowGroupDao.save(group);
58+
flowGroupDao.save(group);
59+
flowUserDao.insert(group.getId(), Sets.newHashSet(email));
60+
return group;
5061
} catch (DuplicateKeyException e) {
5162
throw new DuplicateException("Group {0} already exists", name);
5263
}
@@ -56,14 +67,18 @@ public FlowGroup create(String name) {
5667
public void addToGroup(String flowName, String groupName) {
5768
var group = get(groupName);
5869
var flow = getFlow(flowName);
59-
flow.setGroupId(group.getId());
70+
flow.setParentId(group.getId());
6071
flowDao.save(flow);
72+
73+
// add all users from current flow to parent group
74+
var users = flowUserDao.findAllUsers(flow.getId());
75+
flowUserDao.insert(group.getId(), Sets.newHashSet(users));
6176
}
6277

6378
@Override
6479
public void removeFromGroup(String flowName) {
6580
var flow = getFlow(flowName);
66-
flow.setGroupId(null);
81+
flow.setParentId(null);
6782
flowDao.save(flow);
6883
}
6984

@@ -74,7 +89,7 @@ public void delete(String name) {
7489

7590
@Override
7691
public List<Flow> flows(String id) {
77-
return flowDao.findAllByGroupId(id);
92+
return flowDao.findAllByParentId(id);
7893
}
7994

8095
private Flow getFlow(String flowName) {

core/src/main/java/com/flowci/core/flow/service/FlowServiceImpl.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -176,20 +176,17 @@ public Flow create(String name, String groupName) {
176176

177177
// set properties
178178
flow.setName(name);
179-
flow.setGroupId(groupId);
179+
flow.setParentId(groupId);
180180
setupDefaultVars(flow);
181181

182182
try {
183183
flowDao.save(flow);
184-
flowUserDao.create(flow.getId());
185184
fileManager.create(flow);
186-
addUsers(flow, flow.getCreatedBy());
187185
eventManager.publish(new FlowCreatedEvent(this, flow));
188186
} catch (DuplicateKeyException e) {
189187
throw new DuplicateException("Flow {0} already exists", name);
190188
} catch (IOException e) {
191189
flowDao.delete(flow);
192-
flowUserDao.delete(flow.getId());
193190
log.error(e);
194191
throw new StatusException("Cannot create flow workspace");
195192
}
@@ -218,7 +215,12 @@ public Flow confirm(String name, ConfirmOption option) {
218215
flow.setStatus(Status.CONFIRMED);
219216

220217
if (option.hasBlankTemplate()) {
221-
return flowDao.save(flow);
218+
flowDao.save(flow);
219+
220+
flowUserDao.create(flow.getId());
221+
addUsers(flow, flow.getUpdatedBy());
222+
223+
return flow;
222224
}
223225

224226
// load YAML from template
@@ -238,7 +240,10 @@ public Flow confirm(String name, ConfirmOption option) {
238240
return flow;
239241
}
240242

241-
return flowDao.save(flow);
243+
flowDao.save(flow);
244+
flowUserDao.create(flow.getId());
245+
addUsers(flow, flow.getUpdatedBy());
246+
return flow;
242247
}
243248

244249
@Override
@@ -297,7 +302,12 @@ public String setAuthCredential(String name, SimpleAuthPair keyPair) {
297302

298303
@Override
299304
public void addUsers(Flow flow, String... emails) {
300-
flowUserDao.insert(flow.getId(), Sets.newHashSet(emails));
305+
var emailSet = Sets.newHashSet(emails);
306+
flowUserDao.insert(flow.getId(), emailSet);
307+
308+
if (flow.hasParentId()) {
309+
flowUserDao.insert(flow.getParentId(), emailSet);
310+
}
301311
}
302312

303313
@Override

0 commit comments

Comments
 (0)