Source Code

;; title: todo
;; version:
;; summary:
;; description:

;; traits
;;

;; definitions
(define-constant ERR_NOT_FOUND (err u404))
(define-constant ERR_NOT_OWNER (err u403))

;; data vars
(define-data-var next-id uint u0)

;; data maps
(define-map tasks 
    uint 
    {
        name: (string-ascii 50),
        completed: bool,
        owner: principal
    }
)

;; public functions
(define-public (create-task (name (string-ascii 50)))
    (let 
        (
            (id (var-get next-id))
        )
        (map-insert tasks id {
            name: name,
            completed: false,
            owner: tx-sender
        })
        (var-set next-id (+ id u1))
        (ok id)
    )
)

(define-public (complete-task (id uint))
    (let
        (
            (task (unwrap! (map-get? tasks id) ERR_NOT_FOUND))
        )
        (asserts! (is-eq (get owner task) tx-sender) ERR_NOT_OWNER)
        (ok (map-set tasks id (merge task { completed: true })))
    )
)

(define-public (delete-task (id uint))
    (let
        (
            (task (unwrap! (map-get? tasks id) ERR_NOT_FOUND))
        )
        (asserts! (is-eq (get owner task) tx-sender) ERR_NOT_OWNER)
        (ok (map-delete tasks id))
    )
)

;; read only functions
(define-read-only (get-task (id uint))
    (map-get? tasks id)
)

Functions (4)

FunctionAccessArgs
create-taskpublicname: (string-ascii 50
complete-taskpublicid: uint
delete-taskpublicid: uint
get-taskread-onlyid: uint