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.2 kB

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