im 服务端
This commit is contained in:
@@ -1452,7 +1452,7 @@ func createIMRelationTables(exec sqlExecutor) error {
|
||||
PRIMARY KEY(id),
|
||||
UNIQUE INDEX uk_im_favorites_favorite(favorite_id),
|
||||
UNIQUE INDEX uk_im_favorites_source(user_id, source_topic, source_seq),
|
||||
UNIQUE INDEX uk_im_favorites_idempotency(user_id, idempotency_key),
|
||||
UNIQUE INDEX uk_im_favorites_idempotency(user_id, ((NULLIF(idempotency_key, '')))),
|
||||
INDEX idx_im_favorites_inbox(user_id, id DESC),
|
||||
INDEX idx_im_favorites_type(user_id, item_type, id DESC)
|
||||
)`,
|
||||
|
||||
@@ -4420,7 +4420,38 @@ func (a *adapter) TenantFavoriteCreate(id t.TenantID, fav *t.FavoriteItem) (*t.F
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return a.TenantFavoriteGet(id, fav.UserID, fav.FavoriteID)
|
||||
item, err := a.TenantFavoriteGet(id, fav.UserID, fav.FavoriteID)
|
||||
if err == nil {
|
||||
return item, nil
|
||||
}
|
||||
if err != t.ErrNotFound {
|
||||
return nil, err
|
||||
}
|
||||
return a.tenantFavoriteFindExisting(ctx, id, fav)
|
||||
}
|
||||
|
||||
func (a *adapter) tenantFavoriteFindExisting(ctx context.Context, id t.TenantID, fav *t.FavoriteItem) (*t.FavoriteItem, error) {
|
||||
where := []string{"favorite_id=?", "(source_topic=? AND source_seq=?)"}
|
||||
args := []any{fav.FavoriteID, fav.SourceTopic, fav.SourceSeq}
|
||||
if fav.IdempotencyKey != "" {
|
||||
where = append(where, "idempotency_key=?")
|
||||
args = append(args, fav.IdempotencyKey)
|
||||
}
|
||||
args = append([]any{decodeUID(fav.UserID)}, args...)
|
||||
rows, err := a.db.QueryxContext(ctx, "SELECT * FROM im_favorites WHERE user_id=? AND ("+strings.Join(where, " OR ")+") ORDER BY id DESC LIMIT 1", args...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
if !rows.Next() {
|
||||
return nil, t.ErrNotFound
|
||||
}
|
||||
item, err := scanFavorite(rows)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
item.TenantID = id
|
||||
return &item, nil
|
||||
}
|
||||
|
||||
func (a *adapter) TenantFavoriteList(id t.TenantID, uid t.Uid, itemType, queryText, cursor string, limit int) ([]t.FavoriteItem, string, error) {
|
||||
|
||||
Reference in New Issue
Block a user