document.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package orm
  2. import (
  3. "log"
  4. "net/http"
  5. "github.com/jinzhu/gorm"
  6. "gogs.carducci-dante.gov.it/karmen/core/renderer"
  7. )
  8. type FilePath struct {
  9. gorm.Model
  10. Path string
  11. DocumentID uint
  12. }
  13. type Document struct {
  14. gorm.Model
  15. Name string
  16. SurveyUrl string
  17. ReferencePath string
  18. TemplatePath string
  19. Files []*FilePath
  20. }
  21. type DocumentForUpdate struct {
  22. Document Document
  23. }
  24. type DocumentForAdd struct{}
  25. func (s *Document) GetID() uint { return s.ID }
  26. func GetDocument(args map[string]string) (interface{}, error) {
  27. var document Document
  28. if err := DB().First(&document, args["id"]).Error; err != nil {
  29. return nil, err
  30. }
  31. return &document, nil
  32. }
  33. func GetDocumentAll(args map[string]string) (interface{}, error) {
  34. var document Document
  35. id := args["id"]
  36. if err := DB().Where("id = ?", id).Find(&document).Error; err != nil {
  37. return nil, err
  38. }
  39. return &document, nil
  40. }
  41. func GetDocuments(args map[string]string) (interface{}, error) {
  42. var documents []*Document
  43. if err := DB().Order("name").Find(&documents).Error; err != nil {
  44. return nil, err
  45. }
  46. return documents, nil
  47. }
  48. func GetDocumentsAll(args map[string]string) (interface{}, error) {
  49. var documents []*Document
  50. if err := DB().Order("name").Find(&documents).Error; err != nil {
  51. return nil, err
  52. }
  53. return documents, nil
  54. }
  55. func SaveDocument(document interface{}) (interface{}, error) {
  56. if err := DB().Save(document).Error; err != nil {
  57. return nil, err
  58. }
  59. return document, nil
  60. }
  61. func UpdateDocument(args map[string]string, r *http.Request) (IDer, error) {
  62. document, err := GetDocument(args)
  63. if err != nil {
  64. return nil, err
  65. }
  66. err = renderer.Decode(document, r)
  67. if err != nil {
  68. return nil, err
  69. }
  70. _, err = SaveDocument(document)
  71. if err != nil {
  72. return nil, err
  73. }
  74. document, err = GetDocument(args)
  75. if err != nil {
  76. return nil, err
  77. }
  78. return document.(*Document), nil
  79. }
  80. func AddDocument(args map[string]string, r *http.Request) (IDer, error) {
  81. document := new(Document)
  82. err := renderer.Decode(document, r)
  83. if err != nil {
  84. return nil, err
  85. }
  86. document, err = CreateDocument(document)
  87. if err != nil {
  88. return nil, err
  89. }
  90. return document, nil
  91. }
  92. func CreateDocument(document *Document) (*Document, error) {
  93. if err := DB().Create(document).Error; err != nil {
  94. return nil, err
  95. }
  96. return document, nil
  97. }
  98. func DeleteDocument(args map[string]string, r *http.Request) (IDer, error) {
  99. document, err := GetDocument(args)
  100. if err != nil {
  101. return nil, err
  102. }
  103. if err := DB().Unscoped().Delete(document.(*Document)).Error; err != nil {
  104. return nil, err
  105. }
  106. return document.(*Document), nil
  107. }
  108. func GetDocumentForUpdate(args map[string]string) (interface{}, error) {
  109. var data DocumentForUpdate
  110. id := args["id"]
  111. if err := DB().First(&data.Document, id).Error; err != nil {
  112. return nil, err
  113. }
  114. return data, nil
  115. }
  116. func GetDocumentForAdd(args map[string]string) (interface{}, error) {
  117. var data DocumentForAdd
  118. return data, nil
  119. }
  120. func GetDocumentExecute(args map[string]string) (interface{}, error) {
  121. var document Document
  122. if err := DB().First(&document, args["id"]).Error; err != nil {
  123. return nil, err
  124. }
  125. done := make(chan bool)
  126. go func(done chan bool) {
  127. log.Println("Triggering execution!")
  128. done <- true
  129. }(done)
  130. <-done
  131. log.Println("Execution was triggered!")
  132. return &document, nil
  133. }
  134. func (t *Document) RestAPIPath() string {
  135. return "documents"
  136. }