Andrea Fazzi 5 лет назад
Родитель
Сommit
b641e9734c

+ 4 - 0
config/config.go

@@ -92,6 +92,10 @@ type ConfigT struct {
 		DepartmentsCoordinatorsGroup string `yaml:"departments_coordinators_group"`
 		DepartmentsCoordinatorsML    string `yaml:"departments_coordinators_ml"`
 	}
+
+	Documents struct {
+		OutputPath string `yaml:"output_path"`
+	}
 }
 
 var (

+ 0 - 17
documents/generators/list/config.yaml

@@ -1,17 +0,0 @@
-url: "https://karmen.carducci-dante.gov.it"
-domain: "carducci-dante.gov.it"
-log_level: 2
-
-admin:
-  username: "admin"
-  password: "aolieVooju"
-
-smtp:
-  host: "smtps.aruba.it"
-  port: 465
-  username: "postmaster@carducci-dante.gov.it"
-  password: "8Eoda43e17"
-  from: "karmen@carducci-dante.gov.it"
-  cc: "andrea.fazzi@carducci-dante.gov.it"
-
-

BIN
documents/generators/list/list


+ 1 - 1
documents/documents.go → generator/generators.go

@@ -1,4 +1,4 @@
-package documents
+package generator
 
 type Generator interface {
 	Run(jobId uint)

+ 0 - 0
documents/generators/list/.gitignore → generator/generators/list/.gitignore


+ 15 - 13
documents/generators/list/list.go → generator/generators/list/list.go

@@ -13,6 +13,7 @@ import (
 	"github.com/remogatto/cloud"
 
 	karmen_client "gogs.carducci-dante.gov.it/karmen/client"
+	"gogs.carducci-dante.gov.it/karmen/core/config"
 	"gogs.carducci-dante.gov.it/karmen/core/orm"
 	"gogs.carducci-dante.gov.it/karmen/util/fileutil"
 	"gogs.carducci-dante.gov.it/karmen/util/libreoffice"
@@ -21,10 +22,11 @@ import (
 )
 
 type ListGenerator struct {
+	Config *config.ConfigT
 }
 
-func NewListGenerator() *ListGenerator {
-	return &ListGenerator{}
+func NewListGenerator(config *config.ConfigT) *ListGenerator {
+	return &ListGenerator{config}
 }
 
 var funcMap template.FuncMap = template.FuncMap{
@@ -34,9 +36,9 @@ var funcMap template.FuncMap = template.FuncMap{
 	"nbsp":         nbsp,
 }
 
-func generate(teachers []*orm.Teacher, funcMap template.FuncMap) {
-	filename := "output/elenco_docenti"
-	tpl, err := tpl_util.LoadTextTemplate("./documents/generators/list/list.tpl.md", funcMap)
+func (generator *ListGenerator) generate(outputPath string, teachers []*orm.Teacher, funcMap template.FuncMap) {
+	filename := filepath.Join(outputPath, "elenco_docenti")
+	tpl, err := tpl_util.LoadTextTemplate("./generator/generators/list/list.tpl.md", funcMap)
 	if err != nil {
 		panic(err)
 	}
@@ -56,11 +58,11 @@ func generate(teachers []*orm.Teacher, funcMap template.FuncMap) {
 
 	log.Println("Generate", odtFilename)
 
-	if err := pandoc.Convert(filename+".md", odtFilename, "--data-dir", "./documents/generators/list/"); err != nil {
+	if err := pandoc.Convert(filename+".md", odtFilename, "--data-dir", "./generator/generators/list/"); err != nil {
 		panic(err)
 	}
 
-	if err := libreoffice.Convert(filename+".odt", "pdf", "--outdir", "output"); err != nil {
+	if err := libreoffice.Convert(filename+".odt", "pdf", "--outdir", outputPath); err != nil {
 		panic(err)
 	}
 
@@ -154,25 +156,25 @@ func (generator *ListGenerator) Run(jobId uint) {
 		panic(err)
 	}
 
-	outputDir := "output"
+	outputPath := filepath.Join(config.Config.Documents.OutputPath, fmt.Sprintf("%d/%d", job.DocumentID, job.ID))
 
-	if err := os.MkdirAll(outputDir, 0777); err != nil {
+	if err := os.MkdirAll(outputPath, 0777); err != nil {
 		panic(err)
 	}
 
-	generate(teachers, funcMap)
-
-	time.Sleep(10 * time.Second)
+	generator.generate(outputPath, teachers, funcMap)
 
 	job.End = time.Now()
 
+	job.Files = append(job.Files, &orm.File{Path: "elenco_docenti.pdf"})
+
 	err = client.UpdateJob(job)
 	if err != nil {
 		panic(err)
 	}
 
 	log.Println("Uploading files to the cloud...")
-	src, err := ioutil.ReadFile(filepath.Join("output", "elenco_docenti.pdf"))
+	src, err := ioutil.ReadFile(filepath.Join(outputPath, "elenco_docenti.pdf"))
 	if err != nil {
 		panic(err)
 	}

+ 0 - 0
documents/generators/list/list.tpl.md → generator/generators/list/list.tpl.md


+ 0 - 0
documents/generators/list/reference.odt → generator/generators/list/reference.odt


+ 15 - 3
handlers/handlers.go

@@ -98,6 +98,10 @@ func generateHandler(r *mux.Router, model string) {
 		executePatterns []PathPattern = []PathPattern{
 			PathPattern{"/%s/{id}/execute", "", []string{"GET"}},
 		}
+
+		filePatterns []PathPattern = []PathPattern{
+			PathPattern{"/%s/{id}/files/{filename}", "", []string{"GET"}},
+		}
 	)
 	for _, pattern := range patterns {
 		r.Handle(pattern.Path(model), jwtCookie.Handler(recoverHandler(modelHandler(model, pattern)))).Methods(pattern.Methods...)
@@ -107,10 +111,18 @@ func generateHandler(r *mux.Router, model string) {
 		r.Handle(pattern.Path(model), jwtHeader.Handler(recoverHandler(modelHandler(model, pattern)))).Methods(pattern.Methods...)
 	}
 
-	for _, pattern := range executePatterns {
-		r.Handle(pattern.Path(model), jwtCookie.Handler(recoverHandler(modelHandler(model, pattern)))).Methods(pattern.Methods...)
+	if model == "documents" {
+		for _, pattern := range executePatterns {
+			r.Handle(pattern.Path(model), jwtCookie.Handler(recoverHandler(modelHandler(model, pattern)))).Methods(pattern.Methods...)
+		}
 	}
 
+	// if model == "jobs" {
+	// 	for _, pattern := range filePatterns {
+	// 		r.Handle(pattern.Path(model), jwtCookie.Handler(recoverHandler(modelHandler(model, pattern)))).Methods(pattern.Methods...)
+	// 	}
+	// }
+
 }
 
 func Handlers() *mux.Router {
@@ -135,7 +147,7 @@ func Handlers() *mux.Router {
 	r.Handle("/get_token", tokenHandler())
 
 	// Static file server
-
+	r.PathPrefix("/jobs/13/files/elenco_docenti.pdf").Handler(http.FileServer(http.Dir("./output/1/13/elenco_docenti.pdf")))
 	r.PathPrefix("/").Handler(http.FileServer(http.Dir("./dist/")))
 
 	return r

+ 4 - 4
main.go

@@ -13,8 +13,8 @@ import (
 
 	"gogs.carducci-dante.gov.it/karmen/core/config"
 	"gogs.carducci-dante.gov.it/karmen/core/cron/sync"
-	"gogs.carducci-dante.gov.it/karmen/core/documents"
-	"gogs.carducci-dante.gov.it/karmen/core/documents/generators/list"
+	"gogs.carducci-dante.gov.it/karmen/core/generator"
+	"gogs.carducci-dante.gov.it/karmen/core/generator/generators/list"
 	karmen_handlers "gogs.carducci-dante.gov.it/karmen/core/handlers"
 	"gogs.carducci-dante.gov.it/karmen/core/orm"
 )
@@ -63,8 +63,8 @@ func main() {
 
 	log.Println("Initialize ListGenerator")
 
-	documents.Generators = make(map[string]documents.Generator)
-	documents.Generators["list"] = list.NewListGenerator()
+	generator.Generators = make(map[string]generator.Generator)
+	generator.Generators["list"] = list.NewListGenerator(config.Config)
 
 	log.Println("Starting cron jobs...")
 

+ 2 - 2
orm/document.go

@@ -7,7 +7,7 @@ import (
 
 	"github.com/jinzhu/gorm"
 
-	"gogs.carducci-dante.gov.it/karmen/core/documents"
+	"gogs.carducci-dante.gov.it/karmen/core/generator"
 	"gogs.carducci-dante.gov.it/karmen/core/renderer"
 )
 
@@ -177,7 +177,7 @@ func GetDocumentExecute(args map[string]string) (interface{}, error) {
 
 	log.Printf("Start concurrent job %d for generator %s", job.ID, document.Name)
 
-	go documents.Generators["list"].Run(job.ID)
+	go generator.Generators["list"].Run(job.ID)
 
 	return &document, nil
 }

+ 10 - 3
orm/job.go

@@ -33,13 +33,20 @@ type Job struct {
 
 func (s *Job) GetID() uint { return s.ID }
 
-func GetJob(args map[string]string) (interface{}, error) {
+func GetFile(args map[string]string) (interface{}, error) {
 	var job Job
-	if err := DB().Debug().Preload("Document").First(&job, args["id"]).Error; err != nil {
+	if err := DB().Preload("Document").Preload("Files").First(&job, args["id"]).Error; err != nil {
 		return nil, err
 	}
-	log.Println("Document NAME", job.Document.Name)
+	log.Println("Downloading file...")
+	return &job, nil
+}
 
+func GetJob(args map[string]string) (interface{}, error) {
+	var job Job
+	if err := DB().Preload("Document").Preload("Files").First(&job, args["id"]).Error; err != nil {
+		return nil, err
+	}
 	return &job, nil
 }
 

+ 2 - 1
orm/mappings.go

@@ -104,7 +104,8 @@ var (
 
 		// Jobs
 
-		"/jobs/{id}": GetJob,
+		"/jobs/{id}":                  GetJob,
+		"/jobs/{id]/files/{filename}": GetFile,
 
 		"/api/jobs/{id}": GetJob,
 		"/api/jobs/add/": GetNothing,

+ 1 - 0
orm/orm.go

@@ -79,6 +79,7 @@ func AutoMigrate() {
 		&Administrative{},
 		&Document{},
 		&Job{},
+		&File{},
 	).Error; err != nil {
 		panic(err)
 	}

+ 0 - 0
generator/.gitignore → template_generator/.gitignore


+ 0 - 0
generator/main.go → template_generator/main.go


+ 0 - 0
generator/templates/add_update.tpl → template_generator/templates/add_update.tpl


+ 0 - 0
generator/templates/all.tpl → template_generator/templates/all.tpl


+ 0 - 0
generator/templates/show.tpl → template_generator/templates/show.tpl


+ 1 - 1
templates/jobs_show.html.tpl

@@ -54,7 +54,7 @@
     	{{range $file := .Data.Files}}
     	<a href="/jobs/{{$file.JobID}}/files/{{$file.Path}}" class="list-group-item list-group-item-action">
     	  <span class="fa fa-file-alt"></span>
-    	  {{$file.Name}}
+    	  {{$file.Path}}
     	  {{end}}
     	</a>
       </div>