Source Code

;; View Tracker

(define-map views
  uint
  { count: uint }
)

(define-map viewed
  { content: uint, user: principal }
  { seen: bool }
)

(define-public (record-view (content uint))
  (begin
    (if (is-none (map-get? viewed { content: content, user: tx-sender }))
      (begin
        (map-set viewed { content: content, user: tx-sender } { seen: true })
        (let ((current (default-to { count: u0 } (map-get? views content))))
          (map-set views content { count: (+ (get count current) u1) })
        )
      )
      true
    )
    (ok true)
  )
)

(define-read-only (get-view-count (content uint))
  (default-to { count: u0 } (map-get? views content))
)

(define-read-only (has-viewed (content uint) (user principal))
  (is-some (map-get? viewed { content: content, user: user }))
)

Functions (3)

FunctionAccessArgs
record-viewpubliccontent: uint
get-view-countread-onlycontent: uint
has-viewedread-onlycontent: uint, user: principal