Source Code

;; arabic-tutor -- Arabic language tutoring marketplace
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var tutor-count uint u0)
(define-data-var lesson-count uint u0)
(define-map tutors uint { teacher: principal, dialect: (string-ascii 30), rate: uint, lessons-given: uint })
(define-map lessons uint { tutor-id: uint, student: principal, level: (string-ascii 20), completed: bool, block: uint })

(define-public (register-tutor (dialect (string-ascii 30)) (rate uint))
  (let ((id (+ (var-get tutor-count) u1)))
    (var-set tutor-count id)
    (map-set tutors id { teacher: tx-sender, dialect: dialect, rate: rate, lessons-given: u0 })
    (ok id)))

(define-public (book-lesson (tutor-id uint) (level (string-ascii 20)))
  (let ((id (+ (var-get lesson-count) u1)))
    (var-set lesson-count id)
    (map-set lessons id { tutor-id: tutor-id, student: tx-sender, level: level, completed: false, block: stacks-block-height })
    (ok id)))

(define-public (complete-lesson (lesson-id uint))
  (let ((l (unwrap! (map-get? lessons lesson-id) ERR-NONE)))
    (map-set lessons lesson-id (merge l { completed: true }))
    (let ((t (unwrap! (map-get? tutors (get tutor-id l)) ERR-NONE)))
      (map-set tutors (get tutor-id l) (merge t { lessons-given: (+ (get lessons-given t) u1) }))
      (ok true))))

(define-read-only (get-tutor (id uint)) (map-get? tutors id))
(define-read-only (get-lesson (id uint)) (map-get? lessons id))

Functions (5)

FunctionAccessArgs
register-tutorpublicdialect: (string-ascii 30
book-lessonpublictutor-id: uint, level: (string-ascii 20
complete-lessonpubliclesson-id: uint
get-tutorread-onlyid: uint
get-lessonread-onlyid: uint