Skip to content
This repository has been archived by the owner on Dec 4, 2024. It is now read-only.

Commit

Permalink
Merge pull request #78 from swibly/develop
Browse files Browse the repository at this point in the history
  • Loading branch information
devkcud authored Oct 26, 2024
2 parents 29e2c60 + 60e7ed5 commit 3ed63c3
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 19 deletions.
4 changes: 2 additions & 2 deletions internal/controller/http/v1/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ func UploadUserImage(ctx *gin.Context) {
return
}

if err := service.User.SetProfilePicture(issuer.ID, userProfilePicture.Image); err != nil {
if err := service.User.SetProfilePicture(issuer, userProfilePicture.Image); err != nil {
if errors.Is(err, aws.ErrUnsupportedFileType) {
log.Print(err)
ctx.JSON(http.StatusBadRequest, gin.H{"error": dict.UnsupportedFileType})
Expand Down Expand Up @@ -277,7 +277,7 @@ func RemoveUserImage(ctx *gin.Context) {

issuer := ctx.Keys["auth_user"].(*dto.UserProfile)

if err := service.User.RemoveProfilePicture(issuer.ID, issuer.Email); err != nil {
if err := service.User.RemoveProfilePicture(issuer); err != nil {
log.Print(err)
ctx.JSON(http.StatusInternalServerError, gin.H{"error": dict.InternalServerError})
return
Expand Down
17 changes: 15 additions & 2 deletions internal/service/repository/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,19 @@ func (pr *projectRepository) Update(projectID uint, updateModel *dto.ProjectUpda
}

if updateModel.BannerImage != nil {
var project model.Project
if err := tx.Where("id = ?", projectID).First(&project).Error; err != nil {
tx.Rollback()
return err
}

if project.BannerURL != "" {
if err := aws.DeleteProjectImage(project.BannerURL); err != nil {
tx.Rollback()
return err
}
}

url, err := aws.UploadProjectImage(projectID, updateModel.BannerImage)
if err != nil {
tx.Rollback()
Expand Down Expand Up @@ -779,7 +792,7 @@ func (pr *projectRepository) UnsafeDelete(id uint) error {
return err
}

if err := aws.DeleteProjectImage(id); err != nil {
if err := aws.DeleteProjectImage(project.BannerURL); err != nil {
tx.Rollback()
return err
}
Expand Down Expand Up @@ -877,7 +890,7 @@ func (pr *projectRepository) ClearTrash(userID uint) error {
}

for _, project := range projects {
if err := aws.DeleteProjectImage(project.ID); err != nil {
if err := aws.DeleteProjectImage(project.BannerURL); err != nil {
tx.Rollback()
return err
}
Expand Down
13 changes: 11 additions & 2 deletions internal/service/repository/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,11 +139,20 @@ func (u userRepository) Delete(id uint) error {
}

for _, projectID := range projectIDs {
if err := tx.Where("id = ?", projectID).Unscoped().Delete(&model.Project{}).Error; err != nil {
var project model.Project
if err := tx.Where("id = ?", projectID).First(&project).Error; err != nil {
tx.Rollback()
return err
}
if err := aws.DeleteProjectImage(projectID); err != nil {

if project.BannerURL != "" {
if err := aws.DeleteProjectImage(project.BannerURL); err != nil {
tx.Rollback()
return err
}
}

if err := tx.Where("id = ?", projectID).Unscoped().Delete(&model.Project{}).Error; err != nil {
tx.Rollback()
return err
}
Expand Down
18 changes: 11 additions & 7 deletions internal/service/usecase/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,25 +106,29 @@ func (uuc UserUseCase) Update(id uint, newModel *dto.UserUpdate) error {
return uuc.ur.Update(id, newModel)
}

func (uuc UserUseCase) SetProfilePicture(id uint, file *multipart.FileHeader) error {
url, err := aws.UploadUserImage(id, file)
func (uuc UserUseCase) SetProfilePicture(user *dto.UserProfile, file *multipart.FileHeader) error {
if err := aws.DeleteUserImage(user.ProfilePicture); err != nil {
return err
}

url, err := aws.UploadUserImage(user.ID, file)
if err != nil {
return err
}

return uuc.Update(id, &dto.UserUpdate{
return uuc.Update(user.ID, &dto.UserUpdate{
ProfilePicture: &url,
})
}

func (uuc UserUseCase) RemoveProfilePicture(id uint, email string) error {
hasher := sha256.Sum256([]byte(email))
func (uuc UserUseCase) RemoveProfilePicture(user *dto.UserProfile) error {
hasher := sha256.Sum256([]byte(user.Email))

if err := aws.DeleteUserImage(id); err != nil {
if err := aws.DeleteUserImage(user.ProfilePicture); err != nil {
return err
}

return uuc.Update(id, &dto.UserUpdate{
return uuc.Update(user.ID, &dto.UserUpdate{
ProfilePicture: utils.ToPtr(fmt.Sprintf("https://www.gravatar.com/avatar/%s?s=512&d=monsterid&r=g", hex.EncodeToString(hasher[:]))),
})
}
14 changes: 8 additions & 6 deletions pkg/aws/s3.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import (
"io"
"mime/multipart"
"path"
"path/filepath"
"slices"
"strings"
"time"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/s3"
Expand Down Expand Up @@ -84,7 +86,7 @@ func UploadProjectImage(projectID uint, file *multipart.FileHeader) (string, err
return "", ErrUnableToDecode
}

outputPath := fmt.Sprintf("projects/%d.webp", projectID)
outputPath := fmt.Sprintf("projects/%d-%d.webp", time.Now().Unix(), projectID)
var buf bytes.Buffer

err = webp.Encode(&buf, img, nil)
Expand All @@ -100,8 +102,8 @@ func UploadProjectImage(projectID uint, file *multipart.FileHeader) (string, err
return url, nil
}

func DeleteProjectImage(projectID uint) error {
return AWS.DeleteFile(fmt.Sprintf("projects/%d.webp", projectID))
func DeleteProjectImage(filename string) error {
return AWS.DeleteFile(fmt.Sprintf("projects/%s", filepath.Base(filename)))
}

func UploadUserImage(userID uint, file *multipart.FileHeader) (string, error) {
Expand All @@ -128,7 +130,7 @@ func UploadUserImage(userID uint, file *multipart.FileHeader) (string, error) {
return "", ErrUnableToDecode
}

outputPath := fmt.Sprintf("users/%d.webp", userID)
outputPath := fmt.Sprintf("users/%d-%d.webp", time.Now().Unix(), userID)
var buf bytes.Buffer

err = webp.Encode(&buf, img, nil)
Expand All @@ -144,6 +146,6 @@ func UploadUserImage(userID uint, file *multipart.FileHeader) (string, error) {
return url, nil
}

func DeleteUserImage(userID uint) error {
return AWS.DeleteFile(fmt.Sprintf("users/%d.webp", userID))
func DeleteUserImage(filename string) error {
return AWS.DeleteFile(fmt.Sprintf("users/%s", filepath.Base(filename)))
}

0 comments on commit 3ed63c3

Please sign in to comment.