// Copyright © 2023 OpenIM SDK. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //go:build js && wasm // +build js,wasm package indexdb import ( "context" "github.com/openimsdk/openim-sdk-core/v3/wasm/exec" ) //1,使用wasm原生的方式,tinygo应用于go的嵌入式领域,支持的功能有限,支持go语言的子集,甚至json序列化都无法支持 //2.函数命名遵从驼峰命名 //3.提供的sql生成语句中,关于bool值需要特殊处理,create语句的设计的到bool值的需要在创建语句中单独说明,这是因为在原有的sqlite中并不支持bool,用整数1或者0替代,gorm对其做了转换。 //4.提供的sql生成语句中,字段名是下划线方式 例如:recv_id,但是接口转换的数据json tag字段的风格是recvID,类似的所有的字段需要做个map映射 //5.任何涉及到gorm获取的是否需要返回错误,比如take和find都需要在文档上说明 //6.任何涉及到update的操作,一定要看gorm原型中实现,如果有select(*)则不需要用temp_struct中的结构体 //7.任何和接口重名的时候,db接口统一加上后缀DB //8.任何map类型统一使用json字符串转换,文档说明 type IndexDB struct { LocalUsers LocalConversations *LocalChatLogs LocalSuperGroupChatLogs LocalSuperGroup LocalConversationUnreadMessages LocalGroups LocalGroupMember LocalGroupRequest LocalCacheMessage LocalStrangers LocalUserCommand *FriendRequest *Black *Friend LocalChatLogReactionExtensions loginUserID string } func (i IndexDB) Close(ctx context.Context) error { _, err := exec.Exec() return err } func (i IndexDB) InitDB(ctx context.Context, userID string, dataDir string) error { _, err := exec.Exec(userID, dataDir) return err } func (i IndexDB) SetChatLogFailedStatus(ctx context.Context) { //msgList, err := i.GetSendingMessageList() //if err != nil { // log.Error("", "GetSendingMessageList failed ", err.Error()) // return //} //for _, v := range msgList { // v.Status = constant.MsgStatusSendFailed // err := i.UpdateMessage(v) // if err != nil { // log.Error("", "UpdateMessage failed ", err.Error(), v) // continue // } //} //groupIDList, err := i.GetReadDiffusionGroupIDList() //if err != nil { // log.Error("", "GetReadDiffusionGroupIDList failed ", err.Error()) // return //} //for _, v := range groupIDList { // msgList, err := i.SuperGroupGetSendingMessageList(v) // if err != nil { // log.Error("", "GetSendingMessageList failed ", err.Error()) // return // } // if len(msgList) > 0 { // for _, v := range msgList { // v.Status = constant.MsgStatusSendFailed // err := i.SuperGroupUpdateMessage(v) // if err != nil { // log.Error("", "UpdateMessage failed ", err.Error(), v) // continue // } // } // } // //} }