Source Code

(define-map events
  { event-id: uint }
  {
    owner: principal,
    event-type: (string-ascii 50),
    timestamp: uint,
    data: (string-ascii 500),
    active: bool
  }
)

(define-data-var event-counter uint u0)

(define-constant ERR-NOT-FOUND (err u404))
(define-constant ERR-UNAUTHORIZED (err u403))
(define-constant ERR-INACTIVE (err u410))

(define-public (register-event (event-type (string-ascii 50)) (data (string-ascii 500)))
  (let
    (
      (event-id (var-get event-counter))
    )
    (map-set events
      { event-id: event-id }
      {
        owner: tx-sender,
        event-type: event-type,
        timestamp: stacks-block-height,
        data: data,
        active: true
      }
    )
    (var-set event-counter (+ event-id u1))
    (ok event-id)
  )
)

(define-read-only (get-event (event-id uint))
  (map-get? events { event-id: event-id })
)

(define-read-only (get-event-count)
  (ok (var-get event-counter))
)

(define-public (update-event (event-id uint) (new-data (string-ascii 500)))
  (let
    (
      (event (unwrap! (get-event event-id) ERR-NOT-FOUND))
    )
    (asserts! (is-eq tx-sender (get owner event)) ERR-UNAUTHORIZED)
    (asserts! (get active event) ERR-INACTIVE)
    (map-set events
      { event-id: event-id }
      (merge event { data: new-data })
    )
    (ok true)
  )
)

(define-public (deactivate-event (event-id uint))
  (let
    (
      (event (unwrap! (get-event event-id) ERR-NOT-FOUND))
    )
    (asserts! (is-eq tx-sender (get owner event)) ERR-UNAUTHORIZED)
    (map-set events
      { event-id: event-id }
      (merge event { active: false })
    )
    (ok true)
  )
)

Functions (5)

FunctionAccessArgs
register-eventpublicevent-type: (string-ascii 50
get-eventread-onlyevent-id: uint
get-event-countread-only
update-eventpublicevent-id: uint, new-data: (string-ascii 500
deactivate-eventpublicevent-id: uint