Source Code

;; Hijrah Assist - Migration assistance program
;; Halal - helping the displaced
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var case-count uint u0)
(define-data-var total-aid uint u0)
(define-map cases uint { family: (string-utf8 100), origin: (string-utf8 100), destination: (string-utf8 100), need: uint, received: uint, status: (string-ascii 20) })
(define-map case-donors { case-id: uint, donor: principal } uint)
(define-public (open-case (family (string-utf8 100)) (origin (string-utf8 100)) (destination (string-utf8 100)) (need uint))
  (let ((id (+ (var-get case-count) u1)))
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-AUTH)
    (map-set cases id { family: family, origin: origin, destination: destination, need: need, received: u0, status: "open" })
    (var-set case-count id) (ok id)))
(define-public (donate-case (case-id uint) (amount uint))
  (let ((c (unwrap! (map-get? cases case-id) ERR-NONE)))
    (try! (stx-transfer? amount tx-sender CONTRACT-OWNER))
    (map-set case-donors { case-id: case-id, donor: tx-sender } amount)
    (map-set cases case-id (merge c { received: (+ (get received c) amount) }))
    (var-set total-aid (+ (var-get total-aid) amount)) (ok amount)))
(define-public (close-case (case-id uint))
  (let ((c (unwrap! (map-get? cases case-id) ERR-NONE)))
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-AUTH)
    (map-set cases case-id (merge c { status: "settled" })) (ok true)))
(define-read-only (get-case (id uint)) (map-get? cases id))
(define-read-only (get-stats) (ok { cases: (var-get case-count), aid: (var-get total-aid) }))

Functions (5)

FunctionAccessArgs
open-casepublicfamily: (string-utf8 100
donate-casepubliccase-id: uint, amount: uint
close-casepubliccase-id: uint
get-caseread-onlyid: uint
get-statsread-only