draft
This commit is contained in:
122
internal/modules/payments/presenter.go
Normal file
122
internal/modules/payments/presenter.go
Normal file
@@ -0,0 +1,122 @@
|
||||
package payments
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
appv1 "stream.api/internal/gen/proto/app/v1"
|
||||
"stream.api/internal/modules/common"
|
||||
)
|
||||
|
||||
func presentCreatePaymentResponse(result *CreatePaymentResult) *appv1.CreatePaymentResponse {
|
||||
return &appv1.CreatePaymentResponse{
|
||||
Payment: common.ToProtoPayment(result.Payment),
|
||||
Subscription: common.ToProtoPlanSubscription(result.Subscription),
|
||||
WalletBalance: result.WalletBalance,
|
||||
InvoiceId: result.InvoiceID,
|
||||
Message: result.Message,
|
||||
}
|
||||
}
|
||||
|
||||
func presentPaymentHistoryResponse(result *PaymentHistoryResult) *appv1.ListPaymentHistoryResponse {
|
||||
items := make([]*appv1.PaymentHistoryItem, 0, len(result.Items))
|
||||
for _, row := range result.Items {
|
||||
items = append(items, &appv1.PaymentHistoryItem{
|
||||
Id: row.ID,
|
||||
Amount: row.Amount,
|
||||
Currency: row.Currency,
|
||||
Status: row.Status,
|
||||
PlanId: row.PlanID,
|
||||
PlanName: row.PlanName,
|
||||
InvoiceId: row.InvoiceID,
|
||||
Kind: row.Kind,
|
||||
TermMonths: row.TermMonths,
|
||||
PaymentMethod: row.PaymentMethod,
|
||||
ExpiresAt: parseRFC3339ToProto(row.ExpiresAt),
|
||||
CreatedAt: parseRFC3339ToProto(row.CreatedAt),
|
||||
})
|
||||
}
|
||||
return &appv1.ListPaymentHistoryResponse{
|
||||
Payments: items,
|
||||
Total: result.Total,
|
||||
Page: result.Page,
|
||||
Limit: result.Limit,
|
||||
HasPrev: result.HasPrev,
|
||||
HasNext: result.HasNext,
|
||||
}
|
||||
}
|
||||
|
||||
func presentTopupWalletResponse(result *TopupWalletResult) *appv1.TopupWalletResponse {
|
||||
return &appv1.TopupWalletResponse{
|
||||
WalletTransaction: common.ToProtoWalletTransaction(result.WalletTransaction),
|
||||
WalletBalance: result.WalletBalance,
|
||||
InvoiceId: result.InvoiceID,
|
||||
}
|
||||
}
|
||||
|
||||
func presentDownloadInvoiceResponse(result *DownloadInvoiceResult) *appv1.DownloadInvoiceResponse {
|
||||
return &appv1.DownloadInvoiceResponse{
|
||||
Filename: result.Filename,
|
||||
ContentType: result.ContentType,
|
||||
Content: result.Content,
|
||||
}
|
||||
}
|
||||
|
||||
func presentAdminPayment(view AdminPaymentView) *appv1.AdminPayment {
|
||||
return &appv1.AdminPayment{
|
||||
Id: view.ID,
|
||||
UserId: view.UserID,
|
||||
PlanId: view.PlanID,
|
||||
Amount: view.Amount,
|
||||
Currency: view.Currency,
|
||||
Status: view.Status,
|
||||
Provider: view.Provider,
|
||||
TransactionId: view.TransactionID,
|
||||
InvoiceId: view.InvoiceID,
|
||||
CreatedAt: parseRFC3339ToProto(view.CreatedAt),
|
||||
UpdatedAt: parseRFC3339ToProto(view.UpdatedAt),
|
||||
UserEmail: view.UserEmail,
|
||||
PlanName: view.PlanName,
|
||||
TermMonths: view.TermMonths,
|
||||
PaymentMethod: view.PaymentMethod,
|
||||
ExpiresAt: view.ExpiresAt,
|
||||
WalletAmount: view.WalletAmount,
|
||||
TopupAmount: view.TopupAmount,
|
||||
}
|
||||
}
|
||||
|
||||
func presentListAdminPaymentsResponse(result *ListAdminPaymentsResult) *appv1.ListAdminPaymentsResponse {
|
||||
items := make([]*appv1.AdminPayment, 0, len(result.Items))
|
||||
for _, item := range result.Items {
|
||||
items = append(items, presentAdminPayment(item))
|
||||
}
|
||||
return &appv1.ListAdminPaymentsResponse{Payments: items, Total: result.Total, Page: result.Page, Limit: result.Limit}
|
||||
}
|
||||
|
||||
func presentGetAdminPaymentResponse(view AdminPaymentView) *appv1.GetAdminPaymentResponse {
|
||||
return &appv1.GetAdminPaymentResponse{Payment: presentAdminPayment(view)}
|
||||
}
|
||||
|
||||
func presentCreateAdminPaymentResponse(result *CreateAdminPaymentResult) *appv1.CreateAdminPaymentResponse {
|
||||
return &appv1.CreateAdminPaymentResponse{
|
||||
Payment: presentAdminPayment(result.Payment),
|
||||
Subscription: common.ToProtoPlanSubscription(result.Subscription),
|
||||
WalletBalance: result.WalletBalance,
|
||||
InvoiceId: result.InvoiceID,
|
||||
}
|
||||
}
|
||||
|
||||
func presentUpdateAdminPaymentResponse(view AdminPaymentView) *appv1.UpdateAdminPaymentResponse {
|
||||
return &appv1.UpdateAdminPaymentResponse{Payment: presentAdminPayment(view)}
|
||||
}
|
||||
|
||||
func parseRFC3339ToProto(value *string) *timestamppb.Timestamp {
|
||||
if value == nil || *value == "" {
|
||||
return nil
|
||||
}
|
||||
parsed, err := time.Parse(time.RFC3339, *value)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return timestamppb.New(parsed.UTC())
|
||||
}
|
||||
Reference in New Issue
Block a user