Browse Source

delta feed (2)

portowyi 1 year ago
parent
commit
0e70374eb7
5 changed files with 38 additions and 18 deletions
  1. 5 1
      .env.local
  2. 10 0
      controller/health.go
  3. 3 0
      cron-job/cronJobs.go
  4. 6 0
      main.go
  5. 14 17
      model/availability.go

+ 5 - 1
.env.local

@@ -12,4 +12,8 @@ JWT_PRIVATE_KEY="Kq4NZSrtRkyD5NqzjkeHlw"
 # pgAdmin4 Credentials for Docker Compose
 PGADMIN_DEFAULT_EMAIL=admin@admin.com
 PGADMIN_DEFAULT_PASSWORD=password123
-PGADMIN_LISTEN_PORT=80
+PGADMIN_LISTEN_PORT=80
+
+# cron
+CRON_XML_FEED=@every 6h
+CRON_CSV_DELTA=@every 20m

+ 10 - 0
controller/health.go

@@ -0,0 +1,10 @@
+package controller
+
+import (
+	"github.com/gin-gonic/gin"
+	"net/http"
+)
+
+func HealthCheck(context *gin.Context) {
+	context.JSON(http.StatusOK, gin.H{"health_check": "successful", "message": "OK"})
+}

+ 3 - 0
cron-job/cronJobs.go

@@ -174,6 +174,9 @@ func CreateXMLFeed() {
 }
 
 func CreateCSVDeltaFeed() {
+
+	log.Println("DELTA FEED WORK - FROM EXTERNAL FILE ", helper.RootDir())
+
 	rows, err := model.GetAllAvailability()
 	if err != nil {
 		log.Printf("Не удалось получить данные для формирования дельта-фида из базы по причине [%s]", err)

+ 6 - 0
main.go

@@ -23,6 +23,8 @@ func main() {
 
 func startCronJob() {
 	cron := cron.New()
+	fmt.Println(os.Getenv("CRON_XML_FEED"))
+	fmt.Println(os.Getenv("CRON_CSV_DELTA"))
 	cron.AddFunc(os.Getenv("CRON_XML_FEED"), cronjob.CreateXMLFeed)
 	cron.AddFunc(os.Getenv("CRON_CSV_DELTA"), cronjob.CreateCSVDeltaFeed)
 	cron.Start()
@@ -33,6 +35,7 @@ func loadDatabase() {
 	database.Database.AutoMigrate(&model.User{})
 	database.Database.AutoMigrate(&model.Product{})
 	database.Database.AutoMigrate(&model.Category{})
+	database.Database.AutoMigrate(&model.Availability{})
 }
 
 func loadEnv() {
@@ -62,6 +65,9 @@ func serveApplication() {
 	deltaRoutes.POST("/availability", controller.LoadAvailabilityInfo)
 	deltaRoutes.GET("/", controller.SendCsvDeltaToClient)
 
+	serviceRoutes := router.Group("/service")
+	serviceRoutes.GET("/working", controller.HealthCheck)
+
 	router.Run(":3005")
 	fmt.Println("Server running on port 3005")
 }

+ 14 - 17
model/availability.go

@@ -1,7 +1,6 @@
 package model
 
 import (
-	"database/sql"
 	"errors"
 	"fmt"
 	"gorm.io/gorm"
@@ -17,33 +16,31 @@ type AvailabilityArray struct {
 	AvailabilityArray []Availability `binding:"dive" json:"items"`
 }
 
-func (availability *Availability) CreateOrUpdate() {
-	database.Database.Exec(
-		`UPDATE public.availability SET available = @available WHERE code_car_ca_de = @code;
-				INSERT INTO public.availability (code_car_ca_de, available) 
-				SELECT @code, @available 
-				WHERE NOT EXISTS (SELECT 1 FROM public.availability WHERE code_car_ca_de = @code);`,
-		sql.Named("available", availability.Available),
-		sql.Named("code", availability.CodeCarCaDe))
+func (availability *Availability) CreateOrUpdate() error {
+	err := database.Database.Save(&availability).Error
+	if err != nil {
+		return fmt.Errorf("не удалось сохранить код %s", availability.CodeCarCaDe)
+	}
+	return nil
 }
 
 func GetAllAvailability() ([]Availability, error) {
 	var availability []Availability
-	result := database.Database.Find(&availability)
-	if result.Error != nil {
-		return availability, result.Error
+	err := database.Database.Find(&availability).Error
+	if err != nil {
+		return availability, err
 	}
 	return availability, nil
 }
 
 func GetOneAvailability(code string) (Availability, error) {
-	var av Availability
-	err := database.Database.First(&av, code).Error
+	var availability Availability
+	err := database.Database.First(&availability, code).Error
 	if err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
-			return av, errors.New(fmt.Sprintf("Объект с кодом %s не найден", code))
+			return availability, fmt.Errorf("объект с кодом %s не найден", code)
 		}
-		return av, err
+		return availability, err
 	}
-	return av, nil
+	return availability, nil
 }