Add Wildberries product fetching and rate limiting functionality
This commit is contained in:
@@ -8,9 +8,12 @@ import (
|
||||
"google.golang.org/grpc"
|
||||
"net"
|
||||
"os"
|
||||
"sipro-mps/internal/config"
|
||||
"sipro-mps/internal/marketplace"
|
||||
ozon "sipro-mps/internal/ozon/products"
|
||||
"sipro-mps/internal/redis"
|
||||
"sipro-mps/internal/tasks/client"
|
||||
wb "sipro-mps/internal/wb/products"
|
||||
)
|
||||
|
||||
func logMessage(level string, format string, a ...interface{}) {
|
||||
@@ -50,7 +53,11 @@ func createGrpcServer(pool *pgxpool.Pool) {
|
||||
fmt.Printf("failed to register Ozon Products gRPC server: %v\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = wb.RegisterAdapterGRPC(grpcServer, *repo)
|
||||
if err != nil {
|
||||
fmt.Printf("failed to register Wildberries Products gRPC server: %v\n", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("gRPC server registered successfully.")
|
||||
// Start serving gRPC requests
|
||||
fmt.Println("gRPC server is starting on port 8080...")
|
||||
@@ -61,26 +68,64 @@ func createGrpcServer(pool *pgxpool.Pool) {
|
||||
fmt.Println("gRPC server created.")
|
||||
}
|
||||
|
||||
func main() {
|
||||
// Initializing the dotenv file
|
||||
func initDotenv() error {
|
||||
err := godotenv.Load()
|
||||
if err != nil {
|
||||
logMessage("error", "Error loading .env file: %v", err)
|
||||
return
|
||||
return fmt.Errorf("error loading .env file: %w", err)
|
||||
}
|
||||
logMessage("info", "Dotenv file loaded successfully. 🌱")
|
||||
return nil
|
||||
}
|
||||
|
||||
func initRedisClient(ctx context.Context) error {
|
||||
err := redis.InitClient(ctx)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error initializing Redis client: %w", err)
|
||||
}
|
||||
//defer redis.CloseClient()
|
||||
logMessage("info", "Redis client initialized successfully. 🟥")
|
||||
return nil
|
||||
}
|
||||
func initRedisLocker() error {
|
||||
err := redis.InitLocker()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error initializing Redis locker: %w", err)
|
||||
}
|
||||
logMessage("info", "Redis locker initialized successfully. 🟥")
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
err := initDotenv()
|
||||
if err != nil {
|
||||
logMessage("error", "Failed to load .env file: %v", err)
|
||||
return
|
||||
}
|
||||
logMessage("info", "Starting the SIPRO Marketplace Server... 🚀1")
|
||||
ctx := context.Background()
|
||||
|
||||
// Initializing the Redis client
|
||||
err = redis.InitClient(ctx)
|
||||
err = initRedisClient(ctx)
|
||||
if err != nil {
|
||||
logMessage("error", "Failed to initialize Redis client: %v", err)
|
||||
return
|
||||
}
|
||||
defer redis.CloseClient()
|
||||
logMessage("info", "Redis client initialized successfully. 🟥")
|
||||
|
||||
// Initializing the Redis locker
|
||||
err = initRedisLocker()
|
||||
if err != nil {
|
||||
logMessage("error", "Failed to initialize Redis locker: %v", err)
|
||||
return
|
||||
}
|
||||
defer redis.CloseLocker()
|
||||
cfg, err := config.LoadConfig()
|
||||
if err != nil {
|
||||
logMessage("error", "Failed to load configuration: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
client.InitClient(*cfg.Redis)
|
||||
// Initializing pgx connection
|
||||
dbpool, err := pgxpool.New(ctx, os.Getenv("POSTGRES_URL"))
|
||||
if err != nil {
|
||||
@@ -88,11 +133,6 @@ func main() {
|
||||
return
|
||||
}
|
||||
defer dbpool.Close()
|
||||
logMessage("info", "Connected to PostgreSQL successfully. 🐘")
|
||||
|
||||
createGrpcServer(dbpool)
|
||||
|
||||
}
|
||||
|
||||
//for _, item := range items {
|
||||
// //logMessage("info", "Product ID: %s, Name: %s, Price: %d", item.Price, item.Name, item.Price)
|
||||
//}
|
||||
|
||||
34
cmd/tasks_server/main.go
Normal file
34
cmd/tasks_server/main.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
"sipro-mps/internal/config"
|
||||
"sipro-mps/internal/redis"
|
||||
"sipro-mps/internal/tasks/server"
|
||||
)
|
||||
|
||||
func main() {
|
||||
cfg, err := config.LoadConfig()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
ctx := context.Background()
|
||||
err = redis.InitClient(ctx)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer redis.CloseClient()
|
||||
err = redis.InitLocker()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer redis.CloseLocker()
|
||||
dbpool, err := pgxpool.New(ctx, cfg.Database.URL)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
srv := server.NewAsynqServer(cfg.Redis, dbpool)
|
||||
srv.Run()
|
||||
}
|
||||
51
cmd/test/main.go
Normal file
51
cmd/test/main.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/hibiken/asynq"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/redis/rueidis"
|
||||
"sipro-mps/internal/config"
|
||||
"sipro-mps/internal/redis"
|
||||
"sipro-mps/internal/tasks"
|
||||
)
|
||||
|
||||
func main() {
|
||||
godotenv.Load()
|
||||
ctx := context.Background()
|
||||
|
||||
redis.InitClient(ctx)
|
||||
c := *redis.Client
|
||||
key := fmt.Sprintf("wb:products:%d", "test")
|
||||
v, err := c.Do(ctx, c.B().Get().Key(key).Build()).ToString()
|
||||
if err != nil {
|
||||
if errors.As(err, &rueidis.Nil) {
|
||||
fmt.Println("Key does not exist in Redis:", key)
|
||||
return
|
||||
}
|
||||
}
|
||||
fmt.Println("Value from Redis:", v)
|
||||
return
|
||||
cfg, err := config.LoadConfig()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
client := asynq.NewClient(asynq.RedisClientOpt{Addr: cfg.Redis.Host + ":" + cfg.Redis.Port, Password: cfg.Redis.Password})
|
||||
defer func(client *asynq.Client) {
|
||||
err := client.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}(client)
|
||||
task, err := tasks.NewFetchProductsTask(1130)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
info, err := client.Enqueue(task)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
println("Task enqueued successfully:", info.ID, "with queue name:", info.Queue, "and payload size:", len(info.Payload), "bytes")
|
||||
}
|
||||
Reference in New Issue
Block a user