fix room pin list sql assembly
This commit is contained in:
parent
ebc99a097d
commit
395470f3ba
@ -337,7 +337,7 @@ func (r *Repository) AdminListRoomPins(ctx context.Context, query roomservice.Ad
|
|||||||
}
|
}
|
||||||
where, args := adminRoomPinWhere(ctx, query)
|
where, args := adminRoomPinWhere(ctx, query)
|
||||||
var total int64
|
var total int64
|
||||||
if err := r.db.QueryRowContext(ctx, `SELECT COUNT(*) `+where, args...).Scan(&total); err != nil {
|
if err := r.db.QueryRowContext(ctx, `SELECT COUNT(*) `+adminRoomPinFromSQL()+where, args...).Scan(&total); err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
rows, err := r.db.QueryContext(ctx, adminRoomPinSelectSQL()+where+` ORDER BY p.weight DESC, p.expires_at_ms DESC, p.id DESC LIMIT ? OFFSET ?`, append(args, query.PageSize, (query.Page-1)*query.PageSize)...)
|
rows, err := r.db.QueryContext(ctx, adminRoomPinSelectSQL()+where+` ORDER BY p.weight DESC, p.expires_at_ms DESC, p.id DESC LIMIT ? OFFSET ?`, append(args, query.PageSize, (query.Page-1)*query.PageSize)...)
|
||||||
@ -426,7 +426,11 @@ func adminRoomPinSelectSQL() string {
|
|||||||
p.pinned_at_ms, p.expires_at_ms, p.cancelled_at_ms,
|
p.pinned_at_ms, p.expires_at_ms, p.cancelled_at_ms,
|
||||||
p.created_by_admin_id, p.cancelled_by_admin_id, p.created_at_ms, p.updated_at_ms,
|
p.created_by_admin_id, p.cancelled_by_admin_id, p.created_at_ms, p.updated_at_ms,
|
||||||
r.room_short_id, r.visible_region_id, r.title, r.cover_url, r.owner_user_id, r.status
|
r.room_short_id, r.visible_region_id, r.title, r.cover_url, r.owner_user_id, r.status
|
||||||
FROM room_region_pins p
|
` + adminRoomPinFromSQL()
|
||||||
|
}
|
||||||
|
|
||||||
|
func adminRoomPinFromSQL() string {
|
||||||
|
return ` FROM room_region_pins p
|
||||||
JOIN room_list_entries r ON r.app_code = p.app_code AND r.room_id = p.room_id `
|
JOIN room_list_entries r ON r.app_code = p.app_code AND r.room_id = p.room_id `
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,7 +465,7 @@ func adminRoomPinWhere(ctx context.Context, query roomservice.AdminRoomPinQuery)
|
|||||||
where = append(where, "(p.room_id LIKE ? ESCAPE '\\\\' OR r.room_short_id LIKE ? ESCAPE '\\\\' OR r.title LIKE ? ESCAPE '\\\\' OR CAST(r.owner_user_id AS CHAR) LIKE ? ESCAPE '\\\\')")
|
where = append(where, "(p.room_id LIKE ? ESCAPE '\\\\' OR r.room_short_id LIKE ? ESCAPE '\\\\' OR r.title LIKE ? ESCAPE '\\\\' OR CAST(r.owner_user_id AS CHAR) LIKE ? ESCAPE '\\\\')")
|
||||||
args = append(args, like, like, like, like)
|
args = append(args, like, like, like, like)
|
||||||
}
|
}
|
||||||
return ` FROM room_region_pins p JOIN room_list_entries r ON r.app_code = p.app_code AND r.room_id = p.room_id WHERE ` + strings.Join(where, " AND "), args
|
return ` WHERE ` + strings.Join(where, " AND "), args
|
||||||
}
|
}
|
||||||
|
|
||||||
func scanAdminRoomPin(scanner interface{ Scan(dest ...any) error }) (roomservice.AdminRoomPinEntry, error) {
|
func scanAdminRoomPin(scanner interface{ Scan(dest ...any) error }) (roomservice.AdminRoomPinEntry, error) {
|
||||||
|
|||||||
@ -0,0 +1,29 @@
|
|||||||
|
package mysql_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"hyapp/pkg/appcode"
|
||||||
|
roomservice "hyapp/services/room-service/internal/room/service"
|
||||||
|
"hyapp/services/room-service/internal/testutil/mysqltest"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAdminListRoomPinsEmptyTable(t *testing.T) {
|
||||||
|
repo := mysqltest.NewRepository(t)
|
||||||
|
ctx := appcode.WithContext(context.Background(), appcode.Default)
|
||||||
|
|
||||||
|
items, total, err := repo.AdminListRoomPins(ctx, roomservice.AdminRoomPinQuery{
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
Status: "active",
|
||||||
|
PinType: "region",
|
||||||
|
NowMS: 1000,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("list empty room pins failed: %v", err)
|
||||||
|
}
|
||||||
|
if total != 0 || len(items) != 0 {
|
||||||
|
t.Fatalf("empty room pins mismatch: total=%d len=%d", total, len(items))
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,7 +2,10 @@ package mysql
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
roomservice "hyapp/services/room-service/internal/room/service"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSplitHumanRobotAllowedOwnerIDs(t *testing.T) {
|
func TestSplitHumanRobotAllowedOwnerIDs(t *testing.T) {
|
||||||
@ -14,3 +17,11 @@ func TestSplitHumanRobotAllowedOwnerIDs(t *testing.T) {
|
|||||||
t.Fatalf("owner user ids mismatch: got %+v", userIDs)
|
t.Fatalf("owner user ids mismatch: got %+v", userIDs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAdminRoomPinListSQLUsesSingleFromClause(t *testing.T) {
|
||||||
|
where, _ := adminRoomPinWhere(t.Context(), roomservice.AdminRoomPinQuery{Status: "active", PinType: "region", NowMS: 1000})
|
||||||
|
query := adminRoomPinSelectSQL() + where
|
||||||
|
if count := strings.Count(query, "FROM room_region_pins"); count != 1 {
|
||||||
|
t.Fatalf("room pin list SQL must contain one FROM clause, got %d in %q", count, query)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user