Source Code

;; khatm-tracker -- Quran khatm (completion) tracking for groups
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var group-count uint u0)
(define-map groups uint { organizer: principal, name: (string-utf8 100), juz-assigned: uint, completed-juz: uint, active: bool })
(define-map assignments { group-id: uint, reader: principal } uint)

(define-public (create-group (name (string-utf8 100)))
  (let ((id (+ (var-get group-count) u1)))
    (var-set group-count id)
    (map-set groups id { organizer: tx-sender, name: name, juz-assigned: u0, completed-juz: u0, active: true })
    (ok id)))

(define-public (assign-juz (group-id uint) (juz uint))
  (begin (map-set assignments { group-id: group-id, reader: tx-sender } juz)
    (let ((g (unwrap! (map-get? groups group-id) ERR-NONE)))
      (map-set groups group-id (merge g { juz-assigned: (+ (get juz-assigned g) u1) }))
      (ok juz))))

(define-public (mark-complete (group-id uint))
  (let ((g (unwrap! (map-get? groups group-id) ERR-NONE)))
    (map-set groups group-id (merge g { completed-juz: (+ (get completed-juz g) u1) }))
    (ok true)))

(define-read-only (get-group (id uint)) (map-get? groups id))
(define-read-only (get-assignment (group-id uint) (reader principal)) (map-get? assignments { group-id: group-id, reader: reader }))

Functions (5)

FunctionAccessArgs
create-grouppublicname: (string-utf8 100
assign-juzpublicgroup-id: uint, juz: uint
mark-completepublicgroup-id: uint
get-groupread-onlyid: uint
get-assignmentread-onlygroup-id: uint, reader: principal