Source Code

;; janazah-service -- funeral/janazah service coordination
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var service-count uint u0)
(define-map services uint { coordinator: principal, location: (string-utf8 100), capacity: uint, volunteers: uint, active: bool })
(define-map service-volunteers { service-id: uint, volunteer: principal } bool)

(define-public (register-service (location (string-utf8 100)) (capacity uint))
  (let ((id (+ (var-get service-count) u1)))
    (var-set service-count id)
    (map-set services id { coordinator: tx-sender, location: location, capacity: capacity, volunteers: u0, active: true })
    (ok id)))

(define-public (join-service (service-id uint))
  (let ((s (unwrap! (map-get? services service-id) ERR-NONE)))
    (map-set service-volunteers { service-id: service-id, volunteer: tx-sender } true)
    (map-set services service-id (merge s { volunteers: (+ (get volunteers s) u1) }))
    (ok true)))

(define-public (deactivate-service (service-id uint))
  (let ((s (unwrap! (map-get? services service-id) ERR-NONE)))
    (asserts! (is-eq tx-sender (get coordinator s)) ERR-AUTH)
    (map-set services service-id (merge s { active: false })) (ok true)))

(define-read-only (get-service (id uint)) (map-get? services id))
(define-read-only (get-service-count) (var-get service-count))

Functions (5)

FunctionAccessArgs
register-servicepubliclocation: (string-utf8 100
join-servicepublicservice-id: uint
deactivate-servicepublicservice-id: uint
get-serviceread-onlyid: uint
get-service-countread-only