Source Code

;; Contract: Reviews
;; Description: Users rate items from 1 to 5.

(define-map ratings { item-id: uint, user: principal } uint)

(define-public (rate-item (id uint) (stars uint))
    (let
        (
            ;; Verify item exists in the registry contract
            (exists (unwrap-panic (contract-call? .items item-exists id)))
        )
        ;; Validation
        (asserts! exists (err u404))
        (asserts! (and (>= stars u1) (<= stars u5)) (err u400))
        
        ;; Save rating
        (map-set ratings { item-id: id, user: tx-sender } stars)
        (ok "Rating Submitted")
    )
)

(define-read-only (get-my-rating (id uint) (user principal))
    (ok (map-get? ratings { item-id: id, user: user }))
)

Functions (2)

FunctionAccessArgs
rate-itempublicid: uint, stars: uint
get-my-ratingread-onlyid: uint, user: principal