narasiahli-be/app/module/ebooks/request/ebook_ratings.request.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
}