Source Code

;; tafsir-study -- Quran tafsir study circle management
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var circle-count uint u0)
(define-data-var session-count uint u0)
(define-map circles uint { leader: principal, name: (string-utf8 100), tafsir-type: (string-ascii 30), members: uint, active: bool })
(define-map sessions uint { circle-id: uint, surah: (string-utf8 50), ayah-start: uint, ayah-end: uint, block: uint })

(define-public (create-circle (name (string-utf8 100)) (tafsir-type (string-ascii 30)))
  (let ((id (+ (var-get circle-count) u1)))
    (var-set circle-count id)
    (map-set circles id { leader: tx-sender, name: name, tafsir-type: tafsir-type, members: u1, active: true })
    (ok id)))

(define-public (join-circle (circle-id uint))
  (let ((c (unwrap! (map-get? circles circle-id) ERR-NONE)))
    (map-set circles circle-id (merge c { members: (+ (get members c) u1) }))
    (ok true)))

(define-public (log-session (circle-id uint) (surah (string-utf8 50)) (ayah-start uint) (ayah-end uint))
  (let ((id (+ (var-get session-count) u1))
        (c (unwrap! (map-get? circles circle-id) ERR-NONE)))
    (asserts! (is-eq tx-sender (get leader c)) ERR-AUTH)
    (var-set session-count id)
    (map-set sessions id { circle-id: circle-id, surah: surah, ayah-start: ayah-start, ayah-end: ayah-end, block: stacks-block-height })
    (ok id)))

(define-read-only (get-circle (id uint)) (map-get? circles id))
(define-read-only (get-session (id uint)) (map-get? sessions id))

Functions (5)

FunctionAccessArgs
create-circlepublicname: (string-utf8 100
join-circlepubliccircle-id: uint
log-sessionpubliccircle-id: uint, surah: (string-utf8 50
get-circleread-onlyid: uint
get-sessionread-onlyid: uint