Skip to content

Commit 931532b

Browse files
authored
Merge pull request #26 from hammercode-dev/BE-14/refactoring-payload-and-domain
Be 14/refactoring payload and domain
2 parents ef26486 + f5e3ad0 commit 931532b

19 files changed

+500
-172
lines changed

app/events/repository/get_event.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
func (repo *repository) GetEvent(ctx context.Context, eventID uint) (data domain.Event, err error) {
1010
db := repo.db.DB(ctx).Model(&domain.Event{})
1111

12-
err = db.Where("id = ?", eventID).First(&data).Error
12+
err = db.Where("id = ?", eventID).Preload("Tags").Preload("Speakers").Preload("Author").First(&data).Error
1313

1414
return data, err
1515
}

app/events/repository/get_events.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import (
77
)
88

99
func (repo *repository) GetEvents(ctx context.Context, filter domain.EventFilter) (tData int, data []domain.Event, err error) {
10-
db := repo.db.DB(ctx).Model(&domain.Event{})
10+
11+
db := repo.db.DB(ctx).Model(&data)
1112

1213
var totalData int64
1314

@@ -35,10 +36,10 @@ func (repo *repository) GetEvents(ctx context.Context, filter domain.EventFilter
3536

3637
err = db.Limit(filter.FilterPagination.GetLimit()).
3738
Offset(filter.FilterPagination.GetOffset()).
38-
Preload("Tags").Preload("Speakers").Find(&data).Error
39+
Preload("Tags").Preload("Speakers").Preload("Author").Find(&data).Error
3940
if err != nil {
4041
return
4142
}
4243

4344
return int(totalData), data, err
44-
}
45+
}

app/events/usecase/create_event.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
"github.com/hammer-code/lms-be/constants"
88
"github.com/hammer-code/lms-be/domain"
9+
contextkey "github.com/hammer-code/lms-be/pkg/context_key"
910
"github.com/hammer-code/lms-be/utils"
1011
)
1112

@@ -25,11 +26,13 @@ func (uc usecase) CreateEvent(ctx context.Context, payload domain.CreateEventPay
2526
return err
2627
}
2728

29+
userData := ctx.Value(contextkey.UserKey).(domain.User)
30+
2831
err = uc.dbTX.StartTransaction(ctx, func(txCtx context.Context) error {
2932
data := domain.Event{
3033
Title: payload.Title,
3134
Description: payload.Description,
32-
Author: payload.Author,
35+
AuthorID: userData.ID,
3336
Image: dataImage.FileName,
3437
Date: payload.Date,
3538
Slug: payload.Slug,
@@ -42,7 +45,7 @@ func (uc usecase) CreateEvent(ctx context.Context, payload domain.CreateEventPay
4245
ReservationEndDate: payload.ReservationEndDate,
4346
Price: payload.Price,
4447
Status: payload.Status,
45-
AdditionalLink: payload.AdditionalLink,
48+
AdditionalLink: payload.AdditionalLink,
4649
}
4750

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

app/events/usecase/create_registration_event.go

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func (uc usecase) CreateRegistrationEvent(ctx context.Context, payload domain.Re
5252
err = utils.NewInternalServerError(ctx, err)
5353
return domain.RegisterEventResponse{}, err
5454
}
55-
55+
5656
if dataImage.IsUsed {
5757
err = utils.NewNotFoundError(ctx, "image not exists", errors.New("image not exists"))
5858
return domain.RegisterEventResponse{}, err
@@ -125,10 +125,8 @@ func (uc usecase) CreateRegistrationEvent(ctx context.Context, payload domain.Re
125125

126126
// is free event or not
127127
status := "SUCCESS"
128-
upToYou := "registration success"
129128
if event.Price != 0.0 {
130129
status = "PENDING"
131-
upToYou = "new register"
132130
emailPayload.SendEmail(ctx)
133131
} else {
134132
logrus.Info("free event, send email registration success")
@@ -151,19 +149,14 @@ func (uc usecase) CreateRegistrationEvent(ctx context.Context, payload domain.Re
151149
}
152150

153151
err = uc.dbTX.StartTransaction(ctx, func(txCtx context.Context) error {
154-
155152

156153
rId, err := uc.repository.CreateRegistrationEvent(txCtx, domain.RegistrationEvent{
157-
OrderNo: orderNo,
158-
UserID: strconv.Itoa(userData.ID),
159-
EventID: event.ID,
160-
Name: userData.Username,
161-
Email: userData.Email,
162-
PhoneNumber: payload.PhoneNumber,
163-
Status: status,
164-
UpToYou: upToYou,
154+
OrderNo: orderNo,
155+
UserID: strconv.Itoa(userData.ID),
156+
EventID: event.ID,
157+
Status: status,
165158
ImageProofPayment: dataImage.FileName,
166-
PaymentDate: null.NewTime(time.Now(), true),
159+
PaymentDate: null.NewTime(time.Now(), true),
167160
})
168161

169162
if err != nil {
@@ -175,7 +168,7 @@ func (uc usecase) CreateRegistrationEvent(ctx context.Context, payload domain.Re
175168
_, err = uc.repository.CreateEventPay(txCtx, domain.EventPay{
176169
RegistrationEventID: rId,
177170
EventID: event.ID,
178-
OrderNO: orderNo,
171+
OrderNO: orderNo,
179172
ImageProofPayment: dataImage.FileName,
180173
NetAmount: payload.NetAmount,
181174
})

app/events/usecase/get_event_general.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ import (
99
"github.com/hammer-code/lms-be/utils"
1010
)
1111

12-
func (uc usecase) GetEventByID(ctx context.Context, id uint) (domain.Event, error) {
13-
resp, err := uc.repository.GetEvent(ctx, id)
12+
func (uc usecase) GetEventByID(ctx context.Context, id uint) (resp domain.EventDTO, err error) {
13+
event, err := uc.repository.GetEvent(ctx, id)
1414
if err != nil {
1515
err = utils.NewInternalServerError(ctx, err)
1616
return resp, err
1717
}
1818
baseURL := config.GetConfig().BaseURL
1919

20-
resp.Image = fmt.Sprintf("%s/api/v1/public/storage/images/%s", baseURL, resp.Image)
20+
event.Image = fmt.Sprintf("%s/api/v1/public/storage/images/%s", baseURL, event.Image)
2121
return resp, err
2222
}

app/events/usecase/get_events.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/hammer-code/lms-be/utils"
1010
)
1111

12-
func (uc usecase) GetEvents(ctx context.Context, filter domain.EventFilter) (resp []domain.Event, pagination domain.Pagination, err error) {
12+
func (uc usecase) GetEvents(ctx context.Context, filter domain.EventFilter) (resp []domain.EventDTO, pagination domain.Pagination, err error) {
1313
tData, datas, err := uc.repository.GetEvents(ctx, filter)
1414
if err != nil {
1515
err = utils.NewInternalServerError(ctx, err)
@@ -18,9 +18,10 @@ func (uc usecase) GetEvents(ctx context.Context, filter domain.EventFilter) (res
1818

1919
baseURL := config.GetConfig().BaseURL
2020

21-
for i, data := range datas {
22-
datas[i].Image = fmt.Sprintf("%s/api/v1/public/storage/images/%s", baseURL, data.Image)
21+
for _, data := range datas {
22+
data.Image = fmt.Sprintf("%s/api/v1/public/storage/images/%s", baseURL, data.Image)
23+
resp = append(resp, data.ToDTO())
2324
}
2425

25-
return datas, domain.NewPagination(tData, filter.FilterPagination), err
26+
return resp, domain.NewPagination(tData, filter.FilterPagination), err
2627
}

app/events/usecase/pay_process.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"time"
1010

1111
"github.com/hammer-code/lms-be/domain"
12+
contextkey "github.com/hammer-code/lms-be/pkg/context_key"
1213
"github.com/hammer-code/lms-be/pkg/email"
1314
"github.com/hammer-code/lms-be/utils"
1415
"github.com/sirupsen/logrus"
@@ -21,7 +22,8 @@ func (uc usecase) PayProcess(ctx context.Context, payload domain.PayProcessPaylo
2122
return err
2223
}
2324

24-
logrus.Info("registration event: ", rEvent)
25+
userData := ctx.Value(contextkey.UserKey).(domain.User)
26+
2527
if rEvent.ID == 0 {
2628
err = utils.NewNotFoundError(ctx, "registration order not found", errors.New("registration order not found"))
2729
return err
@@ -48,7 +50,6 @@ func (uc usecase) PayProcess(ctx context.Context, payload domain.PayProcessPaylo
4850

4951
eventPay.Status = payload.Status
5052
rEvent.Status = payload.Status
51-
rEvent.UpToYou = payload.Note
5253

5354
err = uc.dbTX.StartTransaction(ctx, func(txCtx context.Context) error {
5455
err = uc.repository.UpdateEventPay(txCtx, eventPay)
@@ -117,12 +118,12 @@ func (uc usecase) PayProcess(ctx context.Context, payload domain.PayProcessPaylo
117118
if err := emailPayload.AddReceiver(
118119
ctx,
119120
email.Receiver{
120-
Email: rEvent.Email,
121+
Email: userData.Email,
121122
Data: map[string]interface{}{
122-
"name": rEvent.Name,
123+
"name": userData.Username,
123124
"title": event.Title,
124125
"price": event.Price,
125-
"email": rEvent.Email,
126+
"email": userData.Email,
126127
"order_no": rEvent.OrderNo,
127128
"status": payload.Status,
128129
"note": payload.Note,

app/events/usecase/update_event.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/hammer-code/lms-be/constants"
99
"github.com/hammer-code/lms-be/domain"
10+
contextkey "github.com/hammer-code/lms-be/pkg/context_key"
1011
"github.com/hammer-code/lms-be/utils"
1112
"gopkg.in/guregu/null.v4"
1213
)
@@ -16,12 +17,14 @@ func (uc usecase) UpdateEvent(ctx context.Context, id uint, payload domain.Updat
1617
return utils.NewBadRequestError(ctx, "Sorry, invalid event type", errors.New("event type is not valid"))
1718
}
1819

20+
userData := ctx.Value(contextkey.UserKey).(domain.User)
21+
1922
err := uc.repository.UpdateEvent(ctx, domain.Event{
2023
ID: id,
2124
Title: payload.Title,
2225
Description: payload.Description,
2326
Slug: payload.Slug,
24-
Author: payload.Author,
27+
AuthorID: userData.ID,
2528
Image: payload.FileName,
2629
Date: payload.Date,
2730
Type: payload.Type,
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package http
2+
3+
import (
4+
"net/http"
5+
"strconv"
6+
"strings"
7+
8+
"github.com/gorilla/mux"
9+
"github.com/hammer-code/lms-be/domain"
10+
"github.com/hammer-code/lms-be/utils"
11+
)
12+
13+
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 == "" {
17+
utils.Response(domain.HttpResponse{
18+
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",
28+
}, w)
29+
return
30+
}
31+
32+
// Parse multipart form
33+
err = r.ParseMultipartForm(10 << 20) // 10MB
34+
if err != nil {
35+
utils.Response(domain.HttpResponse{
36+
Code: http.StatusBadRequest,
37+
Message: "failed to parse form",
38+
}, w)
39+
return
40+
}
41+
file, header, err := r.FormFile("image")
42+
if err != nil {
43+
utils.Response(domain.HttpResponse{
44+
Code: http.StatusBadRequest,
45+
Message: "failed to get file",
46+
}, w)
47+
return
48+
}
49+
defer file.Close()
50+
51+
category := r.FormValue("category")
52+
if category == "" {
53+
category = "public"
54+
}
55+
56+
contentType := header.Header.Values("Content-Type")[0]
57+
contentFiles := strings.Split(contentType, "/")
58+
59+
upload := domain.UploadImage{
60+
File: file,
61+
Header: header,
62+
Category: category,
63+
ContentType: contentType,
64+
Format: contentFiles[1],
65+
Type: contentFiles[0],
66+
}
67+
68+
ctx := r.Context()
69+
err = h.usecase.UpdateImage(ctx, upload, uint(id))
70+
if err != nil {
71+
utils.Response(domain.HttpResponse{
72+
Code: http.StatusInternalServerError,
73+
Message: err.Error(),
74+
}, w)
75+
return
76+
}
77+
78+
utils.Response(domain.HttpResponse{
79+
Code: 200,
80+
Message: "Image updated successfully",
81+
}, w)
82+
}
83+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package repository
2+
3+
import (
4+
"context"
5+
6+
"github.com/hammer-code/lms-be/domain"
7+
"github.com/sirupsen/logrus"
8+
)
9+
10+
func (repo *repository) UpdateImage(ctx context.Context, img domain.Image) error {
11+
err := repo.db.DB(ctx).Model(&domain.Image{}).
12+
Where("id = ?", img.ID).
13+
Updates(map[string]interface{}{
14+
"file_name": img.FileName,
15+
"file_path": img.FilePath,
16+
"format": img.Format,
17+
"content_type": img.ContentType,
18+
}).Error
19+
if err != nil {
20+
logrus.Error("repo.UpdateImage : failed to update")
21+
return err
22+
}
23+
return nil
24+
}

0 commit comments

Comments
 (0)