wangzhibo
2026-08-28 15a761842dcc4cab565ce9ae05b5a701d94dc2de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
o
®Ž3j<
ã@s$ddlmZmZmZddlmZddlmZddlm    Z    ddl
m Z eddgdZ e ƒZ d    ed
e    fd d „Ze  d ¡dd„ƒZe  d¡dd„ƒZe  d¡defdd„ƒZe  d¡dd„ƒZe  d¡defdd„ƒZe  d¡defdd„ƒZe  d ¡d    ed!efd"d#„ƒZe  d$¡d    ed!efd%d&„ƒZd'S)(é)Ú    APIRouterÚ HTTPExceptionÚRequest)Úsettings)ÚInitTaskRequest)ÚInitTaskDispatcher)Ú CourseServicez/api/v1Úcourses)ÚprefixÚtagsÚrequestÚreturncCs
|jjjS©N)ÚappÚstateÚinit_dispatcher)r ©rú2D:\apps\smartlearning\server\app\routes\courses.pyÚ_get_dispatcher s
rz/coursescÃó
t ¡Sr)Úcourse_serviceÚget_course_indexrrrrÚ list_coursesó€rz/courses/base-manifestcÃst tj¡}dt|ƒ|dœS)NÚbase)ÚscopeZ course_countr    )rÚbuild_base_course_sync_payloadsrÚbase_urlÚlen)ÚpayloadsrrrÚget_base_courses_manifests € ýr z/courses/{course_id}Ú    course_idc
Ãó:zt |¡WSty}z    tdt|ƒd|‚d}~ww©Ni”©Ú status_codeÚdetail)rÚ
get_courseÚFileNotFoundErrorrÚstr©r!Úexcrrrr'ó€ €ÿr'z    /tasklistcÃrr)rÚ get_tasklistrrrrr-'rr-z/courses/{course_id}/tasksc
Ãr"r#)rÚget_course_taskr(rr)r*rrrÚget_course_tasks,r,r/z/courses/{course_id}/manifestc
ÃsBz
t |tj¡}|WSty }z    tdt|ƒd|‚d}~wwr#)rÚbuild_course_task_sync_payloadrrr(rr))r!Úpayloadr+rrrÚget_course_manifest4s€€ÿr2z /devices/initÚbodycÃs0|jjj}|j|j|jd\}}|j||dœS)N)Úforce)Ú    device_idÚcommandsÚstatus)rrÚ    auto_initZdispatch_manual_initr5r4)r r3r8r6r7rrrÚ init_device=s€
r9z/devices/course-initcÃs>|js
tddd‚t|ƒ}| |j|j¡}|j|j|ddœS)Nizcourse_id is requiredr$Z
dispatched)r5r!r6r7)r!rrÚdispatch_course_initr5)r r3Ú
dispatcherr6rrrÚinit_course_on_deviceDs€ ür<N)ÚfastapirrrÚ
app.configrÚapp.models.schemasrÚapp.mqtt.init_dispatcherrÚapp.services.course_servicerÚrouterrrÚgetrr r)r'r-r/r2Úpostr9r<rrrrÚ<module>s0