Skip to content

Commit 3c0a70b

Browse files
committed
Add modification query interface
1 parent 01c1b0c commit 3c0a70b

6 files changed

Lines changed: 135 additions & 44 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ jdk_version=17
77
author=Simple Mocks
88
project_name=api-session
99
group=com.github.simple-mocks
10-
version=0.0.5
10+
version=0.0.6
1111

1212
# service deps
1313
lib_api_error_version=0.0.7
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.github.simple_mocks.session.api;
2+
3+
import com.github.simple_mocks.session.api.dto.action.Action;
4+
5+
import java.util.List;
6+
7+
/**
8+
* @author sibmaks
9+
* @since 0.0.6
10+
*/
11+
public interface ModificationQuery {
12+
/**
13+
* Get a list of actions for modification
14+
*
15+
* @return list of actions
16+
*/
17+
List<Action> actions();
18+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.github.simple_mocks.session.api;
2+
3+
import com.github.simple_mocks.session.api.dto.action.Action;
4+
import com.github.simple_mocks.session.api.dto.action.DeleteAction;
5+
import com.github.simple_mocks.session.api.dto.action.SetAction;
6+
import com.github.simple_mocks.session.api.impl.ModificationQueryImpl;
7+
import jakarta.annotation.Nonnull;
8+
9+
import java.io.Serializable;
10+
import java.util.ArrayList;
11+
import java.util.Collections;
12+
import java.util.List;
13+
14+
/**
15+
* @author sibmaks
16+
* @since 0.0.6
17+
*/
18+
public final class ModificationQueryBuilder {
19+
private final List<Action> actions;
20+
21+
private ModificationQueryBuilder(Action action) {
22+
this.actions = new ArrayList<>();
23+
this.actions.add(action);
24+
}
25+
26+
/**
27+
* Create builder instance of {@link ModificationQueryBuilder}
28+
*
29+
* @param action 1st action
30+
* @param <T> type of action
31+
* @return instance of {@link ModificationQueryBuilder}
32+
*/
33+
public static <T extends Action> ModificationQueryBuilder builder(T action) {
34+
return new ModificationQueryBuilder(action);
35+
}
36+
37+
/**
38+
* Build modification query
39+
*
40+
* @return instance of {@link ModificationQuery}
41+
*/
42+
public ModificationQuery build() {
43+
return new ModificationQueryImpl(Collections.unmodifiableList(actions));
44+
}
45+
46+
/**
47+
* Add put attribute value action<br/>
48+
*
49+
* @param section section in session
50+
* @param attribute attribute code
51+
* @param value attribute value
52+
* @param <T> type of attribute
53+
* @return self reference
54+
*/
55+
public <T extends Serializable> ModificationQueryBuilder putAttribute(@Nonnull String section,
56+
@Nonnull String attribute,
57+
T value) {
58+
var action = new SetAction(section, attribute, value);
59+
this.actions.add(action);
60+
return this;
61+
}
62+
63+
/**
64+
* Add remove attribute action<br/>
65+
*
66+
* @param section section in session
67+
* @param attribute attribute code
68+
* @return self reference
69+
*/
70+
public ModificationQueryBuilder removeAttribute(@Nonnull String section,
71+
@Nonnull String attribute) {
72+
var action = new DeleteAction(section, attribute);
73+
this.actions.add(action);
74+
return this;
75+
}
76+
77+
78+
}
Lines changed: 24 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.github.simple_mocks.session.api;
22

33
import com.github.simple_mocks.session.api.dto.Session;
4-
import com.github.simple_mocks.session.api.dto.action.Action;
5-
import com.github.simple_mocks.session.api.dto.action.DeleteAction;
6-
import com.github.simple_mocks.session.api.dto.action.SetAction;
4+
import com.github.simple_mocks.session.api.dto.SessionOwnerType;
5+
import jakarta.annotation.Nonnull;
76

87
import java.io.Serializable;
98
import java.util.List;
9+
import java.util.Map;
1010
import java.util.Set;
1111

1212
/**
@@ -22,7 +22,7 @@ public interface SessionService {
2222
* @param sessionId session identifier
2323
* @return session or null
2424
*/
25-
Session get(SessionId sessionId);
25+
Session get(@Nonnull SessionId sessionId);
2626

2727
/**
2828
* Get the last version of session common info.<br/>
@@ -31,18 +31,19 @@ public interface SessionService {
3131
* @param uid session uid
3232
* @return session or null
3333
*/
34-
Session get(String uid);
34+
Session get(@Nonnull String uid);
3535

3636
/**
3737
* Get attribute names from session's section.<br/>
38-
* In case if a section not exists when null should be returned.<br/>
38+
* In case if a section doesn't exist when null should be returned.<br/>
3939
* If session isn't found when {@link SessionErrors#NOT_EXISTS} should be thrown.
4040
*
4141
* @param sessionId session identifier
4242
* @param section section in session
4343
* @return attribute names
4444
*/
45-
Set<String> getAttributeNames(SessionId sessionId, String section);
45+
Set<String> getAttributeNames(@Nonnull SessionId sessionId,
46+
@Nonnull String section);
4647

4748
/**
4849
* Get attribute value from session.<br/>
@@ -55,53 +56,34 @@ public interface SessionService {
5556
* @param <T> type of attribute
5657
* @return attribute value or null
5758
*/
58-
<T extends Serializable> T getAttribute(SessionId sessionId, String section, String attribute);
59+
<T extends Serializable> T getAttribute(@Nonnull SessionId sessionId,
60+
@Nonnull String section,
61+
@Nonnull String attribute);
5962

6063
/**
61-
* Put attribute value into session's section<br/>
62-
* If session not found when {@link SessionErrors#NOT_EXISTS} should be thrown.<br/>
63-
* If a section is readonly when {@link SessionErrors#READONLY} should be thrown.
64+
* Create session with passed data.<br/>
6465
*
65-
* @param sessionId session id
66-
* @param section section in session
67-
* @param attribute attribute code
68-
* @param value attribute value
69-
* @param <T> type of attribute
70-
* @return new session identifier
71-
*/
72-
default <T extends Serializable> SessionId putAttribute(
73-
SessionId sessionId,
74-
String section,
75-
String attribute,
76-
T value) {
77-
var action = new SetAction(section, attribute, value);
78-
return update(sessionId, List.of(action));
79-
}
80-
81-
/**
82-
* Remove attribute value from session<br/>
83-
* If session not found when {@link SessionErrors#NOT_EXISTS} should be thrown.<br/>
84-
* If a section is readonly when {@link SessionErrors#READONLY} should be thrown.
85-
*
86-
* @param sessionId session id
87-
* @param section section in session
88-
* @param attribute attribute code
66+
* @param sections shared sections data
67+
* @param ownerType session owner type
68+
* @param ownerId session owner id
69+
* @param permissions list of user permissions
8970
* @return new session identifier
9071
*/
91-
default SessionId removeAttribute(SessionId sessionId, String section, String attribute) {
92-
var action = new DeleteAction(section, attribute);
93-
return update(sessionId, List.of(action));
94-
}
72+
SessionId create(@Nonnull Map<String, Map<String, Serializable>> sections,
73+
@Nonnull SessionOwnerType ownerType,
74+
@Nonnull String ownerId,
75+
@Nonnull List<String> permissions);
9576

9677
/**
9778
* Update session by applying passed actions.<br/>
9879
* Method should apply actions transitionally, in case if some action can't be applied session state should be reset.<br/>
9980
* If session isn't found when {@link SessionErrors#NOT_EXISTS} should be thrown.<br/>
10081
* If any of sections are readonly when {@link SessionErrors#READONLY} should be thrown.
10182
*
102-
* @param sessionId session id
103-
* @param actions actions
83+
* @param sessionId session id
84+
* @param modificationQuery query to modify session
10485
* @return new session identifier
10586
*/
106-
SessionId update(SessionId sessionId, List<? extends Action> actions);
87+
SessionId update(@Nonnull SessionId sessionId,
88+
@Nonnull ModificationQuery modificationQuery);
10789
}

src/main/java/com/github/simple_mocks/session/api/dto/action/Action.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*/
1414
@Getter
1515
@AllArgsConstructor
16-
public sealed class Action implements Serializable permits AddAction, DeleteAction, SetAction {
16+
public abstract sealed class Action implements Serializable permits AddAction, DeleteAction, SetAction {
1717
/**
1818
* The name of the section
1919
*/
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.github.simple_mocks.session.api.impl;
2+
3+
import com.github.simple_mocks.session.api.ModificationQuery;
4+
import com.github.simple_mocks.session.api.dto.action.Action;
5+
6+
import java.util.List;
7+
8+
/**
9+
* @author sibmaks
10+
* @since 0.0.6
11+
*/
12+
public record ModificationQueryImpl(List<Action> actions) implements ModificationQuery {
13+
}

0 commit comments

Comments
 (0)