Skip to content

Commit 7ce9d86

Browse files
authored
Merge pull request #30 from hammercode-dev/feat/update-image
feat(image): update image endpoint for admin, fix typo, and session_type
2 parents 2e3eff5 + f756824 commit 7ce9d86

File tree

6 files changed

+35
-28
lines changed

6 files changed

+35
-28
lines changed

app/events/usecase/create_event.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ func (uc usecase) CreateEvent(ctx context.Context, payload domain.CreateEventPay
4646
Price: payload.Price,
4747
Status: payload.Status,
4848
AdditionalLink: payload.AdditionalLink,
49+
SessionType: payload.SessionType,
4950
}
5051

5152
eventID, err := uc.repository.CreateEvent(txCtx, data)

app/images/delivery/http/update_image.go

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package http
22

33
import (
44
"net/http"
5-
"strconv"
65
"strings"
76

87
"github.com/gorilla/mux"
@@ -11,26 +10,18 @@ import (
1110
)
1211

1312
func (h Handler) UpdateImage(w http.ResponseWriter, r *http.Request) {
14-
// Parse image ID from query or URL (misal: /images/{id})
15-
idStr := mux.Vars(r)["id"]
16-
if idStr == "" {
13+
// Parse image fileName from URL (misal: /images/{fileName})
14+
fileName := mux.Vars(r)["fileName"]
15+
if fileName == "" {
1716
utils.Response(domain.HttpResponse{
1817
Code: http.StatusBadRequest,
19-
Message: "missing image id",
20-
}, w)
21-
return
22-
}
23-
id, err := strconv.ParseUint(idStr, 10, 64)
24-
if err != nil {
25-
utils.Response(domain.HttpResponse{
26-
Code: http.StatusBadRequest,
27-
Message: "invalid image id",
18+
Message: "missing image file name",
2819
}, w)
2920
return
3021
}
3122

3223
// Parse multipart form
33-
err = r.ParseMultipartForm(10 << 20) // 10MB
24+
err := r.ParseMultipartForm(10 << 20) // 10MB
3425
if err != nil {
3526
utils.Response(domain.HttpResponse{
3627
Code: http.StatusBadRequest,
@@ -66,7 +57,7 @@ func (h Handler) UpdateImage(w http.ResponseWriter, r *http.Request) {
6657
}
6758

6859
ctx := r.Context()
69-
err = h.usecase.UpdateImage(ctx, upload, uint(id))
60+
response, err := h.usecase.UpdateImage(ctx, upload, fileName)
7061
if err != nil {
7162
utils.Response(domain.HttpResponse{
7263
Code: http.StatusInternalServerError,
@@ -78,6 +69,7 @@ func (h Handler) UpdateImage(w http.ResponseWriter, r *http.Request) {
7869
utils.Response(domain.HttpResponse{
7970
Code: 200,
8071
Message: "Image updated successfully",
72+
Data: response,
8173
}, w)
8274
}
8375

app/images/usecase/update_image.go

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,14 @@ import (
1212
"github.com/sirupsen/logrus"
1313
)
1414

15-
func (us *usecase) UpdateImage(ctx context.Context, payload domain.UploadImage, id uint) error {
15+
func (us *usecase) UpdateImage(ctx context.Context, payload domain.UploadImage, fileName string) (domain.UploadImageResponse, error) {
16+
// Get existing image data by fileName
17+
existingImage, err := us.imageRepo.GetImage(ctx, fileName)
18+
if err != nil {
19+
logrus.Error("failed to get existing image:", err)
20+
return domain.UploadImageResponse{}, err
21+
}
22+
1623
var filePath string
1724
hName := hash.GenerateHash(time.Now().Format("2006-01-02 15:04:05") + "Hammercode")
1825
uploadDir := "./uploads"
@@ -22,37 +29,44 @@ func (us *usecase) UpdateImage(ctx context.Context, payload domain.UploadImage,
2229

2330
// file path/category/type image
2431
uploadDir = fmt.Sprintf("%s/%s/%s", uploadDir, payload.Category, payload.Type)
25-
fileName := fmt.Sprintf("%s.%s", hName[0:15], payload.Format)
26-
filePath = fmt.Sprintf("%s/%s", uploadDir, fileName)
32+
newFileName := fmt.Sprintf("%s.%s", hName[0:15], payload.Format)
33+
filePath = fmt.Sprintf("%s/%s", uploadDir, newFileName)
2734

2835
// Ensure the directory exists, create it if it doesn't
2936
if err := os.MkdirAll(uploadDir, os.ModePerm); err != nil {
3037
logrus.Error("Failed to create directory:", err)
31-
return err
38+
return domain.UploadImageResponse{}, err
3239
}
3340

3441
// Save the file to the uploads directory
3542
dst, err := os.Create(filePath)
3643
if err != nil {
3744
logrus.Error("failed to create file path")
38-
return err
45+
return domain.UploadImageResponse{}, err
3946
}
4047
defer dst.Close()
4148

4249
_, err = io.Copy(dst, payload.File)
4350
if err != nil {
4451
logrus.Error("failed to read all file")
45-
return err
52+
return domain.UploadImageResponse{}, err
4653
}
4754

48-
// Update data di database
55+
// Update data di database with existing ID
4956
img := domain.Image{
50-
ID: id,
51-
FileName: fileName,
57+
ID: existingImage.ID,
58+
FileName: newFileName,
5259
FilePath: filePath,
5360
Format: payload.Format,
5461
ContentType: payload.ContentType,
5562
}
5663

57-
return us.imageRepo.UpdateImage(ctx, img)
64+
err = us.imageRepo.UpdateImage(ctx, img)
65+
if err != nil {
66+
return domain.UploadImageResponse{}, err
67+
}
68+
69+
return domain.UploadImageResponse{
70+
FileName: newFileName,
71+
}, nil
5872
}

cmd/serve_http.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ func registerHandler(app app.App) *mux.Router {
198198
protectedV1AdminRoute.HandleFunc("/users", app.UserHandler.GetUsers).Methods(http.MethodGet)
199199

200200
protectedV1AdminRoute.HandleFunc("/images", app.ImageHandler.UploadImage).Methods(http.MethodPost)
201-
protectedV1AdminRoute.HandleFunc("/images/{id}", app.ImageHandler.UpdateImage).Methods(http.MethodPut)
201+
protectedV1AdminRoute.HandleFunc("/images/{fileName}", app.ImageHandler.UpdateImage).Methods(http.MethodPut)
202202

203203
return router
204204
}

domain/event.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ type UpdateEventPayload struct {
155155
Tags []string `json:"tags"`
156156
Speakers []string `json:"speakers"`
157157
ReservationStartDate null.Time `json:"reservation_start_date"`
158-
ReservationEndDate null.Time `json:"reseveration_end_date"`
158+
ReservationEndDate null.Time `json:"reservation_end_date"`
159159
AdditionalLink string `json:"additional_link"`
160160
SessionType string `json:"session_type" validate:"required"`
161161
}

domain/image.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ type ImageRepository interface {
1818

1919
type ImageUsecase interface {
2020
UploadImage(context.Context, UploadImage) (UploadImageResponse, error)
21-
UpdateImage(ctx context.Context, file UploadImage, id uint) error
21+
UpdateImage(ctx context.Context, file UploadImage, fileName string) (UploadImageResponse, error)
2222
UpdateUseImage(context.Context, uint) error
2323
GetStorage(ctx context.Context, fileName string) (filePath string, err error)
2424
}

0 commit comments

Comments
 (0)