feat: write files by id

This commit is contained in:
Yanislav Igonin 2021-09-11 16:05:31 +03:00
parent b54db6f729
commit e5bbc585e3
4 changed files with 29 additions and 24 deletions

View File

@ -7,6 +7,7 @@ import (
"net/http"
"path/filepath"
"strconv"
"strings"
"github.com/gin-gonic/gin"
@ -127,25 +128,26 @@ func CreateThread(c *gin.Context) {
}
for _, fileInRequest := range filesInRequest {
path := filepath.Join(
Utils.UPLOADS_DIR_PATH,
strconv.Itoa(postID),
fileInRequest.Filename,
)
file := Repositories.File{
PostID: postID,
Name: fileInRequest.Filename,
Ext: fileInRequest.Header["Content-Type"][0],
Size: int(fileInRequest.Size),
// image/jpeg -> jpeg
Ext: strings.Split(fileInRequest.Header["Content-Type"][0], "/")[1],
Size: int(fileInRequest.Size),
}
err := Repositories.Files.CreateInTx(tx, file)
fileID, err := Repositories.Files.CreateInTx(tx, file)
if err != nil {
log.Println("error:", err)
c.HTML(http.StatusInternalServerError, "500.html", nil)
return
}
path := filepath.Join(
Utils.UPLOADS_DIR_PATH,
strconv.Itoa(postID),
strconv.Itoa(fileID)+"."+file.Ext,
)
err = c.SaveUploadedFile(fileInRequest, path)
if err != nil {
log.Println("error:", err)
@ -217,25 +219,26 @@ func UpdateThread(c *gin.Context) {
}
for _, fileInRequest := range filesInRequest {
path := filepath.Join(
Utils.UPLOADS_DIR_PATH,
strconv.Itoa(threadID),
fileInRequest.Filename,
)
file := Repositories.File{
PostID: postID,
Name: fileInRequest.Filename,
Ext: fileInRequest.Header["Content-Type"][0],
Size: int(fileInRequest.Size),
// image/jpeg -> jpeg
Ext: strings.Split(fileInRequest.Header["Content-Type"][0], "/")[1],
Size: int(fileInRequest.Size),
}
err := Repositories.Files.CreateInTx(tx, file)
fileID, err := Repositories.Files.CreateInTx(tx, file)
if err != nil {
log.Println("error:", err)
c.HTML(http.StatusInternalServerError, "500.html", nil)
return
}
path := filepath.Join(
Utils.UPLOADS_DIR_PATH,
strconv.Itoa(threadID),
strconv.Itoa(fileID)+"."+file.Ext,
)
err = c.SaveUploadedFile(fileInRequest, path)
if err != nil {
log.Println("error:", err)

View File

@ -32,7 +32,7 @@ func (r *FilesRepository) Create(f File) error {
func (r *FilesRepository) GetByPostIDs(postIDs []int) (map[int][]File, error) {
sql := `
SELECT post_id, name, size
SELECT id, post_id, name, size, ext
FROM files
WHERE post_id = ANY ($1)
ORDER BY id ASC
@ -52,7 +52,7 @@ func (r *FilesRepository) GetByPostIDs(postIDs []int) (map[int][]File, error) {
filesMapByPostId := make(map[int][]File)
for rows.Next() {
var file File
err = rows.Scan(&file.PostID, &file.Name, &file.Size)
err = rows.Scan(&file.ID, &file.PostID, &file.Name, &file.Size, &file.Ext)
if err != nil {
return nil, err
}
@ -70,20 +70,22 @@ func (r *FilesRepository) GetByPostIDs(postIDs []int) (map[int][]File, error) {
return filesMapByPostId, nil
}
func (r *FilesRepository) CreateInTx(tx pgx.Tx, f File) error {
func (r *FilesRepository) CreateInTx(tx pgx.Tx, f File) (int, error) {
sql := `
INSERT INTO files (post_id, name, ext, size)
VALUES ($1, $2, $3, $4)
RETURNING id
`
row := tx.QueryRow(
context.TODO(), sql, f.PostID, f.Name, f.Ext, f.Size,
)
err := row.Scan()
createdFile := new(File)
err := row.Scan(&createdFile.ID)
if err != nil && err != pgx.ErrNoRows {
return err
return 0, err
}
return nil
return createdFile.ID, nil
}

View File

@ -24,7 +24,7 @@
{{ if gt $length 0 }}
{{ $FirstFile := index $Post.Files 0 }}
<img
src="/uploads/{{$Post.ID}}/{{$FirstFile.Name}}"
src="/uploads/{{$Post.ID}}/{{$FirstFile.ID}}.{{$FirstFile.Ext}}"
class="card-img-top"
alt="Uploaded picture"
>

View File

@ -20,7 +20,7 @@
{{ $length := len $Post.Files }} {{ if gt $length 0 }}
{{$FirstFile := index $Post.Files 0}}
<img
src="/uploads/{{$FirstPost.ID}}/{{$FirstFile.Name}}"
src="/uploads/{{$FirstPost.ID}}/{{$FirstFile.ID}}.{{$FirstFile.Ext}}"
class="card-img-top"
alt="Uploaded picture"
>