mirror of
https://github.com/tiennm99/store-scraper-bot.git
synced 2026-08-31 08:28:07 +00:00
- Switch Telegram parse mode to HTML to match Java client. - Rename command identifiers to Java's: delgroup/delapple/delgoogle/ checkappscore/rawappleapp/rawgoogleapp. - Move admin singleton to "common" collection at _id="admin". - Store group _id as string-of-int64 to match Java AbstractModel schema. - Add `class` discriminator field on persisted models. - Expand AppleAppResponse (42 fields) and GoogleAppResponse (63 fields, with nested Category/Feature) to match Java records. - Add AppleAppRequest (track id or bundle id) / GoogleAppRequest types. - Implement Raw* commands as Telegram document attachments instead of truncated text. - Group-authorization gate (admin.HasGroup(chatId)) on non-admin commands. - Cache TTL via millis timestamp; round score to 1 decimal; weekend silent send in scheduler. - Match Java table renderer: " │ " separators, "─┼─" rows every 5 lines. - Prefer MONGODB_CONNECTION_STRING env (Java parity); auto-extract DB name from URI with fallback to "store-scraper-bot". Note: This is an AI-assisted port (not human-verified). Behavior parity with the Java implementation has not been tested end-to-end; treat as a starting point.
65 lines
2.1 KiB
Go
65 lines
2.1 KiB
Go
package command
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
|
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
|
"github.com/miti99/store-scraper-bot-go/internal/api/apple"
|
|
"github.com/miti99/store-scraper-bot-go/internal/api/apple/request"
|
|
"github.com/miti99/store-scraper-bot-go/internal/config"
|
|
"github.com/miti99/store-scraper-bot-go/internal/repository"
|
|
)
|
|
|
|
// /addapple <id|appId> [country=vn] — Java AddAppleAppCommand.
|
|
type AddAppleAppCommand struct {
|
|
cfg *config.Config
|
|
adminRepo *repository.AdminRepository
|
|
groupRepo *repository.GroupRepository
|
|
scraper *apple.AppleScraper
|
|
}
|
|
|
|
func NewAddAppleAppCommand(cfg *config.Config, adminRepo *repository.AdminRepository, groupRepo *repository.GroupRepository, scraper *apple.AppleScraper) *AddAppleAppCommand {
|
|
return &AddAppleAppCommand{cfg: cfg, adminRepo: adminRepo, groupRepo: groupRepo, scraper: scraper}
|
|
}
|
|
|
|
func (c *AddAppleAppCommand) Execute(msg *tgbotapi.Message, sender Sender) {
|
|
if !authorizeGroup(msg.Chat.ID, c.adminRepo, sender) {
|
|
return
|
|
}
|
|
args := splitArgs(msg.CommandArguments())
|
|
if len(args) < 1 || len(args) > 2 {
|
|
_ = sender.SendMessage(msg.Chat.ID, "Invalid arguments")
|
|
return
|
|
}
|
|
country := "vn"
|
|
if len(args) == 2 {
|
|
country = args[1]
|
|
}
|
|
|
|
// Java: try parsing arg[0] as Long (trackId); else treat as bundleId.
|
|
var req request.AppleAppRequest
|
|
if trackID, err := strconv.ParseInt(args[0], 10, 64); err == nil {
|
|
req = request.ByTrackID(trackID, country)
|
|
} else {
|
|
req = request.ByBundleID(args[0], country)
|
|
}
|
|
|
|
resp, err := c.scraper.FetchAndCache(req)
|
|
if err != nil || resp == nil || resp.AppID == "" {
|
|
_ = sender.SendMessage(msg.Chat.ID, "Error when request app info")
|
|
return
|
|
}
|
|
|
|
added, err := c.groupRepo.AddAppleApp(msg.Chat.ID, resp.AppID, country)
|
|
if err != nil {
|
|
_ = sender.SendMessage(msg.Chat.ID, "Internal server error")
|
|
return
|
|
}
|
|
if !added {
|
|
_ = sender.SendMessage(msg.Chat.ID, fmt.Sprintf("Apple app <code>%s</code> is already added", resp.AppID))
|
|
return
|
|
}
|
|
_ = sender.SendMessage(msg.Chat.ID, fmt.Sprintf("Apple app <code>%s</code>, country <b>%s</b> added successfully", resp.AppID, country))
|
|
}
|