Source Code

;; Language Class - Arabic/language learning program
;; Halal - learning languages
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var class-count uint u0)
(define-data-var student-count uint u0)
(define-map classes uint { teacher: principal, language: (string-ascii 20), level: (string-ascii 20), fee: uint, students: uint })
(define-map enrollments { class-id: uint, student: principal } { paid: uint, grade: uint })
(define-public (create-class (language (string-ascii 20)) (level (string-ascii 20)) (fee uint))
  (let ((id (+ (var-get class-count) u1)))
    (map-set classes id { teacher: tx-sender, language: language, level: level, fee: fee, students: u0 })
    (var-set class-count id) (ok id)))
(define-public (enroll (class-id uint))
  (let ((c (unwrap! (map-get? classes class-id) ERR-NONE)))
    (try! (stx-transfer? (get fee c) tx-sender (get teacher c)))
    (map-set enrollments { class-id: class-id, student: tx-sender } { paid: (get fee c), grade: u0 })
    (map-set classes class-id (merge c { students: (+ (get students c) u1) }))
    (var-set student-count (+ (var-get student-count) u1)) (ok true)))
(define-public (assign-grade (class-id uint) (student principal) (grade uint))
  (let ((c (unwrap! (map-get? classes class-id) ERR-NONE)))
    (asserts! (is-eq tx-sender (get teacher c)) ERR-AUTH)
    (map-set enrollments { class-id: class-id, student: student } { paid: u0, grade: grade }) (ok grade)))
(define-read-only (get-class (id uint)) (map-get? classes id))
(define-read-only (get-enrollment (class-id uint) (who principal)) (map-get? enrollments { class-id: class-id, student: who }))
(define-read-only (get-stats) (ok { classes: (var-get class-count), students: (var-get student-count) }))

Functions (6)

FunctionAccessArgs
create-classpubliclanguage: (string-ascii 20
enrollpublicclass-id: uint
assign-gradepublicclass-id: uint, student: principal, grade: uint
get-classread-onlyid: uint
get-enrollmentread-onlyclass-id: uint, who: principal
get-statsread-only