114 lines
2.8 KiB
Go
114 lines
2.8 KiB
Go
package request
|
|
|
|
import (
|
|
"narasi-ahli-be/app/database/entity"
|
|
"narasi-ahli-be/utils/paginator"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type EbookRatingsGeneric interface {
|
|
ToEntity()
|
|
}
|
|
|
|
type EbookRatingsQueryRequest struct {
|
|
EbookId *uint `json:"ebookId"`
|
|
UserId *uint `json:"userId"`
|
|
Rating *int `json:"rating"`
|
|
IsVerified *bool `json:"isVerified"`
|
|
StatusId *int `json:"statusId"`
|
|
Pagination *paginator.Pagination `json:"pagination"`
|
|
}
|
|
|
|
type EbookRatingsCreateRequest struct {
|
|
EbookId uint `json:"ebookId" validate:"required"`
|
|
PurchaseId uint `json:"purchaseId" validate:"required"`
|
|
Rating int `json:"rating" validate:"required,min=1,max=5"`
|
|
Review *string `json:"review"`
|
|
IsAnonymous *bool `json:"isAnonymous"`
|
|
}
|
|
|
|
func (req EbookRatingsCreateRequest) ToEntity() *entity.EbookRatings {
|
|
return &entity.EbookRatings{
|
|
EbookId: req.EbookId,
|
|
PurchaseId: req.PurchaseId,
|
|
Rating: req.Rating,
|
|
Review: req.Review,
|
|
IsAnonymous: req.IsAnonymous,
|
|
IsVerified: boolPtr(true),
|
|
StatusId: intPtr(1),
|
|
IsActive: boolPtr(true),
|
|
}
|
|
}
|
|
|
|
type EbookRatingsUpdateRequest struct {
|
|
Rating int `json:"rating" validate:"required,min=1,max=5"`
|
|
Review *string `json:"review"`
|
|
IsAnonymous *bool `json:"isAnonymous"`
|
|
}
|
|
|
|
func (req EbookRatingsUpdateRequest) ToEntity() *entity.EbookRatings {
|
|
return &entity.EbookRatings{
|
|
Rating: req.Rating,
|
|
Review: req.Review,
|
|
IsAnonymous: req.IsAnonymous,
|
|
UpdatedAt: time.Now(),
|
|
}
|
|
}
|
|
|
|
type EbookRatingsQueryRequestContext struct {
|
|
EbookId string `json:"ebookId"`
|
|
UserId string `json:"userId"`
|
|
Rating string `json:"rating"`
|
|
IsVerified string `json:"isVerified"`
|
|
StatusId string `json:"statusId"`
|
|
}
|
|
|
|
func (req EbookRatingsQueryRequestContext) ToParamRequest() EbookRatingsQueryRequest {
|
|
var request EbookRatingsQueryRequest
|
|
|
|
if ebookIdStr := req.EbookId; ebookIdStr != "" {
|
|
ebookId, err := strconv.Atoi(ebookIdStr)
|
|
if err == nil {
|
|
ebookIdUint := uint(ebookId)
|
|
request.EbookId = &ebookIdUint
|
|
}
|
|
}
|
|
if userIdStr := req.UserId; userIdStr != "" {
|
|
userId, err := strconv.Atoi(userIdStr)
|
|
if err == nil {
|
|
userIdUint := uint(userId)
|
|
request.UserId = &userIdUint
|
|
}
|
|
}
|
|
if ratingStr := req.Rating; ratingStr != "" {
|
|
rating, err := strconv.Atoi(ratingStr)
|
|
if err == nil {
|
|
request.Rating = &rating
|
|
}
|
|
}
|
|
if isVerifiedStr := req.IsVerified; isVerifiedStr != "" {
|
|
isVerified, err := strconv.ParseBool(isVerifiedStr)
|
|
if err == nil {
|
|
request.IsVerified = &isVerified
|
|
}
|
|
}
|
|
if statusIdStr := req.StatusId; statusIdStr != "" {
|
|
statusId, err := strconv.Atoi(statusIdStr)
|
|
if err == nil {
|
|
request.StatusId = &statusId
|
|
}
|
|
}
|
|
|
|
return request
|
|
}
|
|
|
|
// Helper functions
|
|
func boolPtr(b bool) *bool {
|
|
return &b
|
|
}
|
|
|
|
func intPtr(i int) *int {
|
|
return &i
|
|
}
|