Răsfoiți Sursa

First working prototype of department generator

Andrea Fazzi 5 ani în urmă
părinte
comite
1afcb9dd12
4 a modificat fișierele cu 46 adăugiri și 25 ștergeri
  1. 8 2
      Makefile
  2. 20 11
      generator/generators/department/department.go
  3. 16 10
      main.go
  4. 2 2
      orm/document.go

+ 8 - 2
Makefile

@@ -5,7 +5,13 @@ run:
 	docker-compose -f compose/karmen/docker-compose.yml up --build -d
 	echo "Uploading files to the cloud..."
 	sleep 15
-	curl -u admin:password http://localhost:8080/remote.php/webdav/Documents/list.tpl.md -X PUT --data-binary @"./generator/generators/list/example_1/resources/list.tpl.md"
-	curl -u admin:password http://localhost:8080/remote.php/webdav/Documents/reference.odt -X PUT --data-binary @"./generator/generators/list/example_1/resources/reference.odt"
+
+	curl -u admin:password http://localhost:8080/remote.php/webdav/Documents/List -X MKCOL
+	curl -u admin:password http://localhost:8080/remote.php/webdav/Documents/List/list.tpl.md -X PUT --data-binary @"./generator/generators/list/example_1/resources/list.tpl.md"
+	curl -u admin:password http://localhost:8080/remote.php/webdav/Documents/List/reference.odt -X PUT --data-binary @"./generator/generators/list/example_1/resources/reference.odt"
+
+	curl -u admin:password http://localhost:8080/remote.php/webdav/Documents/Department -X MKCOL
+	curl -u admin:password http://localhost:8080/remote.php/webdav/Documents/Department/template.md -X PUT --data-binary @"./generator/generators/department/example_1/resources/template.md"
+	curl -u admin:password http://localhost:8080/remote.php/webdav/Documents/Department/reference.odt -X PUT --data-binary @"./generator/generators/department/example_1/resources/reference.odt"
 
 all: run

+ 20 - 11
generator/generators/department/department.go

@@ -40,45 +40,47 @@ type DepartmentGenerator struct {
 	logger   *logger.JobLogger
 }
 
-func (generator *DepartmentGenerator) generate(outputPath string, cloudPath string, funcMap template.FuncMap) {
+func (generator *DepartmentGenerator) generate(outputPath string, cloudPath string, funcMap template.FuncMap) ([]*orm.File, error) {
+	var files []*orm.File
+
 	tplFilename := filepath.Join(cloudPath, "template.md")
 	log.Printf("Downloading %s from the cloud...", tplFilename)
 
 	tplContent, err := generator.ncClient.Download(tplFilename)
 	if err != nil {
-		log.Println(err)
+		return nil, err
 	}
 	log.Println("Download completed.")
 
 	refFilename := filepath.Join(cloudPath, "reference.odt")
-	log.Printf("Downloading %s from the cloud...", tplFilename)
+	log.Printf("Downloading %s from the cloud...", refFilename)
 	refContent, err := generator.ncClient.Download(refFilename)
 	if err != nil {
-		log.Println(err)
+		return nil, err
 	}
 	log.Println("Download completed.")
 
 	err = ioutil.WriteFile(filepath.Join(outputPath, "reference.odt"), refContent, 0777)
 	if err != nil {
-		log.Println(err)
+		return nil, err
 	}
 
 	tpl, err := tpl_util.LoadTextTemplateFromString(string(tplContent), funcMap)
 	if err != nil {
-		log.Println(err)
+		return nil, err
 	}
 
 	for _, department := range generator.Data.Departments {
 		filename := filepath.Join(outputPath, fmt.Sprintf("Dipartimento di %s", department.Name))
 		f, err := os.Create(filename + ".md")
 		if err != nil {
-			log.Println(err)
+			return nil, err
 		}
 		defer f.Close()
 
 		err = tpl.Execute(f, department)
 		if err != nil {
-			log.Println(err)
+			return nil, err
 		}
 
 		odtFilename := fileutil.ReplaceExt(filename, "odt")
@@ -90,10 +92,14 @@ func (generator *DepartmentGenerator) generate(outputPath string, cloudPath stri
 		}
 
 		if err := libreoffice.Convert(filename+".odt", "pdf", "--outdir", outputPath); err != nil {
-			log.Println(err)
+			return nil, err
 		}
+
+		files = append(files, &orm.File{Path: filepath.Base(filename) + ".pdf"})
 	}
 
+	return files, nil
+
 }
 
 func NewDepartmentGenerator(config *generator.Config) *DepartmentGenerator {
@@ -174,12 +180,15 @@ func (generator *DepartmentGenerator) Run() {
 		log.Println(err)
 	}
 
-	generator.generate(outputPath, cloudPath, funcmap.FuncMap)
+	files, err := generator.generate(outputPath, cloudPath, funcmap.FuncMap)
+	if err != nil {
+		log.Println(err)
+	}
 
 	if generator.JobID > 0 {
 		job.End = time.Now()
 
-		job.Files = append(job.Files, &orm.File{Path: "elenco_docenti.pdf"})
+		job.Files = append(job.Files, files...)
 
 		err = generator.kaClient.UpdateJob(job)
 		if err != nil {

+ 16 - 10
main.go

@@ -63,36 +63,42 @@ func main() {
 		orm.AutoMigrate()
 	}
 
-	log.Println("Initialize ListGenerator")
-
 	generator.Generators = make(map[string]generator.Generator)
+
+	log.Println("Initialize ListGenerator")
 	generator.Generators["list"] = list.NewListGenerator(config.Config)
 
 	log.Println("Initialize DepartmentGenerator")
-
-	generator.Generators = make(map[string]generator.Generator)
 	generator.Generators["department"] = department.NewDepartmentGenerator(&generator.Config{ConfigT: *config.Config})
 
 	files, err := filepath.Glob("generator/generators/*")
-	log.Println("Found the following generators...")
+	log.Println("Found the following generators...", files)
 	gTypes := make([]*orm.GeneratorType, 0)
 	for _, g := range files {
 		gTypes = append(gTypes, &orm.GeneratorType{Name: filepath.Base(g)})
 	}
-	log.Println("Update generator_type table...")
+	log.Println("Update generator_types table...")
 	for _, gt := range gTypes {
-		var gTypes []orm.GeneratorType
-		if err := orm.DB().Find(&gTypes).Error; err != nil {
+		var gType []orm.GeneratorType
+		if err := orm.DB().Where("name = ?", gt.Name).Find(&gType).Error; err != nil {
 			panic(err)
 		}
-		if len(gTypes) == 0 {
-			err := orm.DB().Create(gt).Error
+		if len(gType) == 0 {
+			err := orm.DB().Debug().Create(gt).Error
 			if err != nil {
 				panic(err)
 			}
 		}
 	}
 
+	if err := orm.DB().Find(&gTypes).Error; err != nil {
+		panic(err)
+	}
+	log.Println("Currently registered generators are:")
+	for _, g := range gTypes {
+		log.Println(g.Name)
+	}
+
 	log.Println("Starting cron jobs...")
 
 	c := cron.New()

+ 2 - 2
orm/document.go

@@ -189,7 +189,7 @@ func GetDocumentForAdd(args map[string]string) (interface{}, error) {
 
 func GetDocumentExecute(args map[string]string) (interface{}, error) {
 	var document Document
-	if err := DB().First(&document, args["id"]).Error; err != nil {
+	if err := DB().Preload("GeneratorType").First(&document, args["id"]).Error; err != nil {
 		return nil, err
 	}
 
@@ -205,7 +205,7 @@ func GetDocumentExecute(args map[string]string) (interface{}, error) {
 
 	log.Printf("Start concurrent job %d for generator %s", job.ID, document.Name)
 
-	gen := generator.Generators["list"]
+	gen := generator.Generators[document.GeneratorType.Name]
 
 	gen.SetJobId(job.ID)