You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

file_chunk.go 6.1 kB

4 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package models
  2. import (
  3. "fmt"
  4. "code.gitea.io/gitea/modules/log"
  5. "code.gitea.io/gitea/modules/timeutil"
  6. "xorm.io/xorm"
  7. )
  8. const (
  9. FileNotUploaded int = iota
  10. FileUploaded
  11. )
  12. type FileChunk struct {
  13. ID int64 `xorm:"pk autoincr"`
  14. UUID string `xorm:"uuid UNIQUE"`
  15. Md5 string `xorm:"INDEX"`
  16. IsUploaded int `xorm:"DEFAULT 0"` // not uploaded: 0, uploaded: 1
  17. UploadID string `xorm:"UNIQUE"` //minio upload id
  18. TotalChunks int
  19. Size int64
  20. UserID int64 `xorm:"INDEX"`
  21. Type int `xorm:"INDEX DEFAULT 0"`
  22. CompletedParts []string `xorm:"DEFAULT ''"` // chunkNumber+etag eg: ,1-asqwewqe21312312.2-123hjkas
  23. CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
  24. UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`
  25. }
  26. type ModelFileChunk struct {
  27. ID int64 `xorm:"pk autoincr"`
  28. UUID string `xorm:"uuid UNIQUE"`
  29. Md5 string `xorm:"INDEX"`
  30. ObjectName string `xorm:"DEFAULT ''"`
  31. IsUploaded int `xorm:"DEFAULT 0"` // not uploaded: 0, uploaded: 1
  32. UploadID string `xorm:"UNIQUE"` //minio upload id
  33. TotalChunks int
  34. Size int64
  35. UserID int64 `xorm:"INDEX"`
  36. Type int `xorm:"INDEX DEFAULT 0"`
  37. CompletedParts []string `xorm:"DEFAULT ''"` // chunkNumber+etag eg: ,1-asqwewqe21312312.2-123hjkas
  38. CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
  39. UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`
  40. }
  41. // GetFileChunkByMD5 returns fileChunk by given id
  42. func GetFileChunkByMD5(md5 string) (*FileChunk, error) {
  43. return getFileChunkByMD5(x, md5)
  44. }
  45. func getFileChunkByMD5(e Engine, md5 string) (*FileChunk, error) {
  46. fileChunk := new(FileChunk)
  47. if has, err := e.Where("md5 = ?", md5).Get(fileChunk); err != nil {
  48. return nil, err
  49. } else if !has {
  50. return nil, ErrFileChunkNotExist{md5, ""}
  51. }
  52. return fileChunk, nil
  53. }
  54. // GetFileChunkByMD5 returns fileChunk by given id
  55. func GetFileChunkByMD5AndUser(md5 string, userID int64, typeCloudBrain int) (*FileChunk, error) {
  56. return getFileChunkByMD5AndUser(x, md5, userID, typeCloudBrain)
  57. }
  58. func GetModelFileChunkByMD5AndUser(md5 string, userID int64, typeCloudBrain int) (*ModelFileChunk, error) {
  59. return getModelFileChunkByMD5AndUser(x, md5, userID, typeCloudBrain)
  60. }
  61. func getModelFileChunkByMD5AndUser(e Engine, md5 string, userID int64, typeCloudBrain int) (*ModelFileChunk, error) {
  62. fileChunk := new(ModelFileChunk)
  63. if has, err := e.Where("md5 = ? and user_id = ? and type = ?", md5, userID, typeCloudBrain).Get(fileChunk); err != nil {
  64. return nil, err
  65. } else if !has {
  66. return nil, ErrFileChunkNotExist{md5, ""}
  67. }
  68. return fileChunk, nil
  69. }
  70. func getFileChunkByMD5AndUser(e Engine, md5 string, userID int64, typeCloudBrain int) (*FileChunk, error) {
  71. fileChunk := new(FileChunk)
  72. if has, err := e.Where("md5 = ? and user_id = ? and type = ?", md5, userID, typeCloudBrain).Get(fileChunk); err != nil {
  73. return nil, err
  74. } else if !has {
  75. return nil, ErrFileChunkNotExist{md5, ""}
  76. }
  77. return fileChunk, nil
  78. }
  79. // GetAttachmentByID returns attachment by given id
  80. func GetFileChunkByUUID(uuid string) (*FileChunk, error) {
  81. return getFileChunkByUUID(x, uuid)
  82. }
  83. func getFileChunkByUUID(e Engine, uuid string) (*FileChunk, error) {
  84. fileChunk := new(FileChunk)
  85. if has, err := e.Where("uuid = ?", uuid).Get(fileChunk); err != nil {
  86. return nil, err
  87. } else if !has {
  88. return nil, ErrFileChunkNotExist{"", uuid}
  89. }
  90. return fileChunk, nil
  91. }
  92. func GetModelFileChunkByUUID(uuid string) (*ModelFileChunk, error) {
  93. return getModelFileChunkByUUID(x, uuid)
  94. }
  95. func getModelFileChunkByUUID(e Engine, uuid string) (*ModelFileChunk, error) {
  96. fileChunk := new(ModelFileChunk)
  97. if has, err := e.Where("uuid = ?", uuid).Get(fileChunk); err != nil {
  98. return nil, err
  99. } else if !has {
  100. return nil, ErrFileChunkNotExist{"", uuid}
  101. }
  102. return fileChunk, nil
  103. }
  104. // InsertFileChunk insert a record into file_chunk.
  105. func InsertFileChunk(fileChunk *FileChunk) (_ *FileChunk, err error) {
  106. if _, err := x.Insert(fileChunk); err != nil {
  107. return nil, err
  108. }
  109. return fileChunk, nil
  110. }
  111. // InsertFileChunk insert a record into file_chunk.
  112. func InsertModelFileChunk(fileChunk *ModelFileChunk) (_ *ModelFileChunk, err error) {
  113. if _, err := x.Insert(fileChunk); err != nil {
  114. return nil, err
  115. }
  116. return fileChunk, nil
  117. }
  118. func DeleteFileChunkById(uuid string) (*FileChunk, error) {
  119. return deleteFileChunkById(x, uuid)
  120. }
  121. func deleteFileChunkById(e Engine, uuid string) (*FileChunk, error) {
  122. fileChunk := new(FileChunk)
  123. if has, err := e.Where("uuid = ?", uuid).Get(fileChunk); err != nil {
  124. return nil, err
  125. } else if !has {
  126. return nil, ErrFileChunkNotExist{"", uuid}
  127. }
  128. err := deleteFileChunk(e, fileChunk)
  129. log.Info("delete the filechunk,id=" + fmt.Sprint(fileChunk.ID))
  130. if err != nil {
  131. return nil, err
  132. } else {
  133. return fileChunk, nil
  134. }
  135. }
  136. func UpdateModelFileChunk(fileChunk *ModelFileChunk) error {
  137. return updateModelFileChunk(x, fileChunk)
  138. }
  139. func updateModelFileChunk(e Engine, fileChunk *ModelFileChunk) error {
  140. var sess *xorm.Session
  141. sess = e.Where("uuid = ?", fileChunk.UUID)
  142. _, err := sess.Cols("is_uploaded").Update(fileChunk)
  143. return err
  144. }
  145. // UpdateFileChunk updates the given file_chunk in database
  146. func UpdateFileChunk(fileChunk *FileChunk) error {
  147. return updateFileChunk(x, fileChunk)
  148. }
  149. func updateFileChunk(e Engine, fileChunk *FileChunk) error {
  150. var sess *xorm.Session
  151. sess = e.Where("uuid = ?", fileChunk.UUID)
  152. _, err := sess.Cols("is_uploaded").Update(fileChunk)
  153. return err
  154. }
  155. // DeleteFileChunk delete the given file_chunk in database
  156. func DeleteFileChunk(fileChunk *FileChunk) error {
  157. return deleteFileChunk(x, fileChunk)
  158. }
  159. func deleteFileChunk(e Engine, fileChunk *FileChunk) error {
  160. _, err := e.ID(fileChunk.ID).Delete(fileChunk)
  161. return err
  162. }
  163. func DeleteModelFileChunk(fileChunk *ModelFileChunk) error {
  164. return deleteModelFileChunk(x, fileChunk)
  165. }
  166. func deleteModelFileChunk(e Engine, fileChunk *ModelFileChunk) error {
  167. _, err := e.ID(fileChunk.ID).Delete(fileChunk)
  168. return err
  169. }