Help us shape the future of Go! Take the 2026 Go Developer Survey

eduskit

package module
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2026 License: Apache-2.0 Imports: 12 Imported by: 0

README

eduskit Go SDK

Go B 端 Server SDK。sdk.Client() 调课堂 server-api,sdk.WhiteboardClient() 调白板 server-api。

方法带 context.Context,返回 (map[string]any, error)。JSON 字段 camelCase。

概念与方法表见 docs/overview.md、docs/api.md。

安装

go get github.com/eduskit/server-sdk-go

本仓库:

go test ./...

初始化

sdk := eduskit.New(eduskit.Options{
    Lang:    "zh-CN",
    Timeout: 10 * time.Second,
    Client: &eduskit.ClientConfig{
        BaseURL:   "http://localhost:3112",
        AppID:     os.Getenv("EDU_APP_ID"),
        AppKey:    os.Getenv("EDU_APP_KEY"),
        AppSecret: os.Getenv("EDU_APP_SECRET"),
    },
    WhiteboardClient: &eduskit.ClientConfig{
        BaseURL:   "http://localhost:3012",
        AppID:     os.Getenv("WB_APP_ID"),
        AppKey:    os.Getenv("WB_APP_KEY"),
        AppSecret: os.Getenv("WB_APP_SECRET"),
    },
})

client, err := sdk.Client()
wb, err := sdk.WhiteboardClient()

某一侧不配则对应 getter 返回 SDK_CLIENT_NOT_CONFIGURED。可注入 HTTPClient 做测试。

课堂 Client()

ctx := context.Background()
user, err := client.Users.Register(ctx, map[string]any{
    "originId": "stu_001",
    "nickname": "小明",
    "avatar":   "https://example.com/a.png",
})
token, err := client.Auth.IssueToken(ctx, map[string]any{"eduUserId": user["eduUserId"], "originId": "stu_001"})
room, err := client.Classrooms.Create(ctx, map[string]any{
    "name":             "一年级数学",
    "startsAt":         "2026-08-17T10:00:00.000Z",
    "endsAt":           "2026-08-17T11:00:00.000Z",
    "teacherEduUserId": user["eduUserId"],
})
id := room["classroomId"].(string)
_, err = client.Classrooms.Start(ctx, id)
_, err = client.Classrooms.Members.Add(ctx, id, map[string]any{
    "eduUserId": user["eduUserId"],
    "role":      "student",
})
_, err = client.Classrooms.Members.ReplaceStudents(ctx, id, map[string]any{
    "eduUserIds": []string{user["eduUserId"].(string)},
})
_, err = client.Classrooms.Permissions.Set(ctx, id, user["eduUserId"].(string), map[string]any{
    "permission":        "camera",
    "effect":            "grant",
    "operatorEduUserId": user["eduUserId"],
})
_, err = client.Classrooms.Coursewares.Bind(ctx, id, map[string]any{
    "coursewareIds": []string{"cw_xxx"},
})
_, err = client.App.GetUiConfig(ctx)
方法 对应 Node
Users.Register users.register
Auth.IssueToken auth.issueToken
Classrooms.Create/Start/End classrooms.*
Classrooms.Members.Add/List/ReplaceStudents classrooms.members.*
Classrooms.Permissions.Get/Set/Clear classrooms.permissions.*
Classrooms.Coursewares.List/Bind/Unbind classrooms.coursewares.*
App.GetUiConfig / SetUiConfig app.*

白板 WhiteboardClient()

cred, err := wb.Auth.IssueRoomToken(ctx, map[string]any{
    "roomId": "room_1", "userId": "eu_xxx", "role": "host", "expiresIn": 3600,
})
session, err := wb.Recordings.Start(ctx, "room_1", map[string]any{"externalRef": "lesson_001"})
_, err = wb.Recordings.EnqueueVideoExport(ctx, session["recordingId"].(string), map[string]any{"profile": "hd"})
_, err = wb.Files.Convert(ctx, map[string]any{"sourceUrl": "https://cdn.example.com/lesson.pptx"})
_, err = wb.Files.GetConvertJob(ctx, "job_xxx")
方法 对应 Node
Auth.IssueRoomToken issueRoomToken
Recordings.Start/Stop/List/Get recordings.*
Recordings.RegisterMediaAsset / DeleteMediaAsset 同名
Recordings.EnqueueVideoExport / GetVideoExport 同名
Captures.Create/List captures.*
Files.Convert / GetConvertJob files.*

错误

if err != nil {
    if sdkErr, ok := err.(*eduskit.Error); ok {
        log.Println(sdkErr.ErrorCode, sdkErr.Status, sdkErr.TraceID, sdkErr.Source)
    }
}

client.LastTraceID() / wb.LastTraceID()。

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ClassroomAppAPI

type ClassroomAppAPI struct {
	// contains filtered or unexported fields
}

func (ClassroomAppAPI) GetUiConfig

func (a ClassroomAppAPI) GetUiConfig(ctx context.Context) (map[string]any, error)

func (ClassroomAppAPI) SetUiConfig

func (a ClassroomAppAPI) SetUiConfig(ctx context.Context, input map[string]any) (map[string]any, error)

type ClassroomAuthAPI

type ClassroomAuthAPI struct {
	// contains filtered or unexported fields
}

func (ClassroomAuthAPI) IssueToken

func (a ClassroomAuthAPI) IssueToken(ctx context.Context, input map[string]any) (map[string]any, error)

type ClassroomClassroomsAPI

type ClassroomClassroomsAPI struct {
	Members     ClassroomMembersAPI
	Permissions ClassroomPermissionsAPI
	Coursewares ClassroomCoursewaresAPI
	// contains filtered or unexported fields
}

func (ClassroomClassroomsAPI) Create

func (a ClassroomClassroomsAPI) Create(ctx context.Context, input map[string]any) (map[string]any, error)

func (ClassroomClassroomsAPI) End

func (a ClassroomClassroomsAPI) End(ctx context.Context, classroomID string) (map[string]any, error)

func (ClassroomClassroomsAPI) Start

func (a ClassroomClassroomsAPI) Start(ctx context.Context, classroomID string) (map[string]any, error)

type ClassroomClient

type ClassroomClient struct {
	Users      ClassroomUsersAPI
	Auth       ClassroomAuthAPI
	Classrooms ClassroomClassroomsAPI
	App        ClassroomAppAPI
	// contains filtered or unexported fields
}

func NewClassroomClient

func NewClassroomClient(cfg ClientConfig) *ClassroomClient

func (*ClassroomClient) LastTraceID

func (c *ClassroomClient) LastTraceID() string

type ClassroomCoursewaresAPI

type ClassroomCoursewaresAPI struct {
	// contains filtered or unexported fields
}

func (ClassroomCoursewaresAPI) Bind

func (a ClassroomCoursewaresAPI) Bind(ctx context.Context, classroomID string, input map[string]any) (map[string]any, error)

func (ClassroomCoursewaresAPI) List

func (a ClassroomCoursewaresAPI) List(ctx context.Context, classroomID string) (map[string]any, error)

func (ClassroomCoursewaresAPI) Unbind

func (a ClassroomCoursewaresAPI) Unbind(ctx context.Context, classroomID string, input map[string]any) (map[string]any, error)

type ClassroomMembersAPI

type ClassroomMembersAPI struct {
	// contains filtered or unexported fields
}

func (ClassroomMembersAPI) Add

func (a ClassroomMembersAPI) Add(ctx context.Context, classroomID string, input map[string]any) (map[string]any, error)

func (ClassroomMembersAPI) List

func (a ClassroomMembersAPI) List(ctx context.Context, classroomID string) (map[string]any, error)

func (ClassroomMembersAPI) ReplaceStudents

func (a ClassroomMembersAPI) ReplaceStudents(ctx context.Context, classroomID string, input map[string]any) (map[string]any, error)

type ClassroomPermissionsAPI

type ClassroomPermissionsAPI struct {
	// contains filtered or unexported fields
}

func (ClassroomPermissionsAPI) Clear

func (a ClassroomPermissionsAPI) Clear(ctx context.Context, classroomID, eduUserID, permission string, input map[string]any) (map[string]any, error)

func (ClassroomPermissionsAPI) Get

func (a ClassroomPermissionsAPI) Get(ctx context.Context, classroomID, eduUserID string) (map[string]any, error)

func (ClassroomPermissionsAPI) Set

func (a ClassroomPermissionsAPI) Set(ctx context.Context, classroomID, eduUserID string, input map[string]any) (map[string]any, error)

type ClassroomUsersAPI

type ClassroomUsersAPI struct {
	// contains filtered or unexported fields
}

func (ClassroomUsersAPI) Register

func (a ClassroomUsersAPI) Register(ctx context.Context, input map[string]any) (map[string]any, error)

type ClientConfig

type ClientConfig struct {
	BaseURL    string
	AppID      string
	AppKey     string
	AppSecret  string
	Lang       string
	Timeout    time.Duration
	HTTPClient doer
}

type Eduskit

type Eduskit struct {
	// contains filtered or unexported fields
}

func New

func New(opts Options) *Eduskit

func (*Eduskit) Client

func (s *Eduskit) Client() (*ClassroomClient, error)

func (*Eduskit) WhiteboardClient

func (s *Eduskit) WhiteboardClient() (*WhiteboardClient, error)

type Error

type Error struct {
	Message   string
	Status    int
	ErrorCode string
	TraceID   string
	Path      string
	Source    string
}

func (*Error) Error

func (e *Error) Error() string

type Options

type Options struct {
	Lang             string
	Timeout          time.Duration
	HTTPClient       doer
	Client           *ClientConfig
	WhiteboardClient *ClientConfig
}

type WhiteboardAuthAPI

type WhiteboardAuthAPI struct {
	// contains filtered or unexported fields
}

func (WhiteboardAuthAPI) IssueRoomToken

func (a WhiteboardAuthAPI) IssueRoomToken(ctx context.Context, input map[string]any) (map[string]any, error)

type WhiteboardCapturesAPI

type WhiteboardCapturesAPI struct {
	// contains filtered or unexported fields
}

func (WhiteboardCapturesAPI) Create

func (a WhiteboardCapturesAPI) Create(ctx context.Context, roomID string, input map[string]any) (map[string]any, error)

func (WhiteboardCapturesAPI) List

func (a WhiteboardCapturesAPI) List(ctx context.Context, roomID string) (any, error)

type WhiteboardClient

type WhiteboardClient struct {
	Rooms      WhiteboardRoomsAPI
	Auth       WhiteboardAuthAPI
	Recordings WhiteboardRecordingsAPI
	Captures   WhiteboardCapturesAPI
	Files      WhiteboardFilesAPI
	// contains filtered or unexported fields
}

func NewWhiteboardClient

func NewWhiteboardClient(cfg ClientConfig) *WhiteboardClient

func (*WhiteboardClient) LastTraceID

func (c *WhiteboardClient) LastTraceID() string

type WhiteboardFilesAPI

type WhiteboardFilesAPI struct {
	// contains filtered or unexported fields
}

func (WhiteboardFilesAPI) Convert

func (a WhiteboardFilesAPI) Convert(ctx context.Context, input map[string]any) (map[string]any, error)

func (WhiteboardFilesAPI) GetConvertJob

func (a WhiteboardFilesAPI) GetConvertJob(ctx context.Context, jobID string) (map[string]any, error)

type WhiteboardRecordingsAPI

type WhiteboardRecordingsAPI struct {
	// contains filtered or unexported fields
}

func (WhiteboardRecordingsAPI) DeleteMediaAsset

func (a WhiteboardRecordingsAPI) DeleteMediaAsset(ctx context.Context, recordingID, assetID string) (map[string]any, error)

func (WhiteboardRecordingsAPI) EnqueueVideoExport

func (a WhiteboardRecordingsAPI) EnqueueVideoExport(ctx context.Context, recordingID string, input map[string]any) (map[string]any, error)

func (WhiteboardRecordingsAPI) Get

func (a WhiteboardRecordingsAPI) Get(ctx context.Context, recordingID string) (map[string]any, error)

func (WhiteboardRecordingsAPI) GetVideoExport

func (a WhiteboardRecordingsAPI) GetVideoExport(ctx context.Context, recordingID, jobID string) (map[string]any, error)

func (WhiteboardRecordingsAPI) List

func (a WhiteboardRecordingsAPI) List(ctx context.Context, roomID string) (any, error)

func (WhiteboardRecordingsAPI) RegisterMediaAsset

func (a WhiteboardRecordingsAPI) RegisterMediaAsset(ctx context.Context, recordingID string, input map[string]any) (map[string]any, error)

func (WhiteboardRecordingsAPI) Start

func (a WhiteboardRecordingsAPI) Start(ctx context.Context, roomID string, input map[string]any) (map[string]any, error)

func (WhiteboardRecordingsAPI) Stop

func (a WhiteboardRecordingsAPI) Stop(ctx context.Context, roomID string, input map[string]any) (map[string]any, error)

type WhiteboardRoomsAPI added in v0.1.5

type WhiteboardRoomsAPI struct {
	// contains filtered or unexported fields
}

func (WhiteboardRoomsAPI) AttachCourseware added in v0.1.5

func (a WhiteboardRoomsAPI) AttachCourseware(ctx context.Context, roomID string, input map[string]any) (map[string]any, error)

func (WhiteboardRoomsAPI) ChangePrivateRoomGrant added in v0.1.5

func (a WhiteboardRoomsAPI) ChangePrivateRoomGrant(ctx context.Context, roomID string, input map[string]any) (map[string]any, error)

func (WhiteboardRoomsAPI) CreateFrozenSnapshot added in v0.1.5

func (a WhiteboardRoomsAPI) CreateFrozenSnapshot(ctx context.Context, roomID, snapshotID string) (map[string]any, error)

func (WhiteboardRoomsAPI) GetFrozenSnapshot added in v0.1.5

func (a WhiteboardRoomsAPI) GetFrozenSnapshot(ctx context.Context, roomID, snapshotID string) (map[string]any, error)

func (WhiteboardRoomsAPI) GetFrozenSnapshotDownload added in v0.1.5

func (a WhiteboardRoomsAPI) GetFrozenSnapshotDownload(ctx context.Context, roomID, snapshotID string) (map[string]any, error)

func (WhiteboardRoomsAPI) GetPrivateRoomAccess added in v0.1.5

func (a WhiteboardRoomsAPI) GetPrivateRoomAccess(ctx context.Context, roomID, userID string) (map[string]any, error)

func (WhiteboardRoomsAPI) GetPrivateWorkspaceInitialization added in v0.1.5

func (a WhiteboardRoomsAPI) GetPrivateWorkspaceInitialization(ctx context.Context, roomID string) (map[string]any, error)

func (WhiteboardRoomsAPI) InitializePrivateWorkspace added in v0.1.5

func (a WhiteboardRoomsAPI) InitializePrivateWorkspace(ctx context.Context, roomID, assignmentID string, sourceSnapshotID *string) (map[string]any, error)

func (WhiteboardRoomsAPI) IssuePrivateRoomToken added in v0.1.5

func (a WhiteboardRoomsAPI) IssuePrivateRoomToken(ctx context.Context, roomID string, input map[string]any) (map[string]any, error)

func (WhiteboardRoomsAPI) ProvisionPrivateRoom added in v0.1.5

func (a WhiteboardRoomsAPI) ProvisionPrivateRoom(ctx context.Context, roomID, assignmentID string) (map[string]any, error)

func (WhiteboardRoomsAPI) SchedulePrivateRoomWrites added in v0.1.5

func (a WhiteboardRoomsAPI) SchedulePrivateRoomWrites(ctx context.Context, roomID, requestID, opensAt, closesAt string) (map[string]any, error)

func (WhiteboardRoomsAPI) SealPrivateRoom added in v0.1.5

func (a WhiteboardRoomsAPI) SealPrivateRoom(ctx context.Context, roomID string) (map[string]any, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL