-
Notifications
You must be signed in to change notification settings - Fork 2
/
images.go
124 lines (112 loc) · 5.5 KB
/
images.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package dtos
import (
"fmt"
"mime/multipart"
"strings"
"time"
"github.com/omnibuildplatform/omni-repository/common/models"
)
type ImageRequest struct {
Name string `description:"name" form:"name" json:"name" validate:"required"`
Desc string `description:"desc" form:"desc" json:"desc"`
Checksum string `description:"checksum" form:"checksum" json:"checksum" validate:"required"`
Algorithm string `description:"algorithm" form:"algorithm" json:"algorithm" validate:"required,oneof=md5 sha256"`
ExternalID string `description:"externalID" form:"externalID" json:"externalID" validate:"required"`
SourceUrl string `description:"source url of images" json:"sourceUrl" form:"sourceUrl" validate:"required"`
FileName string `description:"file name" form:"fileName" json:"fileName" validate:"required"`
UserId int `description:"user id" form:"userID" json:"userID" validate:"required"`
Publish bool `description:"publish image to third party storage" form:"publish" json:"publish" `
ExternalComponent string `description:"From APP" form:"externalComponent" json:"externalComponent" validate:"required"`
}
type ImageRequestWithinFile struct {
Name string `description:"name" form:"name" json:"name" validate:"required"`
Desc string `description:"desc" form:"desc" json:"desc"`
Algorithm string `description:"algorithm" form:"algorithm" json:"algorithm" validate:"required,oneof=md5 sha256"`
ExternalID string `description:"externalID" form:"externalID" json:"externalID" validate:"required"`
FileName string `description:"file name" form:"fileName" json:"fileName" validate:"required"`
UserId int `description:"user id" form:"userID" json:"userID" validate:"required"`
Publish bool `description:"publish image to third party storage" form:"publish" json:"publish" `
ExternalComponent string `description:"From APP" form:"externalComponent" json:"externalComponent" validate:"required"`
CheckSumFile *multipart.FileHeader `form:"checksumFile" binding:"required" swaggerignore:"true"`
ImageFile *multipart.FileHeader `form:"imageFile" binding:"required" swaggerignore:"true"`
}
type ImageResponse struct {
ImageRequest
ID int `description:"id" form:"id" json:"id"`
Status models.ImageStatus `description:"image status" json:"status"`
StatusDetail string `description:"status detail" json:"statusDetail"`
ImagePath string `description:"image store path" json:"imagePath"`
ChecksumPath string `description:"image checksum store path" json:"checksumPath"`
CreateTime time.Time `description:"create time" json:"createTime"`
UpdateTime time.Time `description:"update time" json:"updateTime"`
}
type QueryImageRequest struct {
ExternalID string `form:"externalID" json:"externalID" validate:"required"`
}
type DeleteImageRequest struct {
UserID string `form:"userID" json:"userID" validate:"required"`
Checksum string `form:"checksum" json:"checksum" validate:"required"`
}
type ImageDTO struct {
browsePrefix string
}
func NewImageDTO(browsePrefix string) *ImageDTO {
return &ImageDTO{
browsePrefix: browsePrefix,
}
}
func (i *ImageDTO) GetImageFromRequest(imageRequest ImageRequest) models.Image {
return models.Image{
Name: imageRequest.Name,
Desc: imageRequest.Desc,
Checksum: imageRequest.Checksum,
Algorithm: imageRequest.Algorithm,
ExternalID: imageRequest.ExternalID,
SourceUrl: imageRequest.SourceUrl,
FileName: imageRequest.FileName,
UserId: imageRequest.UserId,
Publish: imageRequest.Publish,
ExternalComponent: imageRequest.ExternalComponent,
}
}
func (i *ImageDTO) GetImageFromRequestWithinFile(imageRequest ImageRequestWithinFile) models.Image {
return models.Image{
Name: imageRequest.Name,
Desc: imageRequest.Desc,
Algorithm: imageRequest.Algorithm,
ExternalID: imageRequest.ExternalID,
FileName: imageRequest.FileName,
UserId: imageRequest.UserId,
Publish: imageRequest.Publish,
ExternalComponent: imageRequest.ExternalComponent,
}
}
func (i *ImageDTO) GenerateResponseFromImage(image models.Image) ImageResponse {
imageResponse := ImageResponse{
ImageRequest: ImageRequest{
Name: image.Name,
Desc: image.Desc,
Checksum: image.Checksum,
Algorithm: image.Algorithm,
ExternalID: image.ExternalID,
SourceUrl: image.SourceUrl,
FileName: image.FileName,
UserId: image.UserId,
Publish: image.Publish,
ExternalComponent: image.ExternalComponent,
},
ID: image.ID,
Status: image.Status,
StatusDetail: image.StatusDetail,
CreateTime: image.CreateTime,
UpdateTime: image.UpdateTime,
}
if imageResponse.Status != models.ImagePushed {
imageResponse.ImagePath = fmt.Sprintf("%s/%s", strings.TrimRight(i.browsePrefix, "/"), strings.TrimLeft(image.ImagePath, "/"))
imageResponse.ChecksumPath = fmt.Sprintf("%s/%s", strings.TrimRight(i.browsePrefix, "/"), strings.TrimLeft(image.ChecksumPath, "/"))
} else {
imageResponse.ImagePath = image.ImagePath
imageResponse.ChecksumPath = image.ChecksumPath
}
return imageResponse
}