Skip to content

Commit

Permalink
Merge pull request #341 from dinukaamarasinghe817/main
Browse files Browse the repository at this point in the history
Update test cases for Redis DB
  • Loading branch information
daneshk authored Mar 26, 2024
2 parents 4cdbb91 + 4b499d5 commit 336d3fe
Show file tree
Hide file tree
Showing 31 changed files with 159 additions and 153 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ stdlibPersistVersion=1.3.0-20240314-140700-7048f30
stdlibPersistSqlVersion=1.3.0-20240320-162400-4d37e2f
stdlibPersistInmemoryVersion=1.2.0
stdlibPersistGoogleSheetVersion=1.2.0
stdlibPersistRedisVersion=0.1.0-20240313-155900-0f5ff0b
stdlibPersistRedisVersion=0.1.0-20240325-105100-6b8bf36

# Persist native jar maven dependencies
persistSqlNativeVersion=1.3.0-SNAPSHOT
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@
import ballerina/persist as _;
import ballerina/time;

type Follow record {|
readonly int id;
User leader;
User follower;
time:Civil timestamp;
|};

type User record {|
readonly int id;
string name;
Expand All @@ -39,13 +46,6 @@ type Post record {|
Comment[] comments;
|};

type Follow record {|
readonly int id;
User leader;
User follower;
time:Civil timestamp;
|};

type Comment record {|
readonly int id;
string comment;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,3 @@ distribution = "2201.9.0-20240118-000800-7398ff0b"

[build-options]
observabilityIncluded = false

Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,3 @@ public type Doctor record {|
decimal salary;
Appointment[] appointments;
|};

Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import ballerina/persist;
import ballerinax/persist.redis as predis;
import ballerinax/redis;

const FOLLOW = "follows";
const USER = "users";
const POST = "posts";
const FOLLOW = "follows";
const COMMENT = "comments";

public isolated client class Client {
Expand All @@ -19,6 +19,29 @@ public isolated client class Client {
private final map<predis:RedisClient> persistClients;

private final record {|predis:RedisMetadata...;|} & readonly metadata = {
[FOLLOW]: {
entityName: "Follow",
collectionName: "Follow",
fieldMetadata: {
id: {fieldName: "id", fieldDataType: predis:INT},
leaderId: {fieldName: "leaderId", fieldDataType: predis:INT},
followerId: {fieldName: "followerId", fieldDataType: predis:INT},
timestamp: {fieldName: "timestamp", fieldDataType: predis:STRING},
"leader.id": {relation: {entityName: "leader", refField: "id", refFieldDataType: predis:INT}},
"leader.name": {relation: {entityName: "leader", refField: "name", refFieldDataType: predis:STRING}},
"leader.birthDate": {relation: {entityName: "leader", refField: "birthDate", refFieldDataType: predis:DATE}},
"leader.mobileNumber": {relation: {entityName: "leader", refField: "mobileNumber", refFieldDataType: predis:STRING}},
"follower.id": {relation: {entityName: "follower", refField: "id", refFieldDataType: predis:INT}},
"follower.name": {relation: {entityName: "follower", refField: "name", refFieldDataType: predis:STRING}},
"follower.birthDate": {relation: {entityName: "follower", refField: "birthDate", refFieldDataType: predis:DATE}},
"follower.mobileNumber": {relation: {entityName: "follower", refField: "mobileNumber", refFieldDataType: predis:STRING}}
},
keyFields: ["id"],
refMetadata: {
leader: {entity: User, fieldName: "leader", refCollection: "User", refMetaDataKey: "followers", refFields: ["id"], joinFields: ["leaderId"], 'type: predis:ONE_TO_MANY},
follower: {entity: User, fieldName: "follower", refCollection: "User", refMetaDataKey: "following", refFields: ["id"], joinFields: ["followerId"], 'type: predis:ONE_TO_MANY}
}
},
[USER]: {
entityName: "User",
collectionName: "User",
Expand Down Expand Up @@ -77,33 +100,10 @@ public isolated client class Client {
},
keyFields: ["id"],
refMetadata: {
user: {entity: User, fieldName: "user", refCollection: "User", refFields: ["id"], joinFields: ["userId"], 'type: predis:ONE_TO_MANY},
user: {entity: User, fieldName: "user", refCollection: "User", refMetaDataKey: "posts", refFields: ["id"], joinFields: ["userId"], 'type: predis:ONE_TO_MANY},
comments: {entity: Comment, fieldName: "comments", refCollection: "Comment", refFields: ["postId"], joinFields: ["id"], 'type: predis:MANY_TO_ONE}
}
},
[FOLLOW]: {
entityName: "Follow",
collectionName: "Follow",
fieldMetadata: {
id: {fieldName: "id", fieldDataType: predis:INT},
leaderId: {fieldName: "leaderId", fieldDataType: predis:INT},
followerId: {fieldName: "followerId", fieldDataType: predis:INT},
timestamp: {fieldName: "timestamp", fieldDataType: predis:STRING},
"leader.id": {relation: {entityName: "leader", refField: "id", refFieldDataType: predis:INT}},
"leader.name": {relation: {entityName: "leader", refField: "name", refFieldDataType: predis:STRING}},
"leader.birthDate": {relation: {entityName: "leader", refField: "birthDate", refFieldDataType: predis:DATE}},
"leader.mobileNumber": {relation: {entityName: "leader", refField: "mobileNumber", refFieldDataType: predis:STRING}},
"follower.id": {relation: {entityName: "follower", refField: "id", refFieldDataType: predis:INT}},
"follower.name": {relation: {entityName: "follower", refField: "name", refFieldDataType: predis:STRING}},
"follower.birthDate": {relation: {entityName: "follower", refField: "birthDate", refFieldDataType: predis:DATE}},
"follower.mobileNumber": {relation: {entityName: "follower", refField: "mobileNumber", refFieldDataType: predis:STRING}}
},
keyFields: ["id"],
refMetadata: {
leader: {entity: User, fieldName: "leader", refCollection: "User", refFields: ["id"], joinFields: ["leaderId"], 'type: predis:ONE_TO_MANY},
follower: {entity: User, fieldName: "follower", refCollection: "User", refFields: ["id"], joinFields: ["followerId"], 'type: predis:ONE_TO_MANY}
}
},
[COMMENT]: {
entityName: "Comment",
collectionName: "Comment",
Expand All @@ -126,8 +126,8 @@ public isolated client class Client {
},
keyFields: ["id"],
refMetadata: {
user: {entity: User, fieldName: "user", refCollection: "User", refFields: ["id"], joinFields: ["userId"], 'type: predis:ONE_TO_MANY},
post: {entity: Post, fieldName: "post", refCollection: "Post", refFields: ["id"], joinFields: ["postId"], 'type: predis:ONE_TO_MANY}
user: {entity: User, fieldName: "user", refCollection: "User", refMetaDataKey: "comments", refFields: ["id"], joinFields: ["userId"], 'type: predis:ONE_TO_MANY},
post: {entity: Post, fieldName: "post", refCollection: "Post", refMetaDataKey: "comments", refFields: ["id"], joinFields: ["postId"], 'type: predis:ONE_TO_MANY}
}
}
};
Expand All @@ -139,125 +139,125 @@ public isolated client class Client {
}
self.dbClient = dbClient;
self.persistClients = {
[FOLLOW]: check new (dbClient, self.metadata.get(FOLLOW)),
[USER]: check new (dbClient, self.metadata.get(USER)),
[POST]: check new (dbClient, self.metadata.get(POST)),
[FOLLOW]: check new (dbClient, self.metadata.get(FOLLOW)),
[COMMENT]: check new (dbClient, self.metadata.get(COMMENT))
};
}

isolated resource function get users(UserTargetType targetType = <>) returns stream<targetType, persist:Error?> = @java:Method {
isolated resource function get follows(FollowTargetType targetType = <>) returns stream<targetType, persist:Error?> = @java:Method {
'class: "io.ballerina.stdlib.persist.redis.datastore.RedisProcessor",
name: "query"
} external;

isolated resource function get users/[int id](UserTargetType targetType = <>) returns targetType|persist:Error = @java:Method {
isolated resource function get follows/[int id](FollowTargetType targetType = <>) returns targetType|persist:Error = @java:Method {
'class: "io.ballerina.stdlib.persist.redis.datastore.RedisProcessor",
name: "queryOne"
} external;

isolated resource function post users(UserInsert[] data) returns int[]|persist:Error {
isolated resource function post follows(FollowInsert[] data) returns int[]|persist:Error {
predis:RedisClient redisClient;
lock {
redisClient = self.persistClients.get(USER);
redisClient = self.persistClients.get(FOLLOW);
}
_ = check redisClient.runBatchInsertQuery(data);
return from UserInsert inserted in data
return from FollowInsert inserted in data
select inserted.id;
}

isolated resource function put users/[int id](UserUpdate value) returns User|persist:Error {
isolated resource function put follows/[int id](FollowUpdate value) returns Follow|persist:Error {
predis:RedisClient redisClient;
lock {
redisClient = self.persistClients.get(USER);
redisClient = self.persistClients.get(FOLLOW);
}
_ = check redisClient.runUpdateQuery(id, value);
return self->/users/[id].get();
return self->/follows/[id].get();
}

isolated resource function delete users/[int id]() returns User|persist:Error {
User result = check self->/users/[id].get();
isolated resource function delete follows/[int id]() returns Follow|persist:Error {
Follow result = check self->/follows/[id].get();
predis:RedisClient redisClient;
lock {
redisClient = self.persistClients.get(USER);
redisClient = self.persistClients.get(FOLLOW);
}
_ = check redisClient.runDeleteQuery(id);
return result;
}

isolated resource function get posts(PostTargetType targetType = <>) returns stream<targetType, persist:Error?> = @java:Method {
isolated resource function get users(UserTargetType targetType = <>) returns stream<targetType, persist:Error?> = @java:Method {
'class: "io.ballerina.stdlib.persist.redis.datastore.RedisProcessor",
name: "query"
} external;

isolated resource function get posts/[int id](PostTargetType targetType = <>) returns targetType|persist:Error = @java:Method {
isolated resource function get users/[int id](UserTargetType targetType = <>) returns targetType|persist:Error = @java:Method {
'class: "io.ballerina.stdlib.persist.redis.datastore.RedisProcessor",
name: "queryOne"
} external;

isolated resource function post posts(PostInsert[] data) returns int[]|persist:Error {
isolated resource function post users(UserInsert[] data) returns int[]|persist:Error {
predis:RedisClient redisClient;
lock {
redisClient = self.persistClients.get(POST);
redisClient = self.persistClients.get(USER);
}
_ = check redisClient.runBatchInsertQuery(data);
return from PostInsert inserted in data
return from UserInsert inserted in data
select inserted.id;
}

isolated resource function put posts/[int id](PostUpdate value) returns Post|persist:Error {
isolated resource function put users/[int id](UserUpdate value) returns User|persist:Error {
predis:RedisClient redisClient;
lock {
redisClient = self.persistClients.get(POST);
redisClient = self.persistClients.get(USER);
}
_ = check redisClient.runUpdateQuery(id, value);
return self->/posts/[id].get();
return self->/users/[id].get();
}

isolated resource function delete posts/[int id]() returns Post|persist:Error {
Post result = check self->/posts/[id].get();
isolated resource function delete users/[int id]() returns User|persist:Error {
User result = check self->/users/[id].get();
predis:RedisClient redisClient;
lock {
redisClient = self.persistClients.get(POST);
redisClient = self.persistClients.get(USER);
}
_ = check redisClient.runDeleteQuery(id);
return result;
}

isolated resource function get follows(FollowTargetType targetType = <>) returns stream<targetType, persist:Error?> = @java:Method {
isolated resource function get posts(PostTargetType targetType = <>) returns stream<targetType, persist:Error?> = @java:Method {
'class: "io.ballerina.stdlib.persist.redis.datastore.RedisProcessor",
name: "query"
} external;

isolated resource function get follows/[int id](FollowTargetType targetType = <>) returns targetType|persist:Error = @java:Method {
isolated resource function get posts/[int id](PostTargetType targetType = <>) returns targetType|persist:Error = @java:Method {
'class: "io.ballerina.stdlib.persist.redis.datastore.RedisProcessor",
name: "queryOne"
} external;

isolated resource function post follows(FollowInsert[] data) returns int[]|persist:Error {
isolated resource function post posts(PostInsert[] data) returns int[]|persist:Error {
predis:RedisClient redisClient;
lock {
redisClient = self.persistClients.get(FOLLOW);
redisClient = self.persistClients.get(POST);
}
_ = check redisClient.runBatchInsertQuery(data);
return from FollowInsert inserted in data
return from PostInsert inserted in data
select inserted.id;
}

isolated resource function put follows/[int id](FollowUpdate value) returns Follow|persist:Error {
isolated resource function put posts/[int id](PostUpdate value) returns Post|persist:Error {
predis:RedisClient redisClient;
lock {
redisClient = self.persistClients.get(FOLLOW);
redisClient = self.persistClients.get(POST);
}
_ = check redisClient.runUpdateQuery(id, value);
return self->/follows/[id].get();
return self->/posts/[id].get();
}

isolated resource function delete follows/[int id]() returns Follow|persist:Error {
Follow result = check self->/follows/[id].get();
isolated resource function delete posts/[int id]() returns Post|persist:Error {
Post result = check self->/posts/[id].get();
predis:RedisClient redisClient;
lock {
redisClient = self.persistClients.get(FOLLOW);
redisClient = self.persistClients.get(POST);
}
_ = check redisClient.runDeleteQuery(id);
return result;
Expand Down Expand Up @@ -310,4 +310,3 @@ public isolated client class Client {
return result;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,3 @@
import ballerinax/redis;

configurable redis:ConnectionConfig & readonly redis = ?;

Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,36 @@
// It should not be modified by hand.
import ballerina/time;

public type Follow record {|
readonly int id;
int leaderId;
int followerId;
time:Civil timestamp;
|};

public type FollowOptionalized record {|
int id?;
int leaderId?;
int followerId?;
time:Civil timestamp?;
|};

public type FollowWithRelations record {|
*FollowOptionalized;
UserOptionalized leader?;
UserOptionalized follower?;
|};

public type FollowTargetType typedesc<FollowWithRelations>;

public type FollowInsert Follow;

public type FollowUpdate record {|
int leaderId?;
int followerId?;
time:Civil timestamp?;
|};

public type User record {|
readonly int id;
string name;
Expand Down Expand Up @@ -71,36 +101,6 @@ public type PostUpdate record {|
int userId?;
|};

public type Follow record {|
readonly int id;
int leaderId;
int followerId;
time:Civil timestamp;
|};

public type FollowOptionalized record {|
int id?;
int leaderId?;
int followerId?;
time:Civil timestamp?;
|};

public type FollowWithRelations record {|
*FollowOptionalized;
UserOptionalized leader?;
UserOptionalized follower?;
|};

public type FollowTargetType typedesc<FollowWithRelations>;

public type FollowInsert Follow;

public type FollowUpdate record {|
int leaderId?;
int followerId?;
time:Civil timestamp?;
|};

public type Comment record {|
readonly int id;
string comment;
Expand Down Expand Up @@ -133,4 +133,3 @@ public type CommentUpdate record {|
int userId?;
int postId?;
|};

Loading

0 comments on commit 336d3fe

Please sign in to comment.