Skip to content

Commit b8077a2

Browse files
committed
feat(event): pay process
1 parent ebebc08 commit b8077a2

8 files changed

Lines changed: 172 additions & 2 deletions

File tree

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package http
2+
3+
import (
4+
"encoding/json"
5+
"io"
6+
"net/http"
7+
8+
"github.com/hammer-code/lms-be/domain"
9+
"github.com/hammer-code/lms-be/utils"
10+
"github.com/sirupsen/logrus"
11+
)
12+
13+
func (h Handler) PayProcess(w http.ResponseWriter, r *http.Request) {
14+
bodyBytes, err := io.ReadAll(r.Body)
15+
if err != nil {
16+
logrus.Error("failed to read body : ", err)
17+
utils.Response(domain.HttpResponse{
18+
Code: 500,
19+
Message: err.Error(),
20+
}, w)
21+
return
22+
}
23+
24+
var payload domain.PayProcessPayload
25+
if err := json.Unmarshal(bodyBytes, &payload); err != nil {
26+
logrus.Error("failed to unmarshal : ", err)
27+
utils.Response(domain.HttpResponse{
28+
Code: 500,
29+
Message: err.Error(),
30+
}, w)
31+
return
32+
}
33+
34+
err = h.usecase.PayProcess(r.Context(), payload)
35+
if err != nil {
36+
logrus.Error("failed to Create event : ", err)
37+
utils.Response(domain.HttpResponse{
38+
Code: 500,
39+
Message: err.Error(),
40+
}, w)
41+
return
42+
}
43+
44+
utils.Response(domain.HttpResponse{
45+
Code: 201,
46+
Message: "success",
47+
Data: nil,
48+
}, w)
49+
}

app/events/repository/get_events.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,15 @@ func (repo *repository) ListRegistration(ctx context.Context, filter domain.Even
9898

9999
return int(totalData), data, err
100100
}
101+
102+
func (repo *repository) GetEventPay(ctx context.Context, orderNo string) (data domain.EventPay, err error) {
103+
db := repo.db.DB(ctx).Model(&domain.EventPay{})
104+
105+
err = db.Where("order_no = ?", orderNo).Find(&data).Error
106+
if err != nil {
107+
logrus.Error("failed to get event pay")
108+
return
109+
}
110+
111+
return data, err
112+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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 (r repository) UpdateEventPay(ctx context.Context, event domain.EventPay) error {
11+
err := repo.db.DB(ctx).Save(&event).Error
12+
if err != nil {
13+
logrus.Error("failed to update event pay")
14+
return err
15+
}
16+
return nil
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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 (r repository) UpdateRegistrationEvent(ctx context.Context, event domain.RegistrationEvent) error {
11+
err := repo.db.DB(ctx).Save(&event).Error
12+
if err != nil {
13+
logrus.Error("failed to update registration event pay")
14+
return err
15+
}
16+
return nil
17+
}

app/events/usecase/create_pay_event.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ func (uc usecase) CreatePayEvent(ctx context.Context, payload domain.EventPayPay
3636
EventID: rEvent.EventID,
3737
ImageProofPayment: payload.ImageProofPayment,
3838
NetAmount: payload.NetAmount,
39+
Status: "PENDING",
40+
OrderNO: rEvent.OrderNo,
3941
})
4042

4143
if err != nil {

app/events/usecase/pay_process.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package usecase
2+
3+
import (
4+
"context"
5+
"errors"
6+
7+
"github.com/hammer-code/lms-be/domain"
8+
"github.com/sirupsen/logrus"
9+
)
10+
11+
func (uc usecase) PayProcess(ctx context.Context, payload domain.PayProcessPayload) error {
12+
rEvent, err := uc.repository.GetRegistrationEvent(ctx, payload.OrderNo)
13+
if err != nil {
14+
logrus.Error("failed to get event")
15+
return err
16+
}
17+
18+
if rEvent.ID == 0 {
19+
return errors.New("registration order not found")
20+
}
21+
22+
if rEvent.Status == "SUCCESS" {
23+
return nil
24+
}
25+
26+
eventPay, err := uc.repository.GetEventPay(ctx, payload.OrderNo)
27+
if err != nil {
28+
logrus.Error("failed to get event")
29+
return err
30+
}
31+
32+
if eventPay.ID == 0 {
33+
return errors.New("event pay order not found")
34+
}
35+
36+
if eventPay.Status == "SUCCESS" {
37+
return nil
38+
}
39+
40+
eventPay.Status = payload.Status
41+
rEvent.Status = payload.Status
42+
rEvent.UpToYou = payload.Note
43+
44+
err = uc.dbTX.StartTransaction(ctx, func(txCtx context.Context) error {
45+
err = uc.repository.UpdateEventPay(txCtx, eventPay)
46+
47+
if err != nil {
48+
logrus.Error("failed to update event pay")
49+
return err
50+
}
51+
52+
err = uc.repository.UpdateRegistrationEvent(txCtx, rEvent)
53+
if err != nil {
54+
logrus.Error("failed to update registration event pay")
55+
return err
56+
}
57+
58+
return nil
59+
})
60+
61+
return err
62+
}

cmd/serve_http.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,9 @@ func registerHandler(app app.App) *mux.Router {
153153
protectedV1Route.HandleFunc("/events", app.EventHandler.GetEvents).Methods(http.MethodGet)
154154
protectedV1Route.HandleFunc("/events/registrations", app.EventHandler.ListRegistration).Methods(http.MethodGet)
155155
protectedV1Route.HandleFunc("/events/pays", app.EventHandler.ListEventPay).Methods(http.MethodGet)
156+
protectedV1Route.HandleFunc("/events/pays", app.EventHandler.PayProcess).Methods(http.MethodPost)
156157
protectedV1Route.HandleFunc("/events/{id}", app.EventHandler.GetEventByID).Methods(http.MethodGet)
157158
protectedV1Route.HandleFunc("/images", app.ImageHandler.UploadImage).Methods(http.MethodPost)
158-
// protectedV1Route.HandleFunc("/events/pays", app.EventHandler.GetEvents).Methods(http.MethodPost)
159159

160160
return router
161161
}

domain/event.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ type EventRepository interface {
2323
GetRegistrationEvent(ctx context.Context, orderNo string) (data RegistrationEvent, err error)
2424
ListRegistration(ctx context.Context, filter EventFilter) (tData int, data []RegistrationEvent, err error)
2525
ListEventPay(ctx context.Context, filter EventFilter) (tData int, data []EventPay, err error)
26+
UpdateEventPay(ctx context.Context, event EventPay) error
27+
GetEventPay(ctx context.Context, orderNo string) (data EventPay, err error)
28+
UpdateRegistrationEvent(ctx context.Context, event RegistrationEvent) error
2629
}
2730

2831
type EventUsecase interface {
@@ -34,6 +37,7 @@ type EventUsecase interface {
3437
RegistrationStatus(ctx context.Context, orderNo string) (resp RegisterStatusResponse, err error)
3538
ListRegistration(ctx context.Context, filter EventFilter) (resp []RegistrationEvent, pagination Pagination, err error)
3639
ListEventPay(ctx context.Context, filter EventFilter) (data []EventPay, pagination Pagination, err error)
40+
PayProcess(ctx context.Context, payload PayProcessPayload) error
3741
}
3842

3943
type EventHandler interface {
@@ -45,7 +49,7 @@ type EventHandler interface {
4549
RegistrationStatus(w http.ResponseWriter, r *http.Request)
4650
ListRegistration(w http.ResponseWriter, r *http.Request)
4751
ListEventPay(w http.ResponseWriter, r *http.Request)
48-
// ApproveEventPay(w http.ResponseWriter, r *http.Request)
52+
PayProcess(w http.ResponseWriter, r *http.Request)
4953
}
5054

5155
type Event struct {
@@ -159,6 +163,7 @@ type EventPay struct {
159163
RegistrationEventID uint `json:"registration_event_id"`
160164
EventID uint `json:"event_id"`
161165
ImageProofPayment string `json:"image_proof_payment"`
166+
OrderNO string `json:"order_no"`
162167
NetAmount float64 `json:"net_amount"`
163168
Status string `json:"status"`
164169
RegistrationEvent RegistrationEvent `json:"registration_event" gorm:"foreignKey:RegistrationEventID"`
@@ -220,3 +225,9 @@ type RegisterStatusResponse struct {
220225
OrderNo string `json:"order_no"`
221226
Status string `json:"string"`
222227
}
228+
229+
type PayProcessPayload struct {
230+
OrderNo string `json:"order_no"`
231+
Status string `json:"status"`
232+
Note string `json:"note"`
233+
}

0 commit comments

Comments
 (0)