package internal import ( "context" "testing" "time" "exporter/database/telegram_resource/public/model" "exporter/database/telegram_resource/public/table" . "github.com/go-jet/jet/v2/postgres" "github.com/samber/lo" ) func TestDBChannel_SaveMessage(t *testing.T) { dsn := "postgresql://postgres:xixi0202@10.1.1.3:5432/telegram_resource_test?sslmode=disable" if err := InitDB(dsn); err != nil { t.Error(err) } _, _ = db.Exec(`truncate channel_messages`) msg := &ChannelMessage{ ID: 1, GroupID: 1, Message: "Hello", Medias: ChannelMessageMedia{ MsgID: 1, AssetID: 1, Photo: lo.ToPtr("photo"), }, PublishAt: time.Now(), } msg1 := &ChannelMessage{ ID: 1, GroupID: 1, Message: "Hello", Medias: ChannelMessageMedia{ MsgID: 2, AssetID: 3, Photo: lo.ToPtr("Man"), }, PublishAt: time.Now(), } c := NewDBChannel(123, "test", "hello") if err := c.SaveMessage(context.Background(), msg); err != nil { t.Error(err) } if err := c.SaveMessage(context.Background(), msg1); err != nil { t.Logf("%+v", err) } } func Test_Join(t *testing.T) { dsn := "postgresql://postgres:xixi0202@10.1.1.3:5432/telegram_resource_test?sslmode=disable" if err := InitDB(dsn); err != nil { t.Error(err) } // db.Exec(`truncate channel_messages`) var msg struct { model.ChannelMessages model.Channels } tblC := table.Channels tbl := table.ChannelMessages stmt := tbl.SELECT(tbl.AllColumns, tblC.Title). WHERE(tbl.Published.IS_FALSE()). LIMIT(1). FROM(tbl.LEFT_JOIN(tblC, tbl.ChannelID.EQ(tblC.UUID))) t.Log(stmt.DebugSql()) if err := stmt.QueryContext(context.Background(), db, &msg); err != nil { t.Error(err) } t.Logf("%+v", msg) } func Test_ExceptMax(t *testing.T) { dsn := "postgresql://postgres:xixi0202@10.1.1.3:5432/telegram_resource?sslmode=disable" if err := InitDB(dsn); err != nil { t.Error(err) } tbl := table.ChannelMessages tblC := table.Channels var result struct { MaxID int64 } stmt := tbl.SELECT(MAX(tbl.ID).AS("maxID")).FROM(tbl) t.Log(stmt.DebugSql()) if err := stmt.QueryContext(context.Background(), db, &result); err != nil { t.Error(err) } t.Log(result) stmt = tbl.SELECT(tbl.AllColumns, tblC.Title). WHERE(tbl.Published.IS_FALSE().AND(tbl.ID.NOT_EQ(Int(result.MaxID)))). LIMIT(1). ORDER_BY(tbl.ID.DESC()). FROM(tbl.LEFT_JOIN(tblC, tbl.ChannelID.EQ(tblC.UUID))) t.Log(stmt.DebugSql()) var msg publishMsg if err := stmt.QueryContext(context.Background(), db, &msg); err != nil { t.Error(err) } t.Log(msg.ChannelMessages.ID) }