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)
|
||||
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
|
||||
}
|
||||
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.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
|
||||
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 `
|
||||
}
|
||||
|
||||
@ -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 '\\\\')")
|
||||
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) {
|
||||
|
||||
@ -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 (
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
roomservice "hyapp/services/room-service/internal/room/service"
|
||||
)
|
||||
|
||||
func TestSplitHumanRobotAllowedOwnerIDs(t *testing.T) {
|
||||
@ -14,3 +17,11 @@ func TestSplitHumanRobotAllowedOwnerIDs(t *testing.T) {
|
||||
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