Skip to content

Commit 427b068

Browse files
committed
Merge branch 'development' into be-11/add_additional_link_field
2 parents ab54415 + 92abdde commit 427b068

16 files changed

Lines changed: 545 additions & 29 deletions

app/app.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func InitApp(
4949
// usecase
5050
userUsecase := users.InitUsecase(cfg, userRepo, dbTx, jwtInstance)
5151
newsletterUC := newsletters.InitUsecase(cfg, newsletterRepo, dbTx, jwt.NewJwt(cfg.JWT_SECRET_KEY))
52-
eventUC := events.InitUsecase(eventRepo, imgRepo, dbTx)
52+
eventUC := events.InitUsecase(cfg, eventRepo, imgRepo, dbTx)
5353
imgUc := images.InitUsecase(imgRepo, dbTx)
5454
blogPostUc := blogPost.InitUseCase(blogPostRepo, jwtInstance)
5555

app/events/events.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
handler_http "github.com/hammer-code/lms-be/app/events/delivery/http"
55
repository "github.com/hammer-code/lms-be/app/events/repository"
66
usecase "github.com/hammer-code/lms-be/app/events/usecase"
7+
8+
"github.com/hammer-code/lms-be/config"
79
"github.com/hammer-code/lms-be/domain"
810
"github.com/hammer-code/lms-be/pkg/db"
911
)
@@ -12,8 +14,8 @@ func InitRepository(db db.DatabaseTransaction) domain.EventRepository {
1214
return repository.NewRepository(db)
1315
}
1416

15-
func InitUsecase(repository domain.EventRepository, imageRepository domain.ImageRepository, dbTX db.DatabaseTransaction) domain.EventUsecase {
16-
return usecase.NewUsecase(repository, imageRepository, dbTX)
17+
func InitUsecase(cfg config.Config, repository domain.EventRepository, imageRepository domain.ImageRepository, dbTX db.DatabaseTransaction) domain.EventUsecase {
18+
return usecase.NewUsecase(cfg, repository, imageRepository, dbTX)
1719
}
1820

1921
func InitHandler(uc domain.EventUsecase) domain.EventHandler {

app/events/usecase/create_event.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func (uc usecase) CreateEvent(ctx context.Context, payload domain.CreateEventPay
2525
Title: payload.Title,
2626
Description: payload.Description,
2727
Author: payload.Author,
28-
ImageEvent: dataImage.FileName,
28+
Image: dataImage.FileName,
2929
Date: payload.Date,
3030
Slug: payload.Slug,
3131
Type: payload.Type,
@@ -34,7 +34,7 @@ func (uc usecase) CreateEvent(ctx context.Context, payload domain.CreateEventPay
3434
Capacity: payload.Capacity,
3535
RegistrationLink: payload.RegistrationLink,
3636
ReservationStartDate: payload.ReservationStartDate,
37-
ReservationEndDate: payload.ReservationStartDate,
37+
ReservationEndDate: payload.ReservationEndDate,
3838
Price: payload.Price,
3939
Status: payload.Status,
4040
}

app/events/usecase/create_registration_event.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"html/template"
8+
"os"
79
"time"
810

911
"github.com/hammer-code/lms-be/domain"
12+
"github.com/hammer-code/lms-be/pkg/email"
1013
"github.com/hammer-code/lms-be/pkg/hash"
1114
"github.com/hammer-code/lms-be/utils"
1215
)
@@ -41,12 +44,86 @@ func (uc usecase) CreateRegistrationEvent(ctx context.Context, payload domain.Re
4144

4245
orderNo := fmt.Sprintf("TXE-%d-%s%s%s%s", event.ID, time.Now().Format("06"), time.Now().Format("01"), time.Now().Format("02"), hash[0:4])
4346

47+
// Read HTML template for email
48+
htmlTmpl, err := os.ReadFile("./assets/event_status_registration_template.html")
49+
if err != nil {
50+
return domain.RegisterEventResponse{}, fmt.Errorf("failed to read file template: %w", err)
51+
}
52+
53+
// Parse the HTML template
54+
tmpl, err := template.New("register_event_status").Parse(string(htmlTmpl))
55+
if err != nil {
56+
return domain.RegisterEventResponse{}, fmt.Errorf("failed to parse template: %w", err)
57+
}
58+
59+
// Prepare data for the email template
60+
smtpConfig := email.SMTP{
61+
Email: uc.cfg.SMTP_EMAIL,
62+
Password: uc.cfg.SMTP_PASSWORD,
63+
Host: uc.cfg.SMTP_HOST,
64+
Port: uc.cfg.SMTP_PORT,
65+
}
66+
67+
// Prepare the receiver data
68+
emailPayload := email.NewSendEmail(
69+
ctx,
70+
smtpConfig,
71+
"MIME-Version: 1.0\r\nContent-Type: text/html; charset=UTF-8",
72+
"Welcome to Our Platform - Event Registration Status",
73+
tmpl,
74+
)
75+
var formattedDate string
76+
if event.Date.Valid {
77+
formattedDate = event.Date.Time.Format("Monday, 02 January 2006")
78+
} else {
79+
formattedDate = "Date to be announced"
80+
}
81+
82+
// Add the receiver's email and data to the payload
83+
if err := emailPayload.AddReceiver(
84+
ctx,
85+
email.Receiver{
86+
Email: payload.Email,
87+
Data: map[string]interface{}{
88+
"name": payload.Name,
89+
"title": event.Title,
90+
"price": event.Price,
91+
"email": payload.Email,
92+
"order_no": orderNo,
93+
"year": time.Now().Format("2006"),
94+
"date": formattedDate,
95+
"duration": event.Duration,
96+
"location": event.Location,
97+
},
98+
}); err != nil {
99+
return domain.RegisterEventResponse{}, fmt.Errorf("failed to add receiver: %w", err)
100+
}
101+
44102
// is free event or not
45103
status := "SUCCESS"
46104
upToYou := "registration success"
47105
if event.Price != 0.0 {
48106
status = "PENDING"
49107
upToYou = "new register"
108+
emailPayload.SendEmail(ctx)
109+
} else {
110+
logrus.Info("free event, send email registration success")
111+
// Read HTML template for email
112+
htmlTmpl, err := os.ReadFile("./assets/event_status_registration_sucess_template.html")
113+
if err != nil {
114+
return domain.RegisterEventResponse{}, fmt.Errorf("failed to read file template: %w", err)
115+
}
116+
117+
// Parse the HTML template
118+
tmpl, err := template.New("register_event_status").Parse(string(htmlTmpl))
119+
if err != nil {
120+
return domain.RegisterEventResponse{}, fmt.Errorf("failed to parse template: %w", err)
121+
}
122+
123+
if err := emailPayload.ChangeTemplate(ctx, tmpl); err != nil {
124+
return domain.RegisterEventResponse{}, fmt.Errorf("failed to change template: %w", err)
125+
}
126+
emailPayload.SendEmail(ctx)
50127
}
51128

52129
err = uc.dbTX.StartTransaction(ctx, func(txCtx context.Context) error {

app/events/usecase/get_event_general.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ func (uc usecase) GetEventByID(ctx context.Context, id uint) (domain.Event, erro
1717
}
1818
baseURL := config.GetConfig().BaseURL
1919

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

app/events/usecase/get_events.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func (uc usecase) GetEvents(ctx context.Context, filter domain.EventFilter) (res
1919
baseURL := config.GetConfig().BaseURL
2020

2121
for i, data := range datas {
22-
datas[i].ImageEvent = fmt.Sprintf("%s/api/v1/public/storage/images/%s", baseURL, data.ImageEvent)
22+
datas[i].Image = fmt.Sprintf("%s/api/v1/public/storage/images/%s", baseURL, data.Image)
2323
}
2424

2525
return datas, domain.NewPagination(tData, filter.FilterPagination), err

app/events/usecase/pay_process.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@ package usecase
33
import (
44
"context"
55
"errors"
6+
"fmt"
7+
"html/template"
8+
"os"
9+
"time"
610

711
"github.com/hammer-code/lms-be/domain"
12+
"github.com/hammer-code/lms-be/pkg/email"
813
"github.com/hammer-code/lms-be/utils"
14+
"github.com/sirupsen/logrus"
915
)
1016

1117
func (uc usecase) PayProcess(ctx context.Context, payload domain.PayProcessPayload) error {
@@ -15,6 +21,7 @@ func (uc usecase) PayProcess(ctx context.Context, payload domain.PayProcessPaylo
1521
return err
1622
}
1723

24+
logrus.Info("registration event: ", rEvent)
1825
if rEvent.ID == 0 {
1926
err = utils.NewNotFoundError(ctx, "registration order not found", errors.New("registration order not found"))
2027
return err
@@ -57,6 +64,79 @@ func (uc usecase) PayProcess(ctx context.Context, payload domain.PayProcessPaylo
5764
return err
5865
}
5966

67+
// Get the complete event details
68+
event, err := uc.repository.GetEvent(txCtx, rEvent.EventID)
69+
if err != nil {
70+
logrus.Error("failed to get event details")
71+
return err
72+
}
73+
74+
// Format the date in a readable format
75+
var formattedDate string
76+
if event.Date.Valid {
77+
formattedDate = event.Date.Time.Format("Monday, 02 January 2006")
78+
} else {
79+
formattedDate = "Date to be announced"
80+
}
81+
82+
// Read HTML template for email
83+
var htmlTmpl []byte
84+
if payload.Status == "SUCCESS" {
85+
htmlTmpl, err = os.ReadFile("./assets/event_status_registration_sucess_template.html")
86+
} else {
87+
htmlTmpl, err = os.ReadFile("./assets/event_status_registration_template.html")
88+
}
89+
if err != nil {
90+
return fmt.Errorf("failed to read file template: %w", err)
91+
}
92+
93+
// Parse the HTML template
94+
tmpl, err := template.New("register_event_status").Parse(string(htmlTmpl))
95+
if err != nil {
96+
return fmt.Errorf("failed to parse template: %w", err)
97+
}
98+
99+
// Prepare data for the email template
100+
smtpConfig := email.SMTP{
101+
Email: uc.cfg.SMTP_EMAIL,
102+
Password: uc.cfg.SMTP_PASSWORD,
103+
Host: uc.cfg.SMTP_HOST,
104+
Port: uc.cfg.SMTP_PORT,
105+
}
106+
107+
// Prepare the receiver data
108+
emailPayload := email.NewSendEmail(
109+
ctx,
110+
smtpConfig,
111+
"MIME-Version: 1.0\r\nContent-Type: text/html; charset=UTF-8",
112+
"Update: Your Event Registration Status",
113+
tmpl,
114+
)
115+
116+
// Add the receiver's email and data to the payload
117+
if err := emailPayload.AddReceiver(
118+
ctx,
119+
email.Receiver{
120+
Email: rEvent.Email,
121+
Data: map[string]interface{}{
122+
"name": rEvent.Name,
123+
"title": event.Title,
124+
"price": event.Price,
125+
"email": rEvent.Email,
126+
"order_no": rEvent.OrderNo,
127+
"status": payload.Status,
128+
"note": payload.Note,
129+
"year": time.Now().Format("2006"),
130+
"date": formattedDate,
131+
"duration": event.Duration,
132+
"location": event.Location,
133+
},
134+
}); err != nil {
135+
return fmt.Errorf("failed to add receiver: %w", err)
136+
}
137+
138+
// Send the email
139+
emailPayload.SendEmail(ctx)
60140
return nil
61141
})
62142

app/events/usecase/update_event.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func (uc usecase) UpdateEvent(ctx context.Context, id uint, payload domain.Updat
1616
Description: payload.Description,
1717
Slug: payload.Slug,
1818
Author: payload.Author,
19-
ImageEvent: payload.FileName,
19+
Image: payload.FileName,
2020
Date: payload.Date,
2121
Type: payload.Type,
2222
Location: payload.Location,

app/events/usecase/usecase.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,29 @@
11
package usecase
22

33
import (
4+
"github.com/hammer-code/lms-be/config"
45
"github.com/hammer-code/lms-be/domain"
56
"github.com/hammer-code/lms-be/pkg/db"
67
)
78

89
type usecase struct {
910
repository domain.EventRepository
1011
imageRepository domain.ImageRepository
12+
cfg config.Config
1113
dbTX db.DatabaseTransaction
1214
}
1315

1416
var (
1517
uc *usecase
1618
)
1719

18-
func NewUsecase(repository domain.EventRepository, imageRepository domain.ImageRepository, dbTX db.DatabaseTransaction) domain.EventUsecase {
20+
func NewUsecase(cfg config.Config, repository domain.EventRepository, imageRepository domain.ImageRepository, dbTX db.DatabaseTransaction) domain.EventUsecase {
1921
if uc == nil {
2022
uc = &usecase{
2123
repository: repository,
2224
imageRepository: imageRepository,
2325
dbTX: dbTX,
26+
cfg: cfg,
2427
}
2528
}
2629

app/images/delivery/http/upload_image.go

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

33
import (
4+
"fmt"
45
_ "image/gif"
56
_ "image/jpeg"
67
_ "image/png"
@@ -19,7 +20,7 @@ func (h Handler) UploadImage(w http.ResponseWriter, r *http.Request) {
1920
// Retrieve the file from the form-data
2021
file, header, err := r.FormFile("image")
2122
if err != nil {
22-
http.Error(w, "Error Retrieving the File", http.StatusInternalServerError)
23+
http.Error(w, fmt.Sprintf("Error retrieving file: %v", err), http.StatusBadRequest)
2324
return
2425
}
2526
defer file.Close()

0 commit comments

Comments
 (0)