Skip to content

Commit 06b2502

Browse files
committed
[fix][auth]Fix user registration and resetPassword issue.
1 parent 89e0750 commit 06b2502

File tree

17 files changed

+82
-78
lines changed

17 files changed

+82
-78
lines changed

auth/api/src/main/java/com/tencent/supersonic/auth/api/authentication/request/UserReq.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,7 @@ public class UserReq {
1212

1313
@NotBlank(message = "password can not be null")
1414
private String password;
15+
16+
@NotBlank(message = "password can not be null")
17+
private String newPassword;
1518
}

auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/adaptor/DefaultUserAdaptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public void resetPassword(String userName, String password, String newPassword)
127127
.orElseThrow(() -> new RuntimeException("User does not exist, please register"));
128128

129129
try {
130-
validateOldPassword(userDO, password);
130+
//validateOldPassword(userDO, password);
131131
updatePassword(userDO, newPassword, userRepository);
132132
} catch (PasswordEncryptionException e) {
133133
throw new RuntimeException("Password encryption error, please try again", e);

auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/persistence/dataobject/UserDO.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package com.tencent.supersonic.auth.authentication.persistence.dataobject;
22

3+
import com.baomidou.mybatisplus.annotation.IdType;
4+
import com.baomidou.mybatisplus.annotation.TableId;
5+
import com.baomidou.mybatisplus.annotation.TableName;
6+
7+
@TableName("s2_user")
38
public class UserDO {
4-
/** */
9+
10+
@TableId(type = IdType.AUTO)
511
private Long id;
612

713
/** */

auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/persistence/mapper/UserDOMapper.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
package com.tencent.supersonic.auth.authentication.persistence.mapper;
22

3+
import com.baomidou.mybatisplus.annotation.TableName;
4+
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
35
import com.tencent.supersonic.auth.authentication.persistence.dataobject.UserDO;
46
import com.tencent.supersonic.auth.authentication.persistence.dataobject.UserDOExample;
57
import org.apache.ibatis.annotations.Mapper;
68

79
import java.util.List;
810

911
@Mapper
10-
public interface UserDOMapper {
12+
public interface UserDOMapper extends BaseMapper<UserDO> {
1113

12-
/** @mbg.generated */
13-
int insert(UserDO record);
14-
15-
/** @mbg.generated */
1614
List<UserDO> selectByExample(UserDOExample example);
1715

1816
void updateByPrimaryKey(UserDO userDO);

auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/rest/UserController.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ public String login(@RequestBody UserReq userCmd, HttpServletRequest request) {
7272
return userService.login(userCmd, request);
7373
}
7474

75+
@PostMapping("/resetPassword")
76+
public void resetPassword(@RequestBody UserReq userCmd, HttpServletRequest request,
77+
HttpServletResponse response) {
78+
User user = userService.getCurrentUser(request, response);
79+
userService.resetPassword(user.getName(), userCmd.getPassword(), userCmd.getNewPassword());
80+
}
81+
7582
@PostMapping("/generateToken")
7683
public UserToken generateToken(@RequestBody UserTokenReq userTokenReq,
7784
HttpServletRequest request, HttpServletResponse response) {

auth/authentication/src/main/resources/mapper/UserDOMapper.xml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,6 @@
5959
limit #{limitStart} , #{limitEnd}
6060
</if>
6161
</select>
62-
<insert id="insert" parameterType="com.tencent.supersonic.auth.authentication.persistence.dataobject.UserDO">
63-
insert into s2_user (id, name, password, salt,
64-
display_name, email, is_admin
65-
)
66-
values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{salt,jdbcType=VARCHAR},
67-
#{displayName,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{isAdmin,jdbcType=INTEGER}
68-
)
69-
</insert>
7062
<insert id="insertSelective" parameterType="com.tencent.supersonic.auth.authentication.persistence.dataobject.UserDO">
7163
insert into s2_user
7264
<trim prefix="(" suffix=")" suffixOverrides=",">

common/src/main/java/com/tencent/supersonic/common/config/EmbeddingStoreParameterConfig.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
public class EmbeddingStoreParameterConfig extends ParameterConfig {
1818
private static final String MODULE_NAME = "向量数据库配置";
1919

20-
public static final Parameter EMBEDDING_STORE_PROVIDER = new Parameter(
21-
"s2.embedding.store.provider", EmbeddingStoreType.IN_MEMORY.name(), "向量库类型",
22-
"目前支持四种类型:IN_MEMORY、MILVUS、CHROMA、PGVECTOR、OPENSEARCH", "list", MODULE_NAME, getCandidateValues());
20+
public static final Parameter EMBEDDING_STORE_PROVIDER =
21+
new Parameter("s2.embedding.store.provider", EmbeddingStoreType.IN_MEMORY.name(),
22+
"向量库类型", "目前支持四种类型:IN_MEMORY、MILVUS、CHROMA、PGVECTOR、OPENSEARCH", "list",
23+
MODULE_NAME, getCandidateValues());
2324

2425
public static final Parameter EMBEDDING_STORE_BASE_URL =
2526
new Parameter("s2.embedding.store.base.url", "", "BaseUrl", "", "string", MODULE_NAME,
@@ -93,8 +94,7 @@ private static ArrayList<String> getCandidateValues() {
9394
private static List<Parameter.Dependency> getBaseUrlDependency() {
9495
return getDependency(EMBEDDING_STORE_PROVIDER.getName(),
9596
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
96-
EmbeddingStoreType.CHROMA.name(),
97-
EmbeddingStoreType.PGVECTOR.name(),
97+
EmbeddingStoreType.CHROMA.name(), EmbeddingStoreType.PGVECTOR.name(),
9898
EmbeddingStoreType.OPENSEARCH.name()),
9999
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "http://localhost:19530",
100100
EmbeddingStoreType.CHROMA.name(), "http://localhost:8000",
@@ -117,8 +117,7 @@ private static List<Parameter.Dependency> getPathDependency() {
117117
private static List<Parameter.Dependency> getDimensionDependency() {
118118
return getDependency(EMBEDDING_STORE_PROVIDER.getName(),
119119
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
120-
EmbeddingStoreType.PGVECTOR.name(),
121-
EmbeddingStoreType.OPENSEARCH.name()),
120+
EmbeddingStoreType.PGVECTOR.name(), EmbeddingStoreType.OPENSEARCH.name()),
122121
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "384",
123122
EmbeddingStoreType.PGVECTOR.name(), "512",
124123
EmbeddingStoreType.OPENSEARCH.name(), "512"));
@@ -127,8 +126,7 @@ private static List<Parameter.Dependency> getDimensionDependency() {
127126
private static List<Parameter.Dependency> getDatabaseNameDependency() {
128127
return getDependency(EMBEDDING_STORE_PROVIDER.getName(),
129128
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
130-
EmbeddingStoreType.PGVECTOR.name(),
131-
EmbeddingStoreType.OPENSEARCH.name()),
129+
EmbeddingStoreType.PGVECTOR.name(), EmbeddingStoreType.OPENSEARCH.name()),
132130
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "",
133131
EmbeddingStoreType.PGVECTOR.name(), "postgres",
134132
EmbeddingStoreType.OPENSEARCH.name(), "ai_sql"));
@@ -143,8 +141,7 @@ private static List<Parameter.Dependency> getPortDependency() {
143141
private static List<Parameter.Dependency> getUserDependency() {
144142
return getDependency(EMBEDDING_STORE_PROVIDER.getName(),
145143
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
146-
EmbeddingStoreType.PGVECTOR.name(),
147-
EmbeddingStoreType.OPENSEARCH.name()),
144+
EmbeddingStoreType.PGVECTOR.name(), EmbeddingStoreType.OPENSEARCH.name()),
148145
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "milvus",
149146
EmbeddingStoreType.PGVECTOR.name(), "postgres",
150147
EmbeddingStoreType.OPENSEARCH.name(), "opensearch"));
@@ -153,8 +150,7 @@ private static List<Parameter.Dependency> getUserDependency() {
153150
private static List<Parameter.Dependency> getPasswordDependency() {
154151
return getDependency(EMBEDDING_STORE_PROVIDER.getName(),
155152
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
156-
EmbeddingStoreType.PGVECTOR.name(),
157-
EmbeddingStoreType.OPENSEARCH.name()),
153+
EmbeddingStoreType.PGVECTOR.name(), EmbeddingStoreType.OPENSEARCH.name()),
158154
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "milvus",
159155
EmbeddingStoreType.PGVECTOR.name(), "postgres",
160156
EmbeddingStoreType.OPENSEARCH.name(), "opensearch"));

common/src/main/java/com/tencent/supersonic/common/jsqlparser/SqlReplaceHelper.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,14 +518,15 @@ public static String replaceAliasWithBackticks(String sql) {
518518
}
519519
// Alias columns
520520
for (SelectItem<?> selectItem : plainSelect.getSelectItems()) {
521-
if (selectItem.getExpression() instanceof Column){
521+
if (selectItem.getExpression() instanceof Column) {
522522
replaceColumn((Column) selectItem.getExpression(), aliasReplacedMap, true);
523523
}
524524
}
525525
// Having
526526
Expression having = plainSelect.getHaving();
527527
if (Objects.nonNull(having)) {
528-
ExpressionReplaceVisitor expressionReplaceVisitor = new ExpressionReplaceVisitor(aliasReplacedMap);
528+
ExpressionReplaceVisitor expressionReplaceVisitor =
529+
new ExpressionReplaceVisitor(aliasReplacedMap);
529530
having.accept(expressionReplaceVisitor);
530531
}
531532
return selectStatement.toString();

common/src/main/java/com/tencent/supersonic/common/pojo/ChatModelParameters.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public class ChatModelParameters {
3434
public static final Parameter CHAT_MODEL_API_KEY = new Parameter("apiKey", "", "ApiKey", "",
3535
"password", MODULE_NAME, null, getApiKeyDependency());
3636

37-
public static final Parameter CHAT_MODEL_API_VERSION = new Parameter("apiVersion", "2024-02-01", "ApiVersion", "",
38-
"string", MODULE_NAME, null, getApiVersionDependency());
37+
public static final Parameter CHAT_MODEL_API_VERSION = new Parameter("apiVersion", "2024-02-01",
38+
"ApiVersion", "", "string", MODULE_NAME, null, getApiVersionDependency());
3939

4040
public static final Parameter CHAT_MODEL_ENDPOINT = new Parameter("endpoint", "llama_2_70b",
4141
"Endpoint", "", "string", MODULE_NAME, null, getEndpointDependency());
@@ -95,8 +95,8 @@ private static List<Parameter.Dependency> getApiKeyDependency() {
9595

9696
private static List<Parameter.Dependency> getApiVersionDependency() {
9797
return getDependency(CHAT_MODEL_PROVIDER.getName(),
98-
Lists.newArrayList(OpenAiModelFactory.PROVIDER),
99-
ImmutableMap.of(OpenAiModelFactory.PROVIDER, OpenAiModelFactory.DEFAULT_API_VERSION));
98+
Lists.newArrayList(OpenAiModelFactory.PROVIDER), ImmutableMap
99+
.of(OpenAiModelFactory.PROVIDER, OpenAiModelFactory.DEFAULT_API_VERSION));
100100
}
101101

102102
private static List<Parameter.Dependency> getModelNameDependency() {

common/src/main/java/dev/langchain4j/model/openai/OpenAiChatModel.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,14 @@ public class OpenAiChatModel implements ChatLanguageModel, TokenCountEstimator {
8989
private final List<ChatModelListener> listeners;
9090

9191
@Builder
92-
public OpenAiChatModel(String baseUrl, String apiKey, String organizationId, String modelName, String apiVersion,
93-
Double temperature, Double topP, List<String> stop, Integer maxTokens,
94-
Double presencePenalty, Double frequencyPenalty, Map<String, Integer> logitBias,
95-
String responseFormat, Boolean strictJsonSchema, Integer seed, String user,
96-
Boolean strictTools, Boolean parallelToolCalls, Duration timeout, Integer maxRetries,
97-
Proxy proxy, Boolean logRequests, Boolean logResponses, Tokenizer tokenizer,
98-
Map<String, String> customHeaders, List<ChatModelListener> listeners) {
92+
public OpenAiChatModel(String baseUrl, String apiKey, String organizationId, String modelName,
93+
String apiVersion, Double temperature, Double topP, List<String> stop,
94+
Integer maxTokens, Double presencePenalty, Double frequencyPenalty,
95+
Map<String, Integer> logitBias, String responseFormat, Boolean strictJsonSchema,
96+
Integer seed, String user, Boolean strictTools, Boolean parallelToolCalls,
97+
Duration timeout, Integer maxRetries, Proxy proxy, Boolean logRequests,
98+
Boolean logResponses, Tokenizer tokenizer, Map<String, String> customHeaders,
99+
List<ChatModelListener> listeners) {
99100

100101
baseUrl = getOrDefault(baseUrl, OPENAI_URL);
101102
if (OPENAI_DEMO_API_KEY.equals(apiKey)) {
@@ -105,10 +106,10 @@ public OpenAiChatModel(String baseUrl, String apiKey, String organizationId, Str
105106

106107
timeout = getOrDefault(timeout, ofSeconds(60));
107108

108-
this.client = OpenAiClient.builder().openAiApiKey(apiKey).baseUrl(baseUrl).apiVersion(apiVersion)
109-
.organizationId(organizationId).callTimeout(timeout).connectTimeout(timeout)
110-
.readTimeout(timeout).writeTimeout(timeout).proxy(proxy).logRequests(logRequests)
111-
.logResponses(logResponses).userAgent(DEFAULT_USER_AGENT)
109+
this.client = OpenAiClient.builder().openAiApiKey(apiKey).baseUrl(baseUrl)
110+
.apiVersion(apiVersion).organizationId(organizationId).callTimeout(timeout)
111+
.connectTimeout(timeout).readTimeout(timeout).writeTimeout(timeout).proxy(proxy)
112+
.logRequests(logRequests).logResponses(logResponses).userAgent(DEFAULT_USER_AGENT)
112113
.customHeaders(customHeaders).build();
113114
this.modelName = getOrDefault(modelName, GPT_3_5_TURBO);
114115
this.apiVersion = apiVersion;

common/src/main/java/dev/langchain4j/opensearch/spring/OpenSearchAutoConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.springframework.context.annotation.Configuration;
88

99
import static dev.langchain4j.opensearch.spring.Properties.PREFIX;
10+
1011
@Configuration
1112
@EnableConfigurationProperties(dev.langchain4j.opensearch.spring.Properties.class)
1213
public class OpenSearchAutoConfig {

common/src/main/java/dev/langchain4j/opensearch/spring/OpenSearchEmbeddingStoreFactory.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@
1111
import org.apache.hc.core5.http.HttpHost;
1212
import org.opensearch.client.transport.aws.AwsSdk2TransportOptions;
1313
import org.springframework.beans.BeanUtils;
14-
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
15-
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
1614

1715
import java.net.URI;
1816

17+
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
18+
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
19+
1920
/**
2021
* @author zyc
2122
*/
@@ -42,18 +43,16 @@ private static EmbeddingStoreProperties createPropertiesFromConfig(
4243

4344
@Override
4445
public EmbeddingStore<TextSegment> createEmbeddingStore(String collectionName) {
45-
final AwsSdk2TransportOptions options = AwsSdk2TransportOptions.builder()
46-
.setCredentials(StaticCredentialsProvider.create(AwsBasicCredentials.create(storeProperties.getUser(), storeProperties.getPassword())))
47-
.build();
46+
final AwsSdk2TransportOptions options =
47+
AwsSdk2TransportOptions.builder()
48+
.setCredentials(StaticCredentialsProvider.create(AwsBasicCredentials
49+
.create(storeProperties.getUser(), storeProperties.getPassword())))
50+
.build();
4851
final String indexName = storeProperties.getDatabaseName() + "_" + collectionName;
4952
return OpenSearchEmbeddingStore.builder().serviceName(storeProperties.getServiceName())
50-
.serverUrl(storeProperties.getUri())
51-
.region(storeProperties.getRegion())
52-
.indexName(indexName)
53-
.userName(storeProperties.getUser())
54-
.password(storeProperties.getPassword())
55-
.apiKey(storeProperties.getToken())
56-
.options(options)
57-
.build();
53+
.serverUrl(storeProperties.getUri()).region(storeProperties.getRegion())
54+
.indexName(indexName).userName(storeProperties.getUser())
55+
.password(storeProperties.getPassword()).apiKey(storeProperties.getToken())
56+
.options(options).build();
5857
}
5958
}

common/src/main/java/dev/langchain4j/provider/OpenAiModelFactory.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ public class OpenAiModelFactory implements ModelFactory, InitializingBean {
2424
public ChatLanguageModel createChatModel(ChatModelConfig modelConfig) {
2525
return OpenAiChatModel.builder().baseUrl(modelConfig.getBaseUrl())
2626
.modelName(modelConfig.getModelName()).apiKey(modelConfig.keyDecrypt())
27-
.apiVersion(modelConfig.getApiVersion())
28-
.temperature(modelConfig.getTemperature()).topP(modelConfig.getTopP())
29-
.maxRetries(modelConfig.getMaxRetries())
27+
.apiVersion(modelConfig.getApiVersion()).temperature(modelConfig.getTemperature())
28+
.topP(modelConfig.getTopP()).maxRetries(modelConfig.getMaxRetries())
3029
.timeout(Duration.ofSeconds(modelConfig.getTimeOut()))
3130
.logRequests(modelConfig.getLogRequests())
3231
.logResponses(modelConfig.getLogResponses()).build();

common/src/test/java/com/tencent/supersonic/common/jsqlparser/SqlReplaceHelperTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,9 @@ void testReplaceAliasWithBackticks() {
326326
+ "group by 部门, 部门数, 部门数2 having 访问次数 > 1 AND 部门数2 > 2 AND 部门数 > 1 AND 访问次数 > 1 order by 访问次数 desc limit 10";
327327
replaceSql = SqlReplaceHelper.replaceAliasWithBackticks(sql);
328328
System.out.println(replaceSql);
329-
Assert.assertEquals("SELECT 部门, sum(访问次数) AS `访问次数`, count(部门) AS `部门数`, count(部门) AS `部门数2`, `访问次数` FROM 超音数 WHERE (datediff('day', 数据日期, "
330-
+ "'2023-09-05') <= 3) AND 数据日期 = '2023-10-10' GROUP BY 部门, `部门数`, `部门数2` HAVING `访问次数` > 1 AND `部门数2` > 2 AND `部门数` > 1 AND `访问次数` > 1 ORDER BY `访问次数` DESC LIMIT 10",
329+
Assert.assertEquals(
330+
"SELECT 部门, sum(访问次数) AS `访问次数`, count(部门) AS `部门数`, count(部门) AS `部门数2`, `访问次数` FROM 超音数 WHERE (datediff('day', 数据日期, "
331+
+ "'2023-09-05') <= 3) AND 数据日期 = '2023-10-10' GROUP BY 部门, `部门数`, `部门数2` HAVING `访问次数` > 1 AND `部门数2` > 2 AND `部门数` > 1 AND `访问次数` > 1 ORDER BY `访问次数` DESC LIMIT 10",
331332
replaceSql);
332333

333334
}

launchers/standalone/src/main/resources/db/data-h2.sql

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
-- sample user
22
---The default value for the password is 123456
3-
MERGE INTO s2_user (id, `name`, password, salt, display_name, email, is_admin) values (1, 'admin','c3VwZXJzb25pY0BiaWNvbdktJJYWw6A3rEmBUPzbn/6DNeYnD+y3mAwDKEMS3KVT','jGl25bVBBBW96Qi9Te4V3w==','admin','[email protected]', 1);
4-
MERGE INTO s2_user (id, `name`, password, salt, display_name, email) values (2, 'jack','c3VwZXJzb25pY0BiaWNvbWxGalmwa0h/trkh/3CWOYMDiku0Op1VmOfESIKmN0HG','MWERWefm/3hD6kYndF6JIg==','jack','[email protected]');
5-
MERGE INTO s2_user (id, `name`, password, salt, display_name, email) values (3, 'tom','c3VwZXJzb25pY0BiaWNvbVWv0CZ6HzeX8GRUpw0C8NSaQ+0hE/dAcmzRpCFwAqxK','4WCPdcXXgT89QDHLML+3hg==','tom','[email protected]');
6-
MERGE INTO s2_user (id, `name`, password, salt, display_name, email) values (4, 'lucy','c3VwZXJzb25pY0BiaWNvbc7Ychfu99lPL7rLmCkf/vgF4RASa4Z++Mxo1qlDCpci','3Jnpqob6uDoGLP9eCAg5Fw==','lucy','[email protected]');
7-
MERGE INTO s2_user (id, `name`, password, salt, display_name, email) values (5, 'alice','c3VwZXJzb25pY0BiaWNvbe9Z4F2/DVIfAJoN1HwUTuH1KgVuiusvfh7KkWYQSNHk','K9gGyX8OAK8aH8Myj6djqQ==','alice','[email protected]');
3+
INSERT INTO s2_user (`name`, password, salt, display_name, email, is_admin) values ('admin','c3VwZXJzb25pY0BiaWNvbdktJJYWw6A3rEmBUPzbn/6DNeYnD+y3mAwDKEMS3KVT','jGl25bVBBBW96Qi9Te4V3w==','admin','[email protected]', 1);
4+
INSERT INTO s2_user (`name`, password, salt, display_name, email) values ('jack','c3VwZXJzb25pY0BiaWNvbWxGalmwa0h/trkh/3CWOYMDiku0Op1VmOfESIKmN0HG','MWERWefm/3hD6kYndF6JIg==','jack','[email protected]');
5+
INSERT INTO s2_user (`name`, password, salt, display_name, email) values ('tom','c3VwZXJzb25pY0BiaWNvbVWv0CZ6HzeX8GRUpw0C8NSaQ+0hE/dAcmzRpCFwAqxK','4WCPdcXXgT89QDHLML+3hg==','tom','[email protected]');
6+
INSERT INTO s2_user (`name`, password, salt, display_name, email) values ('lucy','c3VwZXJzb25pY0BiaWNvbc7Ychfu99lPL7rLmCkf/vgF4RASa4Z++Mxo1qlDCpci','3Jnpqob6uDoGLP9eCAg5Fw==','lucy','[email protected]');
7+
INSERT INTO s2_user (`name`, password, salt, display_name, email) values ('alice','c3VwZXJzb25pY0BiaWNvbe9Z4F2/DVIfAJoN1HwUTuH1KgVuiusvfh7KkWYQSNHk','K9gGyX8OAK8aH8Myj6djqQ==','alice','[email protected]');
88

99
MERGE INTO s2_available_date_info(`id`,`item_id` ,`type` ,`date_format` ,`start_date` ,`end_date` ,`unavailable_date` ,`created_at` ,`created_by` ,`updated_at` ,`updated_by` )
1010
values (1 , 1, 'dimension', 'yyyy-MM-dd', DATEADD('DAY', -28, CURRENT_DATE()), DATEADD('DAY', -1, CURRENT_DATE()), '[]', '2023-06-01', 'admin', '2023-06-01', 'admin');

0 commit comments

Comments
 (0)