first commit
This commit is contained in:
157
server/controllers/files.go
Normal file
157
server/controllers/files.go
Normal file
@@ -0,0 +1,157 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"github.com/akhilrex/hammond/common"
|
||||
"github.com/akhilrex/hammond/db"
|
||||
"github.com/akhilrex/hammond/models"
|
||||
"github.com/akhilrex/hammond/service"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func RegisterFilesController(router *gin.RouterGroup) {
|
||||
router.POST("/upload", uploadFile)
|
||||
router.POST("/quickEntries", createQuickEntry)
|
||||
router.GET("/quickEntries", getAllQuickEntries)
|
||||
router.GET("/me/quickEntries", getMyQuickEntries)
|
||||
router.GET("/quickEntries/:id", getQuickEntryById)
|
||||
router.POST("/quickEntries/:id/process", setQuickEntryAsProcessed)
|
||||
router.GET("/attachments/:id/file", getAttachmentFile)
|
||||
}
|
||||
|
||||
func createQuickEntry(c *gin.Context) {
|
||||
var request models.CreateQuickEntryModel
|
||||
if err := c.ShouldBind(&request); err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewValidatorError(err))
|
||||
return
|
||||
}
|
||||
attachment, err := saveUploadedFile(c, "file")
|
||||
if err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, err)
|
||||
return
|
||||
}
|
||||
if err := c.ShouldBind(&request); err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, err)
|
||||
return
|
||||
}
|
||||
quickEntry, err := service.CreateQuickEntry(request, attachment.ID, c.MustGet("userId").(string))
|
||||
if err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewError("createQuickEntry", err))
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusCreated, quickEntry)
|
||||
}
|
||||
|
||||
func getAllQuickEntries(c *gin.Context) {
|
||||
quickEntries, err := service.GetAllQuickEntries("")
|
||||
if err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewError("getAllQuickEntries", err))
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, quickEntries)
|
||||
}
|
||||
func getMyQuickEntries(c *gin.Context) {
|
||||
quickEntries, err := service.GetQuickEntriesForUser(c.MustGet("userId").(string), "")
|
||||
if err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewError("getMyQuickEntries", err))
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, quickEntries)
|
||||
}
|
||||
|
||||
func getQuickEntryById(c *gin.Context) {
|
||||
var searchByIdQuery models.SearchByIdQuery
|
||||
|
||||
if c.ShouldBindUri(&searchByIdQuery) == nil {
|
||||
quickEntry, err := service.GetQuickEntryById(searchByIdQuery.Id)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewError("getVehicleById", err))
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, quickEntry)
|
||||
} else {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
|
||||
}
|
||||
}
|
||||
func setQuickEntryAsProcessed(c *gin.Context) {
|
||||
var searchByIdQuery models.SearchByIdQuery
|
||||
|
||||
if c.ShouldBindUri(&searchByIdQuery) == nil {
|
||||
err := service.SetQuickEntryAsProcessed(searchByIdQuery.Id)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusUnprocessableEntity, common.NewError("getVehicleById", err))
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{})
|
||||
} else {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
|
||||
}
|
||||
}
|
||||
|
||||
func uploadFile(c *gin.Context) {
|
||||
attachment, err := saveMultipleUploadedFile(c, "file")
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, err)
|
||||
} else {
|
||||
c.JSON(http.StatusOK, attachment)
|
||||
}
|
||||
}
|
||||
func getAttachmentFile(c *gin.Context) {
|
||||
var searchByIdQuery models.SearchByIdQuery
|
||||
|
||||
if c.ShouldBindUri(&searchByIdQuery) == nil {
|
||||
|
||||
attachment, err := db.GetAttachmentById(searchByIdQuery.Id)
|
||||
if err == nil {
|
||||
if _, err = os.Stat(attachment.Path); os.IsNotExist(err) {
|
||||
c.Status(404)
|
||||
} else {
|
||||
c.File(attachment.Path)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
|
||||
}
|
||||
}
|
||||
|
||||
func saveUploadedFile(c *gin.Context, fileVariable string) (*db.Attachment, error) {
|
||||
if fileVariable == "" {
|
||||
fileVariable = "file"
|
||||
}
|
||||
file, err := c.FormFile(fileVariable)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filePath := service.GetFilePath(file.Filename)
|
||||
if err := c.SaveUploadedFile(file, filePath); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return service.CreateAttachment(filePath, file.Filename, file.Size, file.Header.Get("Content-Type"), c.MustGet("userId").(string))
|
||||
}
|
||||
func saveMultipleUploadedFile(c *gin.Context, fileVariable string) ([]*db.Attachment, error) {
|
||||
if fileVariable == "" {
|
||||
fileVariable = "files"
|
||||
}
|
||||
form, err := c.MultipartForm()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
files := form.File[fileVariable]
|
||||
var toReturn []*db.Attachment
|
||||
for _, file := range files {
|
||||
filePath := service.GetFilePath(file.Filename)
|
||||
if err := c.SaveUploadedFile(file, filePath); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
attachment, err := service.CreateAttachment(filePath, file.Filename, file.Size, file.Header.Get("Content-Type"), c.MustGet("userId").(string))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
toReturn = append(toReturn, attachment)
|
||||
}
|
||||
return toReturn, nil
|
||||
}
|
||||
Reference in New Issue
Block a user